Author: Maciej Fijalkowski <[email protected]>
Branch: better-jit-hooks
Changeset: r51106:51d2eea00745
Date: 2012-01-07 13:53 +0200
http://bitbucket.org/pypy/pypy/changeset/51d2eea00745/
Log: an attempt to use the new interface
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,14 +1,15 @@
from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.gateway import unwrap_spec, interp2app
+from pypy.interpreter.gateway import unwrap_spec, interp2app, NoneNotWrapped
from pypy.interpreter.pycode import PyCode
from pypy.interpreter.error import OperationError
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
from pypy.rpython.annlowlevel import cast_base_ptr_to_instance
from pypy.rpython.lltypesystem.rclass import OBJECT
from pypy.jit.metainterp.resoperation import rop, AbstractResOp
from pypy.rlib.nonconst import NonConstant
+from pypy.rlib import jit_hooks
class Cache(object):
in_recursion = False
@@ -77,7 +78,19 @@
return space.w_None
def wrap_oplist(space, logops, operations, ops_offset):
- return [WrappedOp(op, ops_offset[op], logops.repr_of_resop(op)) for op in
operations]
+ return [WrappedOp(jit_hooks._cast_to_gcref(op),
+ ops_offset[op],
+ logops.repr_of_resop(op)) for op in operations]
+
+@unwrap_spec(num=int, offset=int, repr=str)
+def descr_new_resop(space, num, w_args, w_res=NoneNotWrapped, offset=-1,
+ repr=''):
+ args = [jit_hooks.boxint_new(space.int_w(w_arg)) for w_arg in w_args]
+ if w_res is None:
+ llres = lltype.nullptr(llmemory.GCREF)
+ else:
+ llres = jit_hooks.boxint_new(space.int_w(w_res))
+ return WrappedOp(jit_hooks.resop_new(num, args, llres), offset, repr)
class WrappedOp(Wrappable):
""" A class representing a single ResOperation, wrapped nicely
@@ -91,16 +104,13 @@
return space.wrap(self.repr_of_resop)
def descr_num(self, space):
- return space.wrap(self.op.getopnum())
-
- def descr_name(self, space):
- return space.wrap(self.op.getopname())
+ return space.wrap(jit_hooks.resop_opnum(self.op))
WrappedOp.typedef = TypeDef(
'ResOperation',
__doc__ = WrappedOp.__doc__,
+ __new__ = interp2app(descr_new_resop),
__repr__ = interp2app(WrappedOp.descr_repr),
- name = GetSetProperty(WrappedOp.descr_name),
num = GetSetProperty(WrappedOp.descr_num),
)
WrappedOp.acceptable_as_base_class = False
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
@@ -95,7 +95,7 @@
assert elem[2][2] == False
assert len(elem[3]) == 3
int_add = elem[3][0]
- assert int_add.name == 'int_add'
+ #assert int_add.name == 'int_add'
assert int_add.num == self.int_add_num
self.on_compile_bridge()
assert len(all) == 2
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit