diff options
author | penguin_wwy <940375606@qq.com> | 2023-02-07 22:32:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-07 22:32:21 (GMT) |
commit | 753fc8a5d64369cd228c3e43fef1811ac3cfde83 (patch) | |
tree | a71d295db633dbe497aa5461d0a410e2792c0e22 /Python/bytecodes.c | |
parent | 0d3d5007b136ff1bc0faa960d6526e047dd92396 (diff) | |
download | cpython-753fc8a5d64369cd228c3e43fef1811ac3cfde83.zip cpython-753fc8a5d64369cd228c3e43fef1811ac3cfde83.tar.gz cpython-753fc8a5d64369cd228c3e43fef1811ac3cfde83.tar.bz2 |
gh-101632: Add the new RETURN_CONST opcode (#101633)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r-- | Python/bytecodes.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c index b43625f..0d7d922 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -555,6 +555,23 @@ dummy_func( goto resume_frame; } + inst(RETURN_CONST, (--)) { + PyObject *retval = GETITEM(consts, oparg); + Py_INCREF(retval); + assert(EMPTY()); + _PyFrame_SetStackPointer(frame, stack_pointer); + TRACE_FUNCTION_EXIT(); + DTRACE_FUNCTION_EXIT(); + _Py_LeaveRecursiveCallPy(tstate); + assert(frame != &entry_frame); + // GH-99729: We need to unlink the frame *before* clearing it: + _PyInterpreterFrame *dying = frame; + frame = cframe.current_frame = dying->previous; + _PyEvalFrameClearAndPop(tstate, dying); + _PyFrame_StackPush(frame, retval); + goto resume_frame; + } + inst(GET_AITER, (obj -- iter)) { unaryfunc getter = NULL; PyTypeObject *type = Py_TYPE(obj); |