◐ Shell
clean mode source ↗

gh-106581: Start projecting through calls by gvanrossum · Pull Request #107793 · python/cpython

@bedevere-bot mentioned this pull request

Aug 9, 2023
This is only the first step for doing `CALL` in Tier 2.
The next step involves tracing into the called code object.
After that we'll have to do the remaining `CALL` specialization.
Finally we'll have to tweak various things like `KW_NAMES`,
and possibly move the `NULL` (for method calls) *above* the callable.
But those are things for future PRs.

Note: this moves setting `frame->return_offset` directly in front of
`DISPATCH_INLINED()`, to make it easier to move it into `_PUSH_FRAME`.
Instead, the special case is an opcode using SAVE_FRAME_STATE().
Introducing #if TIER_ONE and #if TIER_TWO so we can implement
_PUSH_FRAME differently for both tiers.
Instead, we special-case SAVE_IP:
- Its Tier 2 expansion sets oparg to the instruction offset
- In Tier 1 it is a no-op (and skipped if present in a macro)
- This uses the function-by-version cache I just added
- There's not yet a way to trace back via `RETURN_VALUE`
This should fix leaks and hopefully most failing tests.