mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Charles G. Waldman <cgw@fnal.gov>:
Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893.
This commit is contained in:
parent
e266e42c9c
commit
ef8ace3a6f
6 changed files with 56 additions and 6 deletions
|
@ -613,6 +613,7 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
|||
opcode = NEXTOP();
|
||||
if (HAS_ARG(opcode))
|
||||
oparg = NEXTARG();
|
||||
dispatch_opcode:
|
||||
#ifdef DYNAMIC_EXECUTION_PROFILE
|
||||
#ifdef DXPAIRS
|
||||
dxpairs[lastopcode][opcode]++;
|
||||
|
@ -1750,6 +1751,11 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
|||
if (x != NULL) continue;
|
||||
break;
|
||||
|
||||
case EXTENDED_ARG:
|
||||
opcode = NEXTOP();
|
||||
oparg = oparg<<16 | NEXTARG();
|
||||
goto dispatch_opcode;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue