Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 02f7a9f

Browse filesBrowse files
committed
fix test__opcode. Special case INSTRUMENTED_LINE in generator
1 parent f7ae491 commit 02f7a9f
Copy full SHA for 02f7a9f

File tree

4 files changed

+12
-6
lines changed
Filter options

4 files changed

+12
-6
lines changed

‎Include/internal/pycore_opcode_metadata.h

Copy file name to clipboardExpand all lines: Include/internal/pycore_opcode_metadata.h
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,8 @@ enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT
949949

950950
#define IS_VALID_OPCODE(OP) \
951951
(((OP) >= 0) && ((OP) < OPCODE_METADATA_SIZE) && \
952-
(_PyOpcode_opcode_metadata[(OP)].valid_entry))
952+
(_PyOpcode_opcode_metadata[(OP)].valid_entry)) || \
953+
((OP) == INSTRUMENTED_LINE)
953954

954955
#define HAS_ARG_FLAG (1)
955956
#define HAS_CONST_FLAG (2)
@@ -964,7 +965,7 @@ enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT
964965
#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
965966
#define OPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG))
966967
#define OPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG))
967-
#define OPCODE_IS_INSTRUMENTED(OP) (_PyOpcode_opcode_metadata[OP].flags & (IS_INSTRUMENTED_FLAG))
968+
#define OPCODE_IS_INSTRUMENTED(OP) (_PyOpcode_opcode_metadata[OP].flags & (IS_INSTRUMENTED_FLAG)) || ((OP) == INSTRUMENTED_LINE)
968969

969970
struct opcode_metadata {
970971
bool valid_entry;

‎Lib/test/test__opcode.py

Copy file name to clipboardExpand all lines: Lib/test/test__opcode.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def test_stack_effect(self):
5858
# All defined opcodes
5959
has_arg = dis.hasarg
6060
for name, code in filter(lambda item: item[0] not in dis.deoptmap, dis.opmap.items()):
61-
if code >= opcode.MIN_INSTRUMENTED_OPCODE:
61+
if _opcode.is_instrumented(code):
6262
continue
6363
with self.subTest(opname=name):
6464
stack_effect(code)
@@ -83,7 +83,7 @@ def test_stack_effect_jump(self):
8383
has_exc = dis.hasexc
8484
has_jump = dis.hasjabs + dis.hasjrel
8585
for name, code in filter(lambda item: item[0] not in dis.deoptmap, dis.opmap.items()):
86-
if code >= opcode.MIN_INSTRUMENTED_OPCODE:
86+
if _opcode.is_instrumented(code):
8787
continue
8888
with self.subTest(opname=name):
8989
if code not in has_arg:

‎Tools/cases_generator/flags.py

Copy file name to clipboardExpand all lines: Tools/cases_generator/flags.py
+5-1Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,13 @@ def emit_macros(cls, out: Formatter):
7070
out.emit(f"#define {name} ({value})")
7171

7272
for name, value in flags.bitmask.items():
73+
if name == 'IS_INSTRUMENTED_FLAG':
74+
or_special_case = " || ((OP) == INSTRUMENTED_LINE)"
75+
else:
76+
or_special_case = ""
7377
out.emit(
7478
f"#define OPCODE_{name[:-len('_FLAG')]}(OP) "
75-
f"(_PyOpcode_opcode_metadata[OP].flags & ({name}))"
79+
f"(_PyOpcode_opcode_metadata[OP].flags & ({name})){or_special_case}"
7680
)
7781

7882

‎Tools/cases_generator/generate_cases.py

Copy file name to clipboardExpand all lines: Tools/cases_generator/generate_cases.py
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,8 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No
283283
self.out.emit(
284284
"#define IS_VALID_OPCODE(OP) \\\n"
285285
" (((OP) >= 0) && ((OP) < OPCODE_METADATA_SIZE) && \\\n"
286-
" (_PyOpcode_opcode_metadata[(OP)].valid_entry))"
286+
" (_PyOpcode_opcode_metadata[(OP)].valid_entry)) || \\\n"
287+
" ((OP) == INSTRUMENTED_LINE)" # implemented in ceval.c, not bytecodes.c
287288
)
288289

289290
self.out.emit("")

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.