Author: Christian Tismer <tis...@stackless.com> Branch: Changeset: r53647:69f2bbfe5563 Date: 2012-03-14 20:03 -0700 http://bitbucket.org/pypy/pypy/changeset/69f2bbfe5563/
Log: a few more trivial changes for win64 diff --git a/pypy/rpython/llinterp.py b/pypy/rpython/llinterp.py --- a/pypy/rpython/llinterp.py +++ b/pypy/rpython/llinterp.py @@ -1,6 +1,6 @@ from pypy.objspace.flow.model import FunctionGraph, Constant, Variable, c_last_exception from pypy.rlib.rarithmetic import intmask, r_uint, ovfcheck, r_longlong -from pypy.rlib.rarithmetic import r_ulonglong +from pypy.rlib.rarithmetic import r_ulonglong, is_valid_int from pypy.rpython.lltypesystem import lltype, llmemory, lloperation, llheap from pypy.rpython.lltypesystem import rclass from pypy.rpython.ootypesystem import ootype @@ -1021,22 +1021,22 @@ # Overflow-detecting variants def op_int_neg_ovf(self, x): - assert type(x) is int + assert is_valid_int(x) try: return ovfcheck(-x) except OverflowError: self.make_llexception() def op_int_abs_ovf(self, x): - assert type(x) is int + assert is_valid_int(x) try: return ovfcheck(abs(x)) except OverflowError: self.make_llexception() def op_int_lshift_ovf(self, x, y): - assert isinstance(x, int) - assert isinstance(y, int) + assert is_valid_int(x) + assert is_valid_int(y) try: return ovfcheck(x << y) except OverflowError: @@ -1060,7 +1060,9 @@ return r '''%locals() elif operator == '%': - code = '''r = %(checkfn)s(x %% y) + ## overflow check on % does not work with emulated int + code = '''%(checkfn)s(x // y) + r = x %% y if x^y < 0 and x%%y != 0: r -= y return r @@ -1077,15 +1079,15 @@ self.make_llexception() """ % locals()).compile() in globals(), d - _makefunc2('op_int_add_ovf', '+', '(int, llmemory.AddressOffset)') - _makefunc2('op_int_mul_ovf', '*', '(int, llmemory.AddressOffset)', 'int') - _makefunc2('op_int_sub_ovf', '-', 'int') - _makefunc2('op_int_floordiv_ovf', '//', 'int') # XXX negative args - _makefunc2('op_int_floordiv_zer', '//', 'int') # can get off-by-one - _makefunc2('op_int_floordiv_ovf_zer', '//', 'int') # (see op_int_floordiv) - _makefunc2('op_int_mod_ovf', '%', 'int') - _makefunc2('op_int_mod_zer', '%', 'int') - _makefunc2('op_int_mod_ovf_zer', '%', 'int') + _makefunc2('op_int_add_ovf', '+', '(int, long, llmemory.AddressOffset)') + _makefunc2('op_int_mul_ovf', '*', '(int, long, llmemory.AddressOffset)', '(int, long)') + _makefunc2('op_int_sub_ovf', '-', '(int, long)') + _makefunc2('op_int_floordiv_ovf', '//', '(int, long)') # XXX negative args + _makefunc2('op_int_floordiv_zer', '//', '(int, long)') # can get off-by-one + _makefunc2('op_int_floordiv_ovf_zer', '//', '(int, long)') # (see op_int_floordiv) + _makefunc2('op_int_mod_ovf', '%', '(int, long)') + _makefunc2('op_int_mod_zer', '%', '(int, long)') + _makefunc2('op_int_mod_ovf_zer', '%', '(int, long)') _makefunc2('op_uint_floordiv_zer', '//', 'r_uint') _makefunc2('op_uint_mod_zer', '%', 'r_uint') @@ -1107,7 +1109,7 @@ x = x.default # if type(x) is a subclass of Symbolic, bool(x) will usually raise # a TypeError -- unless __nonzero__ has been explicitly overridden. - assert isinstance(x, (int, Symbolic)) + assert is_valid_int(x) or isinstance(x, Symbolic) return bool(x) # hack for jit.codegen.llgraph @@ -1129,7 +1131,7 @@ def op_oonewarray(self, ARRAY, length): assert isinstance(ARRAY, ootype.Array) - assert isinstance(length, int) + assert is_valid_int(length) return ootype.oonewarray(ARRAY, length) def op_runtimenew(self, class_): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit