[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