SF bug 1442442: LIST_APPEND optimization got lost in the AST merge.
Add it back.
This commit is contained in:
parent
d4e3035701
commit
10be2ea85d
|
@ -744,6 +744,7 @@ class StackDepthTracker:
|
||||||
effect = {
|
effect = {
|
||||||
'POP_TOP': -1,
|
'POP_TOP': -1,
|
||||||
'DUP_TOP': 1,
|
'DUP_TOP': 1,
|
||||||
|
'LIST_APPEND': -2,
|
||||||
'SLICE+1': -1,
|
'SLICE+1': -1,
|
||||||
'SLICE+2': -1,
|
'SLICE+2': -1,
|
||||||
'SLICE+3': -2,
|
'SLICE+3': -2,
|
||||||
|
|
|
@ -54,31 +54,29 @@ def bug1333982(x=[]):
|
||||||
|
|
||||||
dis_bug1333982 = """\
|
dis_bug1333982 = """\
|
||||||
%-4d 0 LOAD_CONST 1 (0)
|
%-4d 0 LOAD_CONST 1 (0)
|
||||||
3 JUMP_IF_TRUE 47 (to 53)
|
3 JUMP_IF_TRUE 41 (to 47)
|
||||||
6 POP_TOP
|
6 POP_TOP
|
||||||
7 LOAD_GLOBAL 0 (AssertionError)
|
7 LOAD_GLOBAL 0 (AssertionError)
|
||||||
10 BUILD_LIST 0
|
10 BUILD_LIST 0
|
||||||
13 DUP_TOP
|
13 DUP_TOP
|
||||||
14 LOAD_ATTR 1 (append)
|
14 STORE_FAST 1 (_[1])
|
||||||
17 STORE_FAST 1 (_[1])
|
17 LOAD_FAST 0 (x)
|
||||||
20 LOAD_FAST 0 (x)
|
20 GET_ITER
|
||||||
23 GET_ITER
|
>> 21 FOR_ITER 13 (to 37)
|
||||||
>> 24 FOR_ITER 16 (to 43)
|
24 STORE_FAST 2 (s)
|
||||||
27 STORE_FAST 2 (s)
|
27 LOAD_FAST 1 (_[1])
|
||||||
30 LOAD_FAST 1 (_[1])
|
30 LOAD_FAST 2 (s)
|
||||||
33 LOAD_FAST 2 (s)
|
33 LIST_APPEND
|
||||||
36 CALL_FUNCTION 1
|
34 JUMP_ABSOLUTE 21
|
||||||
39 POP_TOP
|
>> 37 DELETE_FAST 1 (_[1])
|
||||||
40 JUMP_ABSOLUTE 24
|
|
||||||
>> 43 DELETE_FAST 1 (_[1])
|
|
||||||
|
|
||||||
%-4d 46 LOAD_CONST 2 (1)
|
%-4d 40 LOAD_CONST 2 (1)
|
||||||
49 BINARY_ADD
|
43 BINARY_ADD
|
||||||
50 RAISE_VARARGS 2
|
44 RAISE_VARARGS 2
|
||||||
>> 53 POP_TOP
|
>> 47 POP_TOP
|
||||||
|
|
||||||
%-4d 54 LOAD_CONST 0 (None)
|
%-4d 48 LOAD_CONST 0 (None)
|
||||||
57 RETURN_VALUE
|
51 RETURN_VALUE
|
||||||
"""%(bug1333982.func_code.co_firstlineno + 1,
|
"""%(bug1333982.func_code.co_firstlineno + 1,
|
||||||
bug1333982.func_code.co_firstlineno + 2,
|
bug1333982.func_code.co_firstlineno + 2,
|
||||||
bug1333982.func_code.co_firstlineno + 3)
|
bug1333982.func_code.co_firstlineno + 3)
|
||||||
|
|
|
@ -1297,6 +1297,9 @@ opcode_stack_effect(int opcode, int oparg)
|
||||||
case UNARY_INVERT:
|
case UNARY_INVERT:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case LIST_APPEND:
|
||||||
|
return -2;
|
||||||
|
|
||||||
case BINARY_POWER:
|
case BINARY_POWER:
|
||||||
case BINARY_MULTIPLY:
|
case BINARY_MULTIPLY:
|
||||||
case BINARY_DIVIDE:
|
case BINARY_DIVIDE:
|
||||||
|
@ -3149,8 +3152,7 @@ compiler_listcomp_generator(struct compiler *c, PyObject *tmpname,
|
||||||
if (!compiler_nameop(c, tmpname, Load))
|
if (!compiler_nameop(c, tmpname, Load))
|
||||||
return 0;
|
return 0;
|
||||||
VISIT(c, expr, elt);
|
VISIT(c, expr, elt);
|
||||||
ADDOP_I(c, CALL_FUNCTION, 1);
|
ADDOP(c, LIST_APPEND);
|
||||||
ADDOP(c, POP_TOP);
|
|
||||||
|
|
||||||
compiler_use_next_block(c, skip);
|
compiler_use_next_block(c, skip);
|
||||||
}
|
}
|
||||||
|
@ -3189,7 +3191,6 @@ compiler_listcomp(struct compiler *c, expr_ty e)
|
||||||
return 0;
|
return 0;
|
||||||
ADDOP_I(c, BUILD_LIST, 0);
|
ADDOP_I(c, BUILD_LIST, 0);
|
||||||
ADDOP(c, DUP_TOP);
|
ADDOP(c, DUP_TOP);
|
||||||
ADDOP_O(c, LOAD_ATTR, append, names);
|
|
||||||
if (compiler_nameop(c, tmp, Store))
|
if (compiler_nameop(c, tmp, Store))
|
||||||
rc = compiler_listcomp_generator(c, tmp, generators, 0,
|
rc = compiler_listcomp_generator(c, tmp, generators, 0,
|
||||||
e->v.ListComp.elt);
|
e->v.ListComp.elt);
|
||||||
|
|
Loading…
Reference in New Issue