def wrapint(space, x, w_symbolic=False, w_s=''): if space.config.objspace.std.withsmallint: from pypy.objspace.std.smallintobject import W_SmallIntObject try: return W_SmallIntObject(x) except OverflowError: from pypy.objspace.std.intobject import W_IntObject return W_IntObject(x, w_symbolic, w_s) elif space.config.objspace.std.withprebuiltint: from pypy.objspace.std.intobject import W_IntObject lower = space.config.objspace.std.prebuiltintfrom upper = space.config.objspace.std.prebuiltintto # use r_uint to perform a single comparison (this whole function # is getting inlined into every caller so keeping the branching # to a minimum is a good idea) index = r_uint(x - lower) if index >= r_uint(upper - lower): w_res = instantiate(W_IntObject) else: w_res = W_IntObject.PREBUILT[index] # obscure hack to help the CPU cache: we store 'x' even into # a prebuilt integer's intval. This makes sure that the intval # field is present in the cache in the common case where it is # quickly reused. (we could use a prefetch hint if we had that) w_res.intval = x return w_res else: from pypy.objspace.std.intobject import W_IntObject return W_IntObject(x, w_symbolic, w_s)
def delegate_Bool2IntObject(space, w_bool): return W_IntObject(int(w_bool.boolval))
"with explicit base")) value, w_longval = string_to_int_or_long(space, s, base) if w_longval is not None: if not space.is_w(w_inttype, space.w_int): raise OperationError(space.w_OverflowError, space.wrap( "long int too large to convert to int")) return w_longval elif space.is_w(w_inttype, space.w_int): # common case return wrapint(space, value, w_symbolic, w_s) else: w_obj = space.allocate_instance(W_IntObject, w_inttype) W_IntObject.__init__(w_obj, value, w_symbolic, w_s) return w_obj def descr_get_numerator(space, w_obj): return space.int(w_obj) def descr_get_denominator(space, w_obj): return space.wrap(1) def descr_get_real(space, w_obj): return space.int(w_obj) def descr_get_imag(space, w_obj): return space.wrap(0) # ____________________________________________________________
raise OperationError(space.w_ValueError, space.wrap(e.msg)) except ParseStringOverflowError, e: w_longval = retry_to_w_long(space, e.parser, base) if w_longval is not None: if not space.is_w(w_inttype, space.w_int): raise OperationError( space.w_OverflowError, space.wrap("long int too large to convert to int")) return w_longval elif space.is_w(w_inttype, space.w_int): # common case return wrapint(space, value) else: w_obj = space.allocate_instance(W_IntObject, w_inttype) W_IntObject.__init__(w_obj, value) return w_obj # ____________________________________________________________ int_typedef = StdTypeDef( "int", __doc__='''int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating point argument will be truncated towards zero (this does not include a string representation of a floating point number!) When converting a string, use the optional base. It is an error to supply a base when converting a non-string. If the argument is outside the integer range a long object will be returned instead.''',
"with explicit base")) value, w_longval = string_to_int_or_long(space, s, base) if w_longval is not None: if not space.is_w(w_inttype, space.w_int): raise OperationError(space.w_OverflowError, space.wrap( "long int too large to convert to int")) return w_longval elif space.is_w(w_inttype, space.w_int): # common case return wrapint(space, value) else: w_obj = space.allocate_instance(W_IntObject, w_inttype) W_IntObject.__init__(w_obj, value) return w_obj def descr_get_numerator(space, w_obj): return space.int(w_obj) def descr_get_denominator(space, w_obj): return space.wrap(1) def descr_get_real(space, w_obj): return space.int(w_obj) def descr_get_imag(space, w_obj): return space.wrap(0) # ____________________________________________________________
def delegate_SmallInt2Int(space, w_small): return W_IntObject(w_small.intval)