Commit 5b75c38c authored by Raymond Hettinger's avatar Raymond Hettinger

Factored out test for absolute jumps.

parent 6e5c1792
...@@ -325,7 +325,8 @@ intern_strings(PyObject *tuple) ...@@ -325,7 +325,8 @@ intern_strings(PyObject *tuple)
#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1])) #define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))
#define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD) #define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD)
#define GETJUMPTGT(arr, i) (GETARG(arr,i) + (arr[i]==JUMP_ABSOLUTE ? 0 : i+3)) #define ABSOLUTE_JUMP(op) (op==JUMP_ABSOLUTE || op==CONTINUE_LOOP)
#define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3))
#define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255 #define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255
static PyObject * static PyObject *
...@@ -394,7 +395,7 @@ optimize_code(PyObject *code, PyObject* consts) ...@@ -394,7 +395,7 @@ optimize_code(PyObject *code, PyObject* consts)
tgttgt = GETJUMPTGT(codestr, tgt); tgttgt = GETJUMPTGT(codestr, tgt);
if (opcode == JUMP_FORWARD) /* JMP_ABS can go backwards */ if (opcode == JUMP_FORWARD) /* JMP_ABS can go backwards */
opcode = JUMP_ABSOLUTE; opcode = JUMP_ABSOLUTE;
if (opcode != JUMP_ABSOLUTE && opcode != CONTINUE_LOOP) if (!ABSOLUTE_JUMP(opcode))
tgttgt -= i + 3; /* Calc relative jump addr */ tgttgt -= i + 3; /* Calc relative jump addr */
if (tgttgt < 0) /* No backward relative jumps */ if (tgttgt < 0) /* No backward relative jumps */
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment