diff options
author | Raymond Hettinger <python@rcn.com> | 2004-04-07 13:17:27 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-04-07 13:17:27 (GMT) |
commit | d3b836d202a205492b6a27041e6d517dc3a2c615 (patch) | |
tree | 9d049f0f1c7bf2ff2145bdcbdd8bc354bc8ff963 /Python/ceval.c | |
parent | 467a698bd2488ecb532fedcf1a8f6a018fa662a6 (diff) | |
download | cpython-d3b836d202a205492b6a27041e6d517dc3a2c615.zip cpython-d3b836d202a205492b6a27041e6d517dc3a2c615.tar.gz cpython-d3b836d202a205492b6a27041e6d517dc3a2c615.tar.bz2 |
* Improve readability and remove data dependencies by converting
pre-increment forms to post-increment forms. Post-incrementing
also eliminates the need for negative array indices for oparg fetches.
* In exception handling code, check for class based exceptions before
the older string based exceptions.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index de57ca7..9ea2772 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -625,7 +625,8 @@ eval_frame(PyFrameObject *f) #define INSTR_OFFSET() (next_instr - first_instr) #define NEXTOP() (*next_instr++) -#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) +#define OPARG() (next_instr[0] + (next_instr[1]<<8)) +#define SKIPARG() (next_instr += 2) #define JUMPTO(x) (next_instr = first_instr + (x)) #define JUMPBY(x) (next_instr += (x)) @@ -861,8 +862,10 @@ eval_frame(PyFrameObject *f) /* Extract opcode and argument */ opcode = NEXTOP(); - if (HAS_ARG(opcode)) - oparg = NEXTARG(); + if (HAS_ARG(opcode)) { + oparg = OPARG(); + SKIPARG(); + } dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS @@ -1653,7 +1656,7 @@ eval_frame(PyFrameObject *f) if (why & (WHY_RETURN | WHY_CONTINUE)) retval = POP(); } - else if (PyString_Check(v) || PyClass_Check(v)) { + else if (PyClass_Check(v) || PyString_Check(v)) { w = POP(); u = POP(); PyErr_Restore(v, w, u); @@ -1892,7 +1895,7 @@ eval_frame(PyFrameObject *f) case BUILD_TUPLE: x = PyTuple_New(oparg); if (x != NULL) { - for (; --oparg >= 0;) { + while (oparg--) { w = POP(); PyTuple_SET_ITEM(x, oparg, w); } @@ -1904,7 +1907,7 @@ eval_frame(PyFrameObject *f) case BUILD_LIST: x = PyList_New(oparg); if (x != NULL) { - for (; --oparg >= 0;) { + while (oparg--) { w = POP(); PyList_SET_ITEM(x, oparg, w); } @@ -2176,7 +2179,7 @@ eval_frame(PyFrameObject *f) x = NULL; break; } - while (--oparg >= 0) { + while (oparg--) { w = POP(); PyTuple_SET_ITEM(v, oparg, w); } @@ -2201,7 +2204,7 @@ eval_frame(PyFrameObject *f) x = NULL; break; } - while (--nfree >= 0) { + while (nfree--) { w = POP(); PyTuple_SET_ITEM(v, nfree, w); } @@ -2215,7 +2218,7 @@ eval_frame(PyFrameObject *f) x = NULL; break; } - while (--oparg >= 0) { + while (oparg--) { w = POP(); PyTuple_SET_ITEM(v, oparg, w); } @@ -2243,7 +2246,8 @@ eval_frame(PyFrameObject *f) case EXTENDED_ARG: opcode = NEXTOP(); - oparg = oparg<<16 | NEXTARG(); + oparg = oparg<<16 | OPARG(); + SKIPARG(); goto dispatch_opcode; default: @@ -3192,7 +3196,7 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj, } if (size > 0) { - while (--size >= 0) { + while (size--) { addr += *p++; if (*p++) break; @@ -3607,7 +3611,7 @@ update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack, } if (kwdict == NULL) return NULL; - while (--nk >= 0) { + while (nk--) { int err; PyObject *value = EXT_POP(*pp_stack); PyObject *key = EXT_POP(*pp_stack); @@ -3652,7 +3656,7 @@ update_star_args(int nstack, int nstar, PyObject *stararg, PyTuple_SET_ITEM(callargs, nstack + i, a); } } - while (--nstack >= 0) { + while (nstack--) { w = EXT_POP(*pp_stack); PyTuple_SET_ITEM(callargs, nstack, w); } @@ -3667,7 +3671,7 @@ load_args(PyObject ***pp_stack, int na) if (args == NULL) return NULL; - while (--na >= 0) { + while (na--) { w = EXT_POP(*pp_stack); PyTuple_SET_ITEM(args, na, w); } |