Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commit02f7a9f

Browse files
committed
fix test__opcode. Special case INSTRUMENTED_LINE in generator
1 parentf7ae491 commit02f7a9f

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

‎Include/internal/pycore_opcode_metadata.h

Lines 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
#defineIS_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
#defineHAS_ARG_FLAG (1)
955956
#defineHAS_CONST_FLAG (2)
@@ -964,7 +965,7 @@ enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC00, INSTR_FMT
964965
#defineOPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
965966
#defineOPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG))
966967
#defineOPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG))
967-
#defineOPCODE_IS_INSTRUMENTED(OP) (_PyOpcode_opcode_metadata[OP].flags & (IS_INSTRUMENTED_FLAG))
968+
#defineOPCODE_IS_INSTRUMENTED(OP) (_PyOpcode_opcode_metadata[OP].flags & (IS_INSTRUMENTED_FLAG)) || ((OP) == INSTRUMENTED_LINE)
968969

969970
structopcode_metadata {
970971
boolvalid_entry;

‎Lib/test/test__opcode.py

Lines 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
forname,codeinfilter(lambdaitem:item[0]notindis.deoptmap,dis.opmap.items()):
61-
ifcode>=opcode.MIN_INSTRUMENTED_OPCODE:
61+
if_opcode.is_instrumented(code):
6262
continue
6363
withself.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
forname,codeinfilter(lambdaitem:item[0]notindis.deoptmap,dis.opmap.items()):
86-
ifcode>=opcode.MIN_INSTRUMENTED_OPCODE:
86+
if_opcode.is_instrumented(code):
8787
continue
8888
withself.subTest(opname=name):
8989
ifcodenotinhas_arg:

‎Tools/cases_generator/flags.py

Lines 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
forname,valueinflags.bitmask.items():
73+
ifname=='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

Lines 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)

[8]ページ先頭

©2009-2025 Movatter.jp