diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-05-24 06:15:14 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-05-24 06:15:14 (GMT) |
commit | b0f80b0312a99ca46323efc0e4d09b567553ed46 (patch) | |
tree | 323c414ce867d58fe60e127b4275e9931855a72f /Objects | |
parent | c35f491a06bb55cba097ddcd9fcbc9452ec21fb1 (diff) | |
download | cpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.zip cpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.tar.gz cpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.tar.bz2 |
Issue #26647: Python interpreter now uses 16-bit wordcode instead of bytecode.
Patch by Demur Rumed.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/frameobject.c | 12 | ||||
-rw-r--r-- | Objects/genobject.c | 4 |
2 files changed, 4 insertions, 12 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c index a4a862a..492886f 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -189,7 +189,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) memset(blockstack, '\0', sizeof(blockstack)); memset(in_finally, '\0', sizeof(in_finally)); blockstack_top = 0; - for (addr = 0; addr < code_len; addr++) { + for (addr = 0; addr < code_len; addr += 2) { unsigned char op = code[addr]; switch (op) { case SETUP_LOOP: @@ -251,10 +251,6 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) } } } - - if (op >= HAVE_ARGUMENT) { - addr += 2; - } } /* Verify that the blockstack tracking code didn't get lost. */ @@ -277,7 +273,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) * can tell whether the jump goes into any blocks without coming out * again - in that case we raise an exception below. */ delta_iblock = 0; - for (addr = min_addr; addr < max_addr; addr++) { + for (addr = min_addr; addr < max_addr; addr += 2) { unsigned char op = code[addr]; switch (op) { case SETUP_LOOP: @@ -294,10 +290,6 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) } min_delta_iblock = Py_MIN(min_delta_iblock, delta_iblock); - - if (op >= HAVE_ARGUMENT) { - addr += 2; - } } /* Derive the absolute iblock values from the deltas. */ diff --git a/Objects/genobject.c b/Objects/genobject.c index c94a6ed..3ca9696 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -277,7 +277,7 @@ _PyGen_yf(PyGenObject *gen) PyObject *bytecode = f->f_code->co_code; unsigned char *code = (unsigned char *)PyBytes_AS_STRING(bytecode); - if (code[f->f_lasti + 1] != YIELD_FROM) + if (code[f->f_lasti + 2] != YIELD_FROM) return NULL; yf = f->f_stacktop[-1]; Py_INCREF(yf); @@ -376,7 +376,7 @@ gen_throw(PyGenObject *gen, PyObject *args) assert(ret == yf); Py_DECREF(ret); /* Termination repetition of YIELD_FROM */ - gen->gi_frame->f_lasti++; + gen->gi_frame->f_lasti += 2; if (_PyGen_FetchStopIterationValue(&val) == 0) { ret = gen_send_ex(gen, val, 0, 0); Py_DECREF(val); |