summaryrefslogtreecommitdiffstats
path: root/Python/optimizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/optimizer.c')
-rw-r--r--Python/optimizer.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/Python/optimizer.c b/Python/optimizer.c
index c3ab649..2c1be61 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -181,6 +181,7 @@ _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNI
}
insert_executor(code, src, index, executor);
assert(frame->prev_instr == src);
+ frame->prev_instr = dest - 1;
return executor->execute(executor, frame, stack_pointer);
jump_to_destination:
frame->prev_instr = dest - 1;
@@ -201,7 +202,7 @@ PyUnstable_GetExecutor(PyCodeObject *code, int offset)
}
i += _PyInstruction_GetLength(code, i);
}
- PyErr_SetString(PyExc_ValueError, "no executor at given offset");
+ PyErr_SetString(PyExc_ValueError, "no executor at given byte offset");
return NULL;
}
@@ -373,6 +374,9 @@ translate_bytecode_to_trace(
_PyUOpInstruction *trace,
int max_length)
{
+#ifdef Py_DEBUG
+ _Py_CODEUNIT *initial_instr = instr;
+#endif
int trace_length = 0;
#ifdef Py_DEBUG
@@ -398,11 +402,11 @@ translate_bytecode_to_trace(
trace_length++;
DPRINTF(4,
- "Optimizing %s (%s:%d) at offset %ld\n",
+ "Optimizing %s (%s:%d) at byte offset %ld\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive));
for (;;) {
ADD_TO_TRACE(SAVE_IP, (int)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
@@ -492,21 +496,21 @@ done:
if (trace_length > 3) {
ADD_TO_TRACE(EXIT_TRACE, 0);
DPRINTF(1,
- "Created a trace for %s (%s:%d) at offset %ld -- length %d\n",
+ "Created a trace for %s (%s:%d) at byte offset %ld -- length %d\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive),
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive),
trace_length);
return trace_length;
}
else {
DPRINTF(4,
- "No trace for %s (%s:%d) at offset %ld\n",
+ "No trace for %s (%s:%d) at byte offset %ld\n",
PyUnicode_AsUTF8(code->co_qualname),
PyUnicode_AsUTF8(code->co_filename),
code->co_firstlineno,
- (long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
+ 2 * (long)(initial_instr - (_Py_CODEUNIT *)code->co_code_adaptive));
}
return 0;