mirror of
https://github.com/python/cpython.git
synced 2025-10-17 04:08:28 +00:00
GH-121131: Clean up and fix some instrumented instructions. (GH-121132)
* Add support for 'prev_instr' to code generator and refactor some INSTRUMENTED instructions
This commit is contained in:
parent
d9efa45d74
commit
afb0aa6ed2
15 changed files with 277 additions and 215 deletions
|
@ -27,6 +27,7 @@ class Properties:
|
|||
tier: int | None = None
|
||||
oparg_and_1: bool = False
|
||||
const_oparg: int = -1
|
||||
needs_prev: bool = False
|
||||
|
||||
def dump(self, indent: str) -> None:
|
||||
print(indent, end="")
|
||||
|
@ -53,6 +54,7 @@ class Properties:
|
|||
has_free=any(p.has_free for p in properties),
|
||||
side_exit=any(p.side_exit for p in properties),
|
||||
pure=all(p.pure for p in properties),
|
||||
needs_prev=any(p.needs_prev for p in properties),
|
||||
)
|
||||
|
||||
@property
|
||||
|
@ -618,6 +620,7 @@ def compute_properties(op: parser.InstDef) -> Properties:
|
|||
has_free=has_free,
|
||||
pure="pure" in op.annotations,
|
||||
tier=tier_variable(op),
|
||||
needs_prev=variable_used(op, "prev_instr"),
|
||||
)
|
||||
|
||||
|
||||
|
@ -797,12 +800,6 @@ def assign_opcodes(
|
|||
|
||||
instrumented = [name for name in instructions if name.startswith("INSTRUMENTED")]
|
||||
|
||||
# Special case: this instruction is implemented in ceval.c
|
||||
# rather than bytecodes.c, so we need to add it explicitly
|
||||
# here (at least until we add something to bytecodes.c to
|
||||
# declare external instructions).
|
||||
instrumented.append("INSTRUMENTED_LINE")
|
||||
|
||||
specialized: set[str] = set()
|
||||
no_arg: list[str] = []
|
||||
has_arg: list[str] = []
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue