[pypy-commit] pypy default: expose the current call depth on DebugMergePoint
alex_gaynor
noreply at buildbot.pypy.org
Tue Jan 31 23:55:05 CET 2012
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch:
Changeset: r52004:32425967effa
Date: 2012-01-31 17:54 -0500
http://bitbucket.org/pypy/pypy/changeset/32425967effa/
Log: expose the current call depth on DebugMergePoint
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
@@ -127,6 +127,7 @@
l_w.append(DebugMergePoint(space, jit_hooks._cast_to_gcref(op),
logops.repr_of_resop(op),
jd_sd.jitdriver.name,
+ op.getarg(1).getint(),
w_greenkey))
else:
l_w.append(WrappedOp(jit_hooks._cast_to_gcref(op), ofs,
@@ -163,14 +164,14 @@
llres = res.llbox
return WrappedOp(jit_hooks.resop_new(num, args, llres), offset, repr)
- at unwrap_spec(repr=str, jd_name=str)
-def descr_new_dmp(space, w_tp, w_args, repr, jd_name, w_greenkey):
+ at unwrap_spec(repr=str, jd_name=str, call_depth=int)
+def descr_new_dmp(space, w_tp, w_args, repr, jd_name, call_depth, w_greenkey):
args = [space.interp_w(WrappedBox, w_arg).llbox for w_arg in
space.listview(w_args)]
num = rop.DEBUG_MERGE_POINT
return DebugMergePoint(space,
jit_hooks.resop_new(num, args, jit_hooks.emptyval()),
- repr, jd_name, w_greenkey)
+ repr, jd_name, call_depth, w_greenkey)
class WrappedOp(Wrappable):
""" A class representing a single ResOperation, wrapped nicely
@@ -205,10 +206,11 @@
jit_hooks.resop_setresult(self.op, box.llbox)
class DebugMergePoint(WrappedOp):
- def __init__(self, space, op, repr_of_resop, jd_name, w_greenkey):
+ def __init__(self, space, op, repr_of_resop, jd_name, call_depth, w_greenkey):
WrappedOp.__init__(self, op, -1, repr_of_resop)
+ self.jd_name = jd_name
+ self.call_depth = call_depth
self.w_greenkey = w_greenkey
- self.jd_name = jd_name
def get_pycode(self, space):
if self.jd_name == pypyjitdriver.name:
@@ -243,6 +245,7 @@
greenkey = interp_attrproperty_w("w_greenkey", cls=DebugMergePoint),
pycode = GetSetProperty(DebugMergePoint.get_pycode),
bytecode_no = GetSetProperty(DebugMergePoint.get_bytecode_no),
+ call_depth = interp_attrproperty("call_depth", cls=DebugMergePoint),
jitdriver_name = GetSetProperty(DebugMergePoint.get_jitdriver_name),
)
DebugMergePoint.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
@@ -122,7 +122,8 @@
assert isinstance(dmp, pypyjit.DebugMergePoint)
assert dmp.pycode is self.f.func_code
assert dmp.greenkey == (self.f.func_code, 0, False)
- #assert int_add.name == 'int_add'
+ assert dmp.call_depth == 0
+ assert int_add.name == 'int_add'
assert int_add.num == self.int_add_num
self.on_compile_bridge()
assert len(all) == 2
@@ -223,11 +224,13 @@
def f():
pass
- op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', (f.func_code, 0, 0))
+ op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', 2, (f.func_code, 0, 0))
assert op.bytecode_no == 0
assert op.pycode is f.func_code
assert repr(op) == 'repr'
assert op.jitdriver_name == 'pypyjit'
assert op.num == self.dmp_num
- op = DebugMergePoint([Box(0)], 'repr', 'notmain', ('str',))
+ assert op.call_depth == 2
+ op = DebugMergePoint([Box(0)], 'repr', 'notmain', 5, ('str',))
raises(AttributeError, 'op.pycode')
+ assert op.call_depth == 5
More information about the pypy-commit
mailing list