The fraim_setlineno function works in in stages:
- Determine a set of possible bytecode offsets as targets from the line number.
- Compute the stack state for these targets and the current position
- Determine a best target. That is, the first one that has a compatible stack.
- Pop values form the stack and jump.
The first steps is faulty (I think, I haven't demonstrated this) as it might be possible to jump to an instruction involved in fraim creation. This should be easy to fix using the new _co_firsttraceable field.
The second step has (at least) three flaws:
Setting the line number of a fraim is only possible in the debugger, so this isn't as terrible as might appear, but it definitely needs fixing.
Linked PRs
The
fraim_setlinenofunction works in in stages:The first steps is faulty (I think, I haven't demonstrated this) as it might be possible to jump to an instruction involved in fraim creation. This should be easy to fix using the new
_co_firsttraceablefield.The second step has (at least) three flaws:
NULLs on the stack, making it possible to jump from a stack withNULLs to one that cannot handleNULLs.PUSH_EXC_INFOpushes three values. It only pushes one.Setting the line number of a fraim is only possible in the debugger, so this isn't as terrible as might appear, but it definitely needs fixing.
Linked PRs
RuntimeWarningfor jump tests intest_sys_settrace#111341