mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
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.
This commit is contained in:
parent
ad56340b66
commit
7199584ac8
28 changed files with 541 additions and 606 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue