|
|
|
@ -18,7 +18,11 @@ |
|
|
|
|| op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) |
|
|
|
#define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP) |
|
|
|
#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) do { \ |
|
|
|
assert(0 <= val && val <= 0xffff); \ |
|
|
|
arr[i+2] = (unsigned char)(((unsigned int)val)>>8); \ |
|
|
|
arr[i+1] = (unsigned char)(((unsigned int)val) & 255); \ |
|
|
|
} while(0) |
|
|
|
#define CODESIZE(op) (HAS_ARG(op) ? 3 : 1) |
|
|
|
#define ISBASICBLOCK(blocks, start, bytes) \ |
|
|
|
(blocks[start]==blocks[start+bytes-1]) |
|
|
|
@ -355,7 +359,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, |
|
|
|
unsigned char *codestr = NULL; |
|
|
|
unsigned char *lineno; |
|
|
|
int *addrmap = NULL; |
|
|
|
int new_line, cum_orig_line, last_line, tabsiz; |
|
|
|
int new_line, cum_orig_line, last_line; |
|
|
|
Py_ssize_t tabsiz; |
|
|
|
PyObject **const_stack = NULL; |
|
|
|
Py_ssize_t *load_const_stack = NULL; |
|
|
|
Py_ssize_t const_stack_top = -1; |
|
|
|
@ -660,7 +665,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, |
|
|
|
|
|
|
|
/* Fixup linenotab */ |
|
|
|
for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) { |
|
|
|
addrmap[i] = i - nops; |
|
|
|
assert(i - nops <= INT_MAX); |
|
|
|
addrmap[i] = (int)(i - nops); |
|
|
|
if (codestr[i] == NOP) |
|
|
|
nops++; |
|
|
|
} |
|
|
|
|