def descr__new__(space, w_longtype, w_x=0, w_base=gateway.NoneNotWrapped): from pypy.objspace.std.longobject import W_LongObject from pypy.rlib.rbigint import rbigint if space.config.objspace.std.withsmalllong: from pypy.objspace.std.smalllongobject import W_SmallLongObject else: W_SmallLongObject = None w_value = w_x # 'x' is the keyword argument name in CPython if w_base is None: # check for easy cases if (W_SmallLongObject and type(w_value) is W_SmallLongObject and space.is_w(w_longtype, space.w_long)): return w_value elif type(w_value) is W_LongObject: return newbigint(space, w_longtype, w_value.num) elif space.isinstance_w(w_value, space.w_str): return string_to_w_long(space, w_longtype, space.str_w(w_value)) elif space.isinstance_w(w_value, space.w_unicode): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w return string_to_w_long(space, w_longtype, unicode_to_decimal_w(space, w_value)) else: # otherwise, use the __long__() or the __trunc__ methods w_obj = w_value if (space.lookup(w_obj, '__long__') is not None or space.lookup(w_obj, '__int__') is not None): w_obj = space.long(w_obj) else: w_obj = space.trunc(w_obj) # :-( blame CPython 2.7 if space.lookup(w_obj, '__long__') is not None: w_obj = space.long(w_obj) else: w_obj = space.int(w_obj) bigint = space.bigint_w(w_obj) return newbigint(space, w_longtype, bigint) else: base = space.int_w(w_base) if space.isinstance_w(w_value, space.w_unicode): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w s = unicode_to_decimal_w(space, w_value) else: try: s = space.str_w(w_value) except OperationError, e: raise OperationError(space.w_TypeError, space.wrap("long() can't convert non-string " "with explicit base")) return string_to_w_long(space, w_longtype, s, base)
def descr__new__(space, w_longtype, w_x=0, w_base=gateway.NoneNotWrapped): from pypy.objspace.std.longobject import W_LongObject from pypy.rlib.rbigint import rbigint if space.config.objspace.std.withsmalllong: from pypy.objspace.std.smalllongobject import W_SmallLongObject else: W_SmallLongObject = None w_value = w_x # 'x' is the keyword argument name in CPython if w_base is None: # check for easy cases if (W_SmallLongObject and type(w_value) is W_SmallLongObject and space.is_w(w_longtype, space.w_long)): return w_value elif type(w_value) is W_LongObject: return newbigint(space, w_longtype, w_value.num) elif space.isinstance_w(w_value, space.w_str): return string_to_w_long(space, w_longtype, space.str_w(w_value)) elif space.isinstance_w(w_value, space.w_unicode): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w return string_to_w_long(space, w_longtype, unicode_to_decimal_w(space, w_value)) else: # otherwise, use the __long__() or the __trunc__ methods w_obj = w_value if (space.lookup(w_obj, '__long__') is not None or space.lookup(w_obj, '__int__') is not None): w_obj = space.long(w_obj) else: w_obj = space.trunc(w_obj) # :-( blame CPython 2.7 if space.lookup(w_obj, '__long__') is not None: w_obj = space.long(w_obj) else: w_obj = space.int(w_obj) bigint = space.bigint_w(w_obj) return newbigint(space, w_longtype, bigint) else: base = space.int_w(w_base) if space.isinstance_w(w_value, space.w_unicode): from pypy.objspace.std.unicodeobject import unicode_to_decimal_w s = unicode_to_decimal_w(space, w_value) else: try: s = space.str_w(w_value) except OperationError, e: raise OperationError( space.w_TypeError, space.wrap("long() can't convert non-string " "with explicit base")) return string_to_w_long(space, w_longtype, s, base)
def descr__new__(space, w_inttype, w_x=0, w_base=gateway.NoneNotWrapped): from pypy.objspace.std.intobject import W_IntObject w_longval = None w_value = w_x # 'x' is the keyword argument name in CPython value = 0 if w_base is None: ok = False # check for easy cases if type(w_value) is W_IntObject: value = w_value.intval ok = True elif space.is_true(space.isinstance(w_value, space.w_str)): value, w_longval = string_to_int_or_long(space, space.str_w(w_value)) ok = True elif space.is_true(space.isinstance(w_value, space.w_unicode)): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w string = unicode_to_decimal_w(space, w_value) value, w_longval = string_to_int_or_long(space, string) ok = True else: # If object supports the buffer interface try: w_buffer = space.buffer(w_value) except OperationError, e: if not e.match(space, space.w_TypeError): raise else: buf = space.interp_w(Buffer, w_buffer) value, w_longval = string_to_int_or_long(space, buf.as_str()) ok = True
def descr__new__(space, w_inttype, w_x=0, w_base=gateway.NoneNotWrapped): from pypy.objspace.std.intobject import W_IntObject w_longval = None w_value = w_x # 'x' is the keyword argument name in CPython value = 0 if w_base is None: ok = False # check for easy cases if type(w_value) is W_IntObject: value = w_value.intval ok = True elif space.isinstance_w(w_value, space.w_str): value, w_longval = string_to_int_or_long(space, space.str_w(w_value)) ok = True elif space.isinstance_w(w_value, space.w_unicode): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w string = unicode_to_decimal_w(space, w_value) value, w_longval = string_to_int_or_long(space, string) ok = True else: # If object supports the buffer interface try: w_buffer = space.buffer(w_value) except OperationError, e: if not e.match(space, space.w_TypeError): raise else: buf = space.interp_w(Buffer, w_buffer) value, w_longval = string_to_int_or_long(space, buf.as_str()) ok = True
def descr__new__(space, w_longtype, w_x=0, w_base=NoneNotWrapped): from pypy.objspace.std.longobject import W_LongObject w_value = w_x # 'x' is the keyword argument name in CPython if w_base is None: # check for easy cases if type(w_value) is W_LongObject: pass elif space.is_true(space.isinstance(w_value, space.w_str)): try: w_value = string_to_w_long(space, space.str_w(w_value)) except ParseStringError, e: raise OperationError(space.w_ValueError, space.wrap(e.msg)) elif space.is_true(space.isinstance(w_value, space.w_unicode)): try: if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w w_value = string_to_w_long(space, unicode_to_decimal_w(space, w_value)) except ParseStringError, e: raise OperationError(space.w_ValueError, space.wrap(e.msg))
def descr__new__(space, w_longtype, w_x=0, w_base=NoneNotWrapped): from pypy.objspace.std.longobject import W_LongObject w_value = w_x # 'x' is the keyword argument name in CPython if w_base is None: # check for easy cases if isinstance(w_value, W_LongObject): pass elif space.is_true(space.isinstance(w_value, space.w_str)): try: w_value = string_to_w_long(space, space.str_w(w_value)) except ParseStringError, e: raise OperationError(space.w_ValueError, space.wrap(e.msg)) elif space.is_true(space.isinstance(w_value, space.w_unicode)): try: if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w w_value = string_to_w_long( space, unicode_to_decimal_w(space, w_value)) except ParseStringError, e: raise OperationError(space.w_ValueError, space.wrap(e.msg))
def descr__new__(space, w_inttype, w_x=0, w_s='', w_symbolic=False, w_base=gateway.NoneNotWrapped): """ This is the constructor for creating an integer type. The values passed in the parameters are not Python types but PyPy types. This little detail can trip up any person new to hacking on PyPy. """ from pypy.objspace.std.intobject import W_IntObject w_longval = None w_value = w_x # 'x' is the keyword argument name in CPython value = 0 if w_base is None: ok = False # check for easy cases if type(w_value) is W_IntObject: value = w_value.intval ok = True elif space.isinstance_w(w_value, space.w_str): value, w_longval = string_to_int_or_long(space, space.str_w(w_value)) ok = True elif space.isinstance_w(w_value, space.w_unicode): if space.config.objspace.std.withropeunicode: from pypy.objspace.std.ropeunicodeobject import unicode_to_decimal_w else: from pypy.objspace.std.unicodeobject import unicode_to_decimal_w string = unicode_to_decimal_w(space, w_value) value, w_longval = string_to_int_or_long(space, string) ok = True else: # If object supports the buffer interface try: w_buffer = space.buffer(w_value) except OperationError, e: if not e.match(space, space.w_TypeError): raise else: buf = space.interp_w(Buffer, w_buffer) value, w_longval = string_to_int_or_long(space, buf.as_str()) ok = True
if space.is_true(space.isinstance(w_obj, space.w_long)): assert isinstance(w_obj, W_LongObject) # XXX this could fail! # XXX find a way to do that even if w_obj is not a W_LongObject w_value = w_obj elif space.is_true(space.isinstance(w_obj, space.w_int)): intval = space.int_w(w_obj) w_value = W_LongObject.fromint(space, intval) else: raise OperationError(space.w_ValueError, space.wrap("value can't be converted to long")) else: base = space.int_w(w_base) if space.is_true(space.isinstance(w_value, space.w_unicode)): from pypy.objspace.std.unicodeobject import unicode_to_decimal_w s = unicode_to_decimal_w(space, w_value) else: try: s = space.str_w(w_value) except OperationError, e: raise OperationError(space.w_TypeError, space.wrap("long() can't convert non-string " "with explicit base")) try: w_value = string_to_w_long(space, s, base) except ParseStringError, e: raise OperationError(space.w_ValueError, space.wrap(e.msg)) w_obj = space.allocate_instance(W_LongObject, w_longtype) W_LongObject.__init__(w_obj, w_value.num)