[pypy-commit] pypy better-jit-hooks: increasingly boring exerice of exposing more and more

fijal noreply at buildbot.pypy.org
Sun Jan 8 19:53:30 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: better-jit-hooks
Changeset: r51140:f59c4f53adf9
Date: 2012-01-08 20:53 +0200
http://bitbucket.org/pypy/pypy/changeset/f59c4f53adf9/

Log:	increasingly boring exerice of exposing more and more

diff --git a/pypy/module/pypyjit/__init__.py b/pypy/module/pypyjit/__init__.py
--- a/pypy/module/pypyjit/__init__.py
+++ b/pypy/module/pypyjit/__init__.py
@@ -11,6 +11,7 @@
         'set_optimize_hook': 'interp_resop.set_optimize_hook',
         'set_abort_hook': 'interp_resop.set_abort_hook',
         'ResOperation': 'interp_resop.WrappedOp',
+        'Box': 'interp_resop.WrappedBox',
     }
 
     def setup_after_space_initialization(self):
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
@@ -5,7 +5,7 @@
 from pypy.interpreter.pycode import PyCode
 from pypy.interpreter.error import OperationError
 from pypy.rpython.lltypesystem import lltype, llmemory
-from pypy.rpython.annlowlevel import cast_base_ptr_to_instance
+from pypy.rpython.annlowlevel import cast_base_ptr_to_instance, hlstr
 from pypy.rpython.lltypesystem.rclass import OBJECT
 from pypy.jit.metainterp.resoperation import rop, AbstractResOp
 from pypy.rlib.nonconst import NonConstant
@@ -114,14 +114,12 @@
                       logops.repr_of_resop(op)) for op in operations]
 
 @unwrap_spec(num=int, offset=int, repr=str)
-def descr_new_resop(space, w_tp, num, w_args, w_res=NoneNotWrapped, offset=-1,
+def descr_new_resop(space, w_tp, num, w_args, w_res=None, offset=-1,
                     repr=''):
-    args = [jit_hooks.boxint_new(space.int_w(w_arg)) for w_arg in
+    args = [space.interp_w(WrappedBox, w_arg).llbox for w_arg in
             space.listview(w_args)]
-    if w_res is None:
-        llres = lltype.nullptr(llmemory.GCREF.TO)
-    else:
-        llres = jit_hooks.boxint_new(space.int_w(w_res))
+    llres = space.interp_w(WrappedBox, w_res).llbox
+    # XXX None case
     return WrappedOp(jit_hooks.resop_new(num, args, llres), offset, repr)
 
 class WrappedOp(Wrappable):
@@ -136,7 +134,14 @@
         return space.wrap(self.repr_of_resop)
 
     def descr_num(self, space):
-        return space.wrap(jit_hooks.resop_opnum(self.op))
+        return space.wrap(jit_hooks.resop_getopnum(self.op))
+
+    def descr_name(self, space):
+        return space.wrap(hlstr(jit_hooks.resop_getopname(self.op)))
+
+    @unwrap_spec(no=int)
+    def descr_getarg(self, space, no):
+        return WrappedBox(jit_hooks.resop_getarg(self.op, no))
 
 WrappedOp.typedef = TypeDef(
     'ResOperation',
@@ -144,5 +149,26 @@
     __new__ = interp2app(descr_new_resop),
     __repr__ = interp2app(WrappedOp.descr_repr),
     num = GetSetProperty(WrappedOp.descr_num),
+    name = GetSetProperty(WrappedOp.descr_name),
+    getarg = interp2app(WrappedOp.descr_getarg),
 )
 WrappedOp.acceptable_as_base_class = False
+
+class WrappedBox(Wrappable):
+    """ A class representing a single box
+    """
+    def __init__(self, llbox):
+        self.llbox = llbox
+
+    def descr_getint(self, space):
+        return space.wrap(jit_hooks.box_getint(self.llbox))
+
+ at unwrap_spec(no=int)
+def descr_new_box(space, w_tp, no):
+    return WrappedBox(jit_hooks.boxint_new(no))
+
+WrappedBox.typedef = TypeDef(
+    'Box',
+    __new__ = interp2app(descr_new_box),
+    getint = interp2app(WrappedBox.descr_getint),
+)
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
@@ -48,9 +48,10 @@
         logger = Logger(MockSD())
 
         cls.origoplist = parse("""
-        [i1, i2]
+        [i1, i2, p2]
         i3 = int_add(i1, i2)
         debug_merge_point(0, 0, 0, 0, ConstPtr(ptr0))
+        guard_nonnull(p2) []
         guard_true(i3) []
         """, namespace={'ptr0': code_gcref}).operations
         greenkey = [ConstInt(0), ConstInt(0), ConstPtr(code_gcref)]
@@ -102,7 +103,7 @@
         assert elem[2][0].co_name == 'function'
         assert elem[2][1] == 0
         assert elem[2][2] == False
-        assert len(elem[3]) == 3
+        assert len(elem[3]) == 4
         int_add = elem[3][0]
         #assert int_add.name == 'int_add'
         assert int_add.num == self.int_add_num
@@ -185,7 +186,10 @@
         assert l == [[]]
 
     def test_creation(self):
-        import pypyjit
+        from pypyjit import Box, ResOperation
 
-        op = pypyjit.ResOperation(self.int_add_num, [1, 3], 4)
+        op = ResOperation(self.int_add_num, [Box(1), Box(3)], Box(4))
         assert op.num == self.int_add_num
+        assert op.name == 'int_add'
+        box = op.getarg(0)
+        assert box.getint() == 1


More information about the pypy-commit mailing list