diff options
author | Mark Shannon <mark@hotpy.org> | 2023-06-14 12:46:37 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-14 12:46:37 (GMT) |
commit | 7199584ac8632eab57612f595a7162ab8d2ebbc0 (patch) | |
tree | eda3183876d2ce6805796d5c8f7b0cd8abadc22e /Python/optimizer.c | |
parent | ad56340b665c5d8ac1f318964f71697bba41acb7 (diff) | |
download | cpython-7199584ac8632eab57612f595a7162ab8d2ebbc0.zip cpython-7199584ac8632eab57612f595a7162ab8d2ebbc0.tar.gz cpython-7199584ac8632eab57612f595a7162ab8d2ebbc0.tar.bz2 |
GH-100987: Allow objects other than code objects as the "executable" of an internal frame. (GH-105727)
* Add table describing possible executable classes for out-of-process debuggers.
* Remove shim code object creation code as it is no longer needed.
* Make lltrace a bit more robust w.r.t. non-standard frames.
Diffstat (limited to 'Python/optimizer.c')
-rw-r--r-- | Python/optimizer.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Python/optimizer.c b/Python/optimizer.c index d721bfa..8f7a972 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -148,15 +148,17 @@ PyUnstable_SetOptimizer(_PyOptimizerObject *optimizer) _PyInterpreterFrame * _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest, PyObject **stack_pointer) { + PyCodeObject *code = (PyCodeObject *)frame->f_executable; + assert(PyCode_Check(code)); PyInterpreterState *interp = PyInterpreterState_Get(); - int index = get_executor_index(frame->f_code, src); + int index = get_executor_index(code, src); if (index < 0) { _PyFrame_SetStackPointer(frame, stack_pointer); return frame; } _PyOptimizerObject *opt = interp->optimizer; _PyExecutorObject *executor; - int err = opt->optimize(opt, frame->f_code, dest, &executor); + int err = opt->optimize(opt, code, dest, &executor); if (err <= 0) { if (err < 0) { return NULL; @@ -164,7 +166,7 @@ _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNI _PyFrame_SetStackPointer(frame, stack_pointer); return frame; } - insert_executor(frame->f_code, src, index, executor); + insert_executor(code, src, index, executor); return executor->execute(executor, frame, stack_pointer); } |