Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r45041:81617331f53d Date: 2011-06-21 19:13 +0200 http://bitbucket.org/pypy/pypy/changeset/81617331f53d/
Log: merge heads diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py --- a/pypy/module/micronumpy/interp_numarray.py +++ b/pypy/module/micronumpy/interp_numarray.py @@ -44,6 +44,10 @@ self.invalidates = [] def invalidated(self): + if self.invalidates: + self._invalidated() + + def _invalidated(self): for arr in self.invalidates: arr.force_if_needed() del self.invalidates[:] @@ -353,4 +357,4 @@ __div__ = interp2app(BaseArray.descr_div), mean = interp2app(BaseArray.descr_mean), -) \ No newline at end of file +) diff --git a/pypy/module/pypyjit/interp_jit.py b/pypy/module/pypyjit/interp_jit.py --- a/pypy/module/pypyjit/interp_jit.py +++ b/pypy/module/pypyjit/interp_jit.py @@ -18,7 +18,7 @@ from pypy.rlib.objectmodel import we_are_translated from pypy.rlib.nonconst import NonConstant from pypy.jit.metainterp.resoperation import rop -from pypy.module.pypyjit.interp_resop import W_DebugMergePoint +from pypy.module.pypyjit.interp_resop import debug_merge_point_from_boxes PyFrame._virtualizable2_ = ['last_instr', 'pycode', 'valuestackdepth', 'valuestack_w[*]', @@ -53,7 +53,8 @@ list_w = [] for op in operations: if op.getopnum() == rop.DEBUG_MERGE_POINT: - list_w.append(space.wrap(W_DebugMergePoint(op.getarglist()))) + list_w.append(space.wrap(debug_merge_point_from_boxes( + op.getarglist()))) else: list_w.append(space.wrap(logops.repr_of_resop(op))) return list_w diff --git a/pypy/module/pypyjit/interp_resop.py b/pypy/module/pypyjit/interp_resop.py --- a/pypy/module/pypyjit/interp_resop.py +++ b/pypy/module/pypyjit/interp_resop.py @@ -1,6 +1,6 @@ from pypy.interpreter.typedef import TypeDef, interp_attrproperty -from pypy.interpreter.baseobjspace import Wrappable, ObjSpace +from pypy.interpreter.baseobjspace import Wrappable, ObjSpace, W_Root from pypy.interpreter.gateway import unwrap_spec, interp2app from pypy.interpreter.pycode import PyCode from pypy.rpython.lltypesystem import lltype, llmemory @@ -10,22 +10,32 @@ class W_DebugMergePoint(Wrappable): """ A class representing debug_merge_point JIT operation """ - - def __init__(self, boxes): - self.mp_no = boxes[0].getint() - self.offset = boxes[2].getint() - llcode = lltype.cast_opaque_ptr(lltype.Ptr(OBJECT), - boxes[4].getref_base()) - self.pycode = cast_base_ptr_to_instance(PyCode, llcode) - @unwrap_spec('self', ObjSpace) + def __init__(self, mp_no, offset, pycode): + self.mp_no = mp_no + self.offset = offset + self.pycode = pycode + def descr_repr(self, space): return space.wrap('DebugMergePoint()') +@unwrap_spec(mp_no=int, offset=int, pycode=PyCode) +def new_debug_merge_point(space, w_tp, mp_no, offset, pycode): + return W_DebugMergePoint(mp_no, offset, pycode) + +def debug_merge_point_from_boxes(boxes): + mp_no = boxes[0].getint() + offset = boxes[2].getint() + llcode = lltype.cast_opaque_ptr(lltype.Ptr(OBJECT), + boxes[4].getref_base()) + pycode = cast_base_ptr_to_instance(PyCode, llcode) + assert pycode is not None + return W_DebugMergePoint(mp_no, offset, pycode) + W_DebugMergePoint.typedef = TypeDef( 'DebugMergePoint', + __new__ = interp2app(new_debug_merge_point), __doc__ = W_DebugMergePoint.__doc__, __repr__ = interp2app(W_DebugMergePoint.descr_repr), code = interp_attrproperty('pycode', W_DebugMergePoint), ) - diff --git a/pypy/module/pypyjit/test/test_jit_hook.py b/pypy/module/pypyjit/test/test_jit_hook.py --- a/pypy/module/pypyjit/test/test_jit_hook.py +++ b/pypy/module/pypyjit/test/test_jit_hook.py @@ -119,3 +119,8 @@ dmp = l[0][3][1] assert isinstance(dmp, pypyjit.DebugMergePoint) assert dmp.code is self.f.func_code + + def test_creation(self): + import pypyjit + dmp = pypyjit.DebugMergePoint(0, 0, self.f.func_code) + assert dmp.code is self.f.func_code diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py b/pypy/module/pypyjit/test_pypy_c/test_string.py new file mode 100644 --- /dev/null +++ b/pypy/module/pypyjit/test_pypy_c/test_string.py @@ -0,0 +1,42 @@ +from pypy.module.pypyjit.test_pypy_c.test_00_model import BaseTestPyPyC + +class TestString(BaseTestPyPyC): + def test_lookup_default_encoding(self): + def main(n): + import string + i = 0 + letters = string.letters + uletters = unicode(string.letters) + while i < n: + i += letters[i % len(letters)] == uletters[i % len(letters)] + return i + + log = self.run(main, [300]) + assert log.result == 300 + loop, = log.loops_by_filename(self.filepath) + assert loop.match(""" + i14 = int_lt(i6, i9) + guard_true(i14, descr=<Guard42>) + i15 = int_mod(i6, i10) + i17 = int_rshift(i15, 63) + i18 = int_and(i10, i17) + i19 = int_add(i15, i18) + i21 = int_lt(i19, 0) + guard_false(i21, descr=<Guard43>) + i22 = int_ge(i19, i10) + guard_false(i22, descr=<Guard44>) + i23 = strgetitem(p11, i19) + i24 = int_ge(i19, i12) + guard_false(i24, descr=<Guard45>) + i25 = unicodegetitem(p13, i19) + guard_not_invalidated(descr=<Guard46>) + p27 = newstr(1) + strsetitem(p27, 0, i23) + p30 = call(ConstClass(ll_str2unicode__rpy_stringPtr), p27, descr=<GcPtrCallDescr>) + guard_no_exception(descr=<Guard47>) + i32 = call(ConstClass(_ll_2_str_eq_checknull_char__rpy_unicodePtr_UniChar), p30, i25, descr=<SignedCallDescr>) + guard_true(i32, descr=<Guard48>) + i34 = int_add(i6, 1) + --TICK-- + jump(p0, p1, p2, p3, p4, p5, i34, p7, p8, i9, i10, p11, i12, p13, descr=<Loop4>) + """) \ No newline at end of file diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py --- a/pypy/module/sys/__init__.py +++ b/pypy/module/sys/__init__.py @@ -7,6 +7,8 @@ class Module(MixedModule): """Sys Builtin Module. """ + _immutable_fields_ = ["defaultencoding?"] + def __init__(self, space, w_name): """NOT_RPYTHON""" # because parent __init__ isn't if space.config.translating: diff --git a/pypy/rpython/lltypesystem/rlist.py b/pypy/rpython/lltypesystem/rlist.py --- a/pypy/rpython/lltypesystem/rlist.py +++ b/pypy/rpython/lltypesystem/rlist.py @@ -250,12 +250,11 @@ length = l.length l.length = length + 1 l.ll_setitem_fast(length, newitem) -ll_append_noresize.oopspec = 'list.append(l, newitem)' def ll_both_none(lst1, lst2): return not lst1 and not lst2 - + # ____________________________________________________________ # diff --git a/pypy/translator/platform/darwin.py b/pypy/translator/platform/darwin.py --- a/pypy/translator/platform/darwin.py +++ b/pypy/translator/platform/darwin.py @@ -68,12 +68,10 @@ class Darwin_i386(Darwin): name = "darwin_i386" - link_flags = ('-arch', 'i386', '-mmacosx-version-min=10.4') - cflags = ('-arch', 'i386', '-O3', '-fomit-frame-pointer', - '-mmacosx-version-min=10.4') + link_flags = ('-arch', 'i386') + cflags = ('-arch', 'i386', '-O3', '-fomit-frame-pointer') class Darwin_x86_64(Darwin): name = "darwin_x86_64" - link_flags = ('-arch', 'x86_64', '-mmacosx-version-min=10.4') - cflags = ('-arch', 'x86_64', '-O3', '-fomit-frame-pointer', - '-mmacosx-version-min=10.4') + link_flags = ('-arch', 'x86_64') + cflags = ('-arch', 'x86_64', '-O3', '-fomit-frame-pointer') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit