Author: Alex Gaynor <[email protected]>
Branch: detect-immutable-fields
Changeset: r68881:215ae189f2ae
Date: 2014-01-23 15:14 -0600
http://bitbucket.org/pypy/pypy/changeset/215ae189f2ae/
Log: merged default in
diff --git a/pypy/interpreter/pyparser/test/test_parsestring.py
b/pypy/interpreter/pyparser/test/test_parsestring.py
--- a/pypy/interpreter/pyparser/test/test_parsestring.py
+++ b/pypy/interpreter/pyparser/test/test_parsestring.py
@@ -2,9 +2,9 @@
import py, sys
class TestParsetring:
- def parse_and_compare(self, literal, value):
+ def parse_and_compare(self, literal, value, encoding=None):
space = self.space
- w_ret = parsestring.parsestr(space, None, literal)
+ w_ret = parsestring.parsestr(space, encoding, literal)
if isinstance(value, str):
assert space.type(w_ret) == space.w_str
assert space.str_w(w_ret) == value
diff --git a/pypy/module/cpyext/test/test_ztranslation.py
b/pypy/module/cpyext/test/test_ztranslation.py
--- a/pypy/module/cpyext/test/test_ztranslation.py
+++ b/pypy/module/cpyext/test/test_ztranslation.py
@@ -1,4 +1,4 @@
from pypy.objspace.fake.checkmodule import checkmodule
def test_cpyext_translates():
- checkmodule('cpyext')
+ checkmodule('cpyext', '_rawffi')
diff --git a/pypy/module/pypyjit/policy.py b/pypy/module/pypyjit/policy.py
--- a/pypy/module/pypyjit/policy.py
+++ b/pypy/module/pypyjit/policy.py
@@ -98,7 +98,8 @@
modname == '__builtin__.functional' or
modname == '__builtin__.descriptor' or
modname == 'thread.os_local' or
- modname == 'thread.os_thread'):
+ modname == 'thread.os_thread' or
+ modname.startswith('_rawffi.alt')):
return True
if '.' in modname:
modname, rest = modname.split('.', 1)
diff --git a/pypy/module/pypyjit/test_pypy_c/test_weakref.py
b/pypy/module/pypyjit/test_pypy_c/test_weakref.py
--- a/pypy/module/pypyjit/test_pypy_c/test_weakref.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_weakref.py
@@ -30,13 +30,13 @@
guard_not_invalidated(descr=...)
p64 = getfield_gc(ConstPtr(ptr40), descr=<FieldP
pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_strategy \d+>)
guard_value(p64, ConstPtr(ptr42), descr=...)
- p65 = getfield_gc(p14, descr=<FieldP
pypy.objspace.std.mapdict.W_ObjectObjectSize5.inst_map 48>)
+ p65 = getfield_gc(p14, descr=<FieldP
pypy.objspace.std.mapdict.W_ObjectObjectSize5.inst_map \d+>)
guard_value(p65, ConstPtr(ptr45), descr=...)
p66 = getfield_gc(p14, descr=<FieldP
pypy.objspace.std.mapdict.W_ObjectObjectSize5.inst__value0 \d+>)
guard_nonnull_class(p66, ..., descr=...)
p67 = force_token()
setfield_gc(p0, p67, descr=<FieldP
pypy.interpreter.pyframe.PyFrame.vable_token \d+>)
- p68 =
call_may_force(ConstClass(WeakrefLifelineWithCallbacks.make_weakref_with_callback),
p66, ConstPtr(ptr50), p14, ConstPtr(ptr51), descr=<Callr 8 rrrr EF=6>)
+ p68 =
call_may_force(ConstClass(WeakrefLifelineWithCallbacks.make_weakref_with_callback),
p66, ConstPtr(ptr50), p14, ConstPtr(ptr51), descr=<Callr \d rrrr EF=6>)
guard_not_forced(descr=...)
guard_no_exception(descr=...)
guard_nonnull_class(p68, ..., descr=...)
diff --git a/rpython/rtyper/raisingops.py b/rpython/rtyper/raisingops.py
--- a/rpython/rtyper/raisingops.py
+++ b/rpython/rtyper/raisingops.py
@@ -87,7 +87,7 @@
if ((r^(x)) >= 0 || (r^(y)) >= 0); \
else FAIL_OVF(err, "integer addition")
'''
- r = x + y
+ r = intmask(r_uint(x) + r_uint(y))
if r^x >= 0 or r^y >= 0:
return r
else:
@@ -99,7 +99,7 @@
if (r >= (x)); \
else FAIL_OVF("integer addition")
'''
- r = x + y
+ r = intmask(r_uint(x) + r_uint(y))
if r >= x:
return r
else:
@@ -111,7 +111,7 @@
if ((r^(x)) >= 0 || (r^~(y)) >= 0); \
else FAIL_OVF(err, "integer subtraction")
'''
- r = x - y
+ r = intmask(r_uint(x) - r_uint(y))
if r^x >= 0 or r^~y >= 0:
return r
else:
diff --git a/rpython/translator/c/test/test_backendoptimized.py
b/rpython/translator/c/test/test_backendoptimized.py
--- a/rpython/translator/c/test/test_backendoptimized.py
+++ b/rpython/translator/c/test/test_backendoptimized.py
@@ -1,6 +1,4 @@
-from rpython.conftest import option
from rpython.rlib.rarithmetic import r_uint, r_longlong, r_ulonglong
-from rpython.translator.backendopt.all import backend_optimizations
from rpython.translator.c.test.test_typed import TestTypedTestCase as
_TestTypedTestCase
from rpython.translator.c.test.test_genc import compile
@@ -77,12 +75,8 @@
assert res == 42
class TestTypedOptimizedSwitchTestCase:
-
- class CodeGenerator(_TestTypedTestCase):
- def process(self, t):
- _TestTypedTestCase.process(self, t)
- self.t = t
- backend_optimizations(t, merge_if_blocks=True)
+ def getcompiled(self, func, argtypes):
+ return compile(func, argtypes, merge_if_blocks=True)
def test_int_switch(self):
def f(x):
@@ -93,8 +87,7 @@
elif x == 27:
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in (0,1,2,3,9,27,48, -9):
assert fn(x) == f(x)
@@ -107,8 +100,7 @@
elif x == 3:
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in (0,1,2,3,9,27,48, -9):
assert fn(x) == f(x)
@@ -121,8 +113,7 @@
elif x == 3:
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in (0,1,2,3,9,27,48, -9):
assert fn(x) == f(x)
@@ -135,8 +126,7 @@
elif x == r_uint(27):
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [r_uint])
+ fn = self.getcompiled(f, [r_uint])
for x in (0,1,2,3,9,27,48):
assert fn(r_uint(x)) == f(r_uint(x))
@@ -149,8 +139,7 @@
elif x == r_longlong(27):
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [r_longlong])
+ fn = self.getcompiled(f, [r_longlong])
for x in (0,1,2,3,9,27,48, -9):
assert fn(r_longlong(x)) == f(r_longlong(x))
@@ -163,8 +152,7 @@
elif x == r_ulonglong(27):
return 3
return 0
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [r_ulonglong])
+ fn = self.getcompiled(f, [r_ulonglong])
for x in (0,1,2,3,9,27,48, r_ulonglong(-9)):
assert fn(r_ulonglong(x)) == f(r_ulonglong(x))
@@ -178,8 +166,7 @@
elif x == 'c':
return 'd'
return '@'
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in 'ABCabc@':
y = ord(x)
assert fn(y) == f(y)
@@ -194,8 +181,7 @@
if case == '\xFB': return 5
if case == '\xFA': return 6
return 7
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for input, expected in [(255, 1), (253, 3), (251, 5), (161, 7)]:
res = fn(input)
assert res == expected
@@ -210,20 +196,15 @@
elif x == u'c':
return 'd'
return '@'
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in u'ABCabc@':
y = ord(x)
assert fn(y) == f(y)
class TestTypedOptimizedRaisingOps:
-
- class CodeGenerator(_TestTypedTestCase):
- def process(self, t):
- _TestTypedTestCase.process(self, t)
- self.t = t
- backend_optimizations(t, raisingop2direct_call=True)
+ def getcompiled(self, func, argtypes):
+ return compile(func, argtypes, raisingop2direct_call=True)
def test_int_floordiv_zer(self):
def f(x):
@@ -232,7 +213,25 @@
except:
y = 456
return y
- codegenerator = self.CodeGenerator()
- fn = codegenerator.getcompiled(f, [int])
+ fn = self.getcompiled(f, [int])
for x in (0,1,2,3,9,27,48, -9):
assert fn(x) == f(x)
+
+ def test_ovf_op_in_loop(self):
+ # This checks whether the raising operations are implemented using
+ # unsigned arithmetic. The problem with using signed arithmetic is that
+ # signed overflow is undefined in C and the optimizer is allowed to
+ # remove the overflow check.
+ from sys import maxint
+ from rpython.rlib.rarithmetic import ovfcheck
+ def f(x, y):
+ ret = 0
+ for i in range(y):
+ try:
+ ret = ovfcheck(x + i)
+ except OverflowError:
+ break
+ return ret
+ fc = self.getcompiled(f, [int, int])
+ assert fc(10, 10) == 19
+ assert fc(maxint, 10) == maxint
diff --git a/rpython/translator/c/test/test_genc.py
b/rpython/translator/c/test/test_genc.py
--- a/rpython/translator/c/test/test_genc.py
+++ b/rpython/translator/c/test/test_genc.py
@@ -50,7 +50,7 @@
unsigned_ffffffff)
def compile(fn, argtypes, view=False, gcpolicy="none", backendopt=True,
- annotatorpolicy=None, thread=False):
+ annotatorpolicy=None, thread=False, **kwds):
argtypes_unroll = unrolling_iterable(enumerate(argtypes))
for argtype in argtypes:
@@ -98,7 +98,7 @@
return 0
t = Translation(entry_point, None, gc=gcpolicy, backend="c",
- policy=annotatorpolicy, thread=thread)
+ policy=annotatorpolicy, thread=thread, **kwds)
if not backendopt:
t.disable(["backendopt_lltype"])
t.driver.config.translation.countmallocs = True
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit