[pypy-commit] pypy better-jit-hooks: improve a bit how to get to items

fijal noreply at buildbot.pypy.org
Sun Jan 8 19:29:02 CET 2012


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

Log:	improve a bit how to get to items

diff --git a/pypy/jit/metainterp/test/test_jitportal.py b/pypy/jit/metainterp/test/test_jitportal.py
--- a/pypy/jit/metainterp/test/test_jitportal.py
+++ b/pypy/jit/metainterp/test/test_jitportal.py
@@ -5,6 +5,7 @@
 from pypy.jit.codewriter.policy import JitPolicy
 from pypy.jit.metainterp.jitprof import ABORT_FORCE_QUASIIMMUT
 from pypy.jit.metainterp.resoperation import rop
+from pypy.rpython.annlowlevel import hlstr
 
 class TestJitPortal(LLJitMixin):
     def test_abort_quasi_immut(self):
@@ -130,7 +131,9 @@
                                      [jit_hooks.boxint_new(3),
                                       jit_hooks.boxint_new(4)],
                                      jit_hooks.boxint_new(1))
-            return jit_hooks.resop_opnum(op)
+            assert hlstr(jit_hooks.resop_getopname(op)) == 'int_add'
+            assert jit_hooks.resop_getopnum(op) == rop.INT_ADD
+            box = jit_hooks.resop_getarg(op, 0)
+            assert jit_hooks.box_getint(box) == 3
 
-        res = self.meta_interp(main, [])
-        assert res == rop.INT_ADD
+        self.meta_interp(main, [])
diff --git a/pypy/rlib/jit_hooks.py b/pypy/rlib/jit_hooks.py
--- a/pypy/rlib/jit_hooks.py
+++ b/pypy/rlib/jit_hooks.py
@@ -4,26 +4,28 @@
 from pypy.rpython.lltypesystem import llmemory, lltype
 from pypy.rpython.lltypesystem import rclass
 from pypy.rpython.annlowlevel import cast_instance_to_base_ptr,\
-     cast_base_ptr_to_instance
+     cast_base_ptr_to_instance, llstr, hlstr
 from pypy.rlib.objectmodel import specialize
 
-def register_helper(helper, s_result):
-    
-    class Entry(ExtRegistryEntry):
-        _about_ = helper
+def register_helper(s_result):
+    def wrapper(helper):
+        class Entry(ExtRegistryEntry):
+            _about_ = helper
 
-        def compute_result_annotation(self, *args):
-            return s_result
+            def compute_result_annotation(self, *args):
+                return s_result
 
-        def specialize_call(self, hop):
-            from pypy.rpython.lltypesystem import lltype
+            def specialize_call(self, hop):
+                from pypy.rpython.lltypesystem import lltype
 
-            c_func = hop.inputconst(lltype.Void, helper)
-            c_name = hop.inputconst(lltype.Void, 'access_helper')
-            args_v = [hop.inputarg(arg, arg=i)
-                      for i, arg in enumerate(hop.args_r)]
-            return hop.genop('jit_marker', [c_name, c_func] + args_v,
-                             resulttype=hop.r_result)
+                c_func = hop.inputconst(lltype.Void, helper)
+                c_name = hop.inputconst(lltype.Void, 'access_helper')
+                args_v = [hop.inputarg(arg, arg=i)
+                          for i, arg in enumerate(hop.args_r)]
+                return hop.genop('jit_marker', [c_name, c_func] + args_v,
+                                 resulttype=hop.r_result)
+        return helper
+    return wrapper
 
 def _cast_to_box(llref):
     from pypy.jit.metainterp.history import AbstractValue
@@ -42,6 +44,7 @@
     return lltype.cast_opaque_ptr(llmemory.GCREF,
                                   cast_instance_to_base_ptr(obj))
 
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
 def resop_new(no, llargs, llres):
     from pypy.jit.metainterp.history import ResOperation
 
@@ -49,15 +52,23 @@
     res = _cast_to_box(llres)
     return _cast_to_gcref(ResOperation(no, args, res))
 
-register_helper(resop_new, annmodel.SomePtr(llmemory.GCREF))
-
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
 def boxint_new(no):
     from pypy.jit.metainterp.history import BoxInt
     return _cast_to_gcref(BoxInt(no))
 
-register_helper(boxint_new, annmodel.SomePtr(llmemory.GCREF))
-
-def resop_opnum(llop):
+ at register_helper(annmodel.SomeInteger())
+def resop_getopnum(llop):
     return _cast_to_resop(llop).getopnum()
 
-register_helper(resop_opnum, annmodel.SomeInteger())
+ at register_helper(annmodel.SomeString(can_be_None=True))
+def resop_getopname(llop):
+    return llstr(_cast_to_resop(llop).getopname())
+
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
+def resop_getarg(llop, no):
+    return _cast_to_gcref(_cast_to_resop(llop).getarg(no))
+
+ at register_helper(annmodel.SomeInteger())
+def box_getint(llbox):
+    return _cast_to_box(llbox).getint()


More information about the pypy-commit mailing list