36
36
#include "pycore_pymem.h" // _PyMem_IsPtrFreed()
37
37
#include "pycore_symtable.h" // PySTEntryObject
38
38
39
- #include "opcode_metadata.h" // _PyOpcode_opcode_metadata
39
+ #include "opcode_metadata.h" // _PyOpcode_opcode_metadata, _PyOpcode_num_popped/pushed
40
40
41
41
42
42
#define DEFAULT_BLOCK_SIZE 16
@@ -8651,13 +8651,15 @@ no_redundant_jumps(cfg_builder *g) {
8651
8651
8652
8652
static bool
8653
8653
opcode_metadata_is_sane (cfg_builder * g ) {
8654
+ bool result = true;
8654
8655
for (basicblock * b = g -> g_entryblock ; b != NULL ; b = b -> b_next ) {
8655
8656
for (int i = 0 ; i < b -> b_iused ; i ++ ) {
8656
8657
struct instr * instr = & b -> b_instr [i ];
8657
8658
int opcode = instr -> i_opcode ;
8659
+ int oparg = instr -> i_oparg ;
8658
8660
assert (opcode <= MAX_REAL_OPCODE );
8659
- int pushed = _PyOpcode_opcode_metadata [ opcode ]. n_pushed ;
8660
- int popped = _PyOpcode_opcode_metadata [ opcode ]. n_popped ;
8661
+ int popped = _PyOpcode_num_popped ( opcode , oparg ) ;
8662
+ int pushed = _PyOpcode_num_pushed ( opcode , oparg ) ;
8661
8663
assert ((pushed < 0 ) == (popped < 0 ));
8662
8664
if (pushed >= 0 ) {
8663
8665
assert (_PyOpcode_opcode_metadata [opcode ].valid_entry );
@@ -8666,12 +8668,12 @@ opcode_metadata_is_sane(cfg_builder *g) {
8666
8668
fprintf (stderr ,
8667
8669
"op=%d: stack_effect (%d) != pushed (%d) - popped (%d)\n" ,
8668
8670
opcode , effect , pushed , popped );
8669
- return false;
8671
+ result = false;
8670
8672
}
8671
8673
}
8672
8674
}
8673
8675
}
8674
- return true ;
8676
+ return result ;
8675
8677
}
8676
8678
8677
8679
static bool
0 commit comments