aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2016-07-01 11:59:45 +0200
committerArmin Rigo <arigo@tunes.org>2016-07-01 11:59:45 +0200
commit82d7e74c81bbf8f016d31a11ea8eb26d53ba954d (patch)
tree84fc4441ce7329dde6daaabf308e0c502e8b6a77 /pypy/interpreter/pyopcode.py
parentRemove debugging output (diff)
downloadpypy-82d7e74c81bbf8f016d31a11ea8eb26d53ba954d.tar.gz
pypy-82d7e74c81bbf8f016d31a11ea8eb26d53ba954d.tar.bz2
pypy-82d7e74c81bbf8f016d31a11ea8eb26d53ba954d.zip
A fix that is also an optimization: when single-stepping on a loop
while foo: body then it never jumps back to the first bytecode of the "while" line (it jumps back to the 2nd bytecode of that line). But we still want to see it when stepping in the loop.
Diffstat (limited to 'pypy/interpreter/pyopcode.py')
-rw-r--r--pypy/interpreter/pyopcode.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
index 8fe9860c6f..adec96558f 100644
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -53,10 +53,14 @@ class __extend__(pyframe.PyFrame):
### opcode dispatch ###
def dispatch(self, pycode, next_instr, ec):
+ if self.space.config.translation.reverse_debugger:
+ from pypy.interpreter.reverse_debugging import prepare_code
+ prepare_code(pycode)
+ #
# For the sequel, force 'next_instr' to be unsigned for performance
next_instr = r_uint(next_instr)
co_code = pycode.co_code
-
+ #
try:
while True:
next_instr = self.handle_bytecode(co_code, next_instr, ec)
@@ -1055,6 +1059,11 @@ class __extend__(pyframe.PyFrame):
def jump_absolute(self, jumpto, ec):
# this function is overridden by pypy.module.pypyjit.interp_jit
check_nonneg(jumpto)
+ #
+ if self.space.config.translation.reverse_debugger:
+ from pypy.interpreter.reverse_debugging import jump_backward
+ jump_backward(self, jumpto)
+ #
return jumpto
def JUMP_FORWARD(self, jumpby, next_instr):
@@ -1308,9 +1317,12 @@ class __extend__(pyframe.PyFrame):
self.space.setitem(w_dict, w_key, w_value)
def LOAD_REVDB_VAR(self, oparg, next_instr):
- from pypy.interpreter.reverse_debugging import load_metavar
- w_var = load_metavar(oparg)
- self.pushvalue(w_var)
+ if self.space.config.translation.reverse_debugger:
+ from pypy.interpreter.reverse_debugging import load_metavar
+ w_var = load_metavar(oparg)
+ self.pushvalue(w_var)
+ else:
+ self.MISSING_OPCODE(oparg, next_instr)
### ____________________________________________________________ ###