diff options
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Python/compile.c b/Python/compile.c index ac9ddbc..950c44a 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1000,7 +1000,7 @@ stack_effect(int opcode, int oparg, int jump) return -1; case LOAD_GLOBAL: - return 1; + return (oparg & 1) + 1; /* Exception handling pseudo-instructions */ case SETUP_FINALLY: @@ -4185,8 +4185,12 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) assert(op); arg = compiler_add_o(dict, mangled); Py_DECREF(mangled); - if (arg < 0) + if (arg < 0) { return 0; + } + if (op == LOAD_GLOBAL) { + arg <<= 1; + } return compiler_addop_i(c, op, arg); } @@ -8812,6 +8816,13 @@ optimize_basic_block(struct compiler *c, basicblock *bb, PyObject *consts) break; case KW_NAMES: break; + case PUSH_NULL: + if (nextop == LOAD_GLOBAL && (inst[1].i_opcode & 1) == 0) { + inst->i_opcode = NOP; + inst->i_oparg = 0; + inst[1].i_oparg |= 1; + } + break; default: /* All HAS_CONST opcodes should be handled with LOAD_CONST */ assert (!HAS_CONST(inst->i_opcode)); |