Kaydet (Commit) b9572c34 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Removed bytecode transformation for sequence packing/unpacking.

It depended on the previously removed basic block checker to
prevent a jump into the middle of the transformed block.

Clears SF 757818: tuple assignment -- SystemError: unknown opcode
üst 7c0d7ba9
......@@ -363,34 +363,6 @@ optimize_code(PyObject *code, PyObject* consts)
SETARG(codestr, i, 4);
break;
/* Replace BUILD_SEQN 2 UNPACK_SEQN 2 with ROT2 JMP+2.
Replace BUILD_SEQN 3 UNPACK_SEQN 3 with ROT3 ROT2 JMP+1.
Note, these opcodes occur together only in assignment
statements. Accordingly, the unpack opcode is never
a jump target. */
case BUILD_TUPLE:
case BUILD_LIST:
if (codestr[i+3] != UNPACK_SEQUENCE)
continue;
if (GETARG(codestr, i) == 2 && \
GETARG(codestr, i+3) == 2) {
codestr[i] = ROT_TWO;
codestr[i+1] = JUMP_FORWARD;
SETARG(codestr, i+1, 2);
codestr[i+4] = DUP_TOP; /* Filler codes used as NOPs */
codestr[i+5] = POP_TOP;
continue;
}
if (GETARG(codestr, i) == 3 && \
GETARG(codestr, i+3) == 3) {
codestr[i] = ROT_THREE;
codestr[i+1] = ROT_TWO;
codestr[i+2] = JUMP_FORWARD;
SETARG(codestr, i+2, 1);
codestr[i+5] = DUP_TOP;
}
break;
/* Replace jumps to unconditional jumps */
case FOR_ITER:
case JUMP_FORWARD:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment