[Python-checkins] r42816 - in python/trunk: Lib/compiler/pyassem.py Lib/test/test_dis.py Python/compile.c

neal.norwitz python-checkins at python.org
Fri Mar 3 21:29:12 CET 2006


Author: neal.norwitz
Date: Fri Mar  3 21:29:11 2006
New Revision: 42816

Modified:
   python/trunk/Lib/compiler/pyassem.py
   python/trunk/Lib/test/test_dis.py
   python/trunk/Python/compile.c
Log:
SF bug 1442442: LIST_APPEND optimization got lost in the AST merge.
Add it back.


Modified: python/trunk/Lib/compiler/pyassem.py
==============================================================================
--- python/trunk/Lib/compiler/pyassem.py	(original)
+++ python/trunk/Lib/compiler/pyassem.py	Fri Mar  3 21:29:11 2006
@@ -744,6 +744,7 @@
     effect = {
         'POP_TOP': -1,
         'DUP_TOP': 1,
+        'LIST_APPEND': -2,
         'SLICE+1': -1,
         'SLICE+2': -1,
         'SLICE+3': -2,

Modified: python/trunk/Lib/test/test_dis.py
==============================================================================
--- python/trunk/Lib/test/test_dis.py	(original)
+++ python/trunk/Lib/test/test_dis.py	Fri Mar  3 21:29:11 2006
@@ -54,31 +54,29 @@
 
 dis_bug1333982 = """\
  %-4d         0 LOAD_CONST               1 (0)
-              3 JUMP_IF_TRUE            47 (to 53)
+              3 JUMP_IF_TRUE            41 (to 47)
               6 POP_TOP
               7 LOAD_GLOBAL              0 (AssertionError)
              10 BUILD_LIST               0
              13 DUP_TOP
-             14 LOAD_ATTR                1 (append)
-             17 STORE_FAST               1 (_[1])
-             20 LOAD_FAST                0 (x)
-             23 GET_ITER
-        >>   24 FOR_ITER                16 (to 43)
-             27 STORE_FAST               2 (s)
-             30 LOAD_FAST                1 (_[1])
-             33 LOAD_FAST                2 (s)
-             36 CALL_FUNCTION            1
-             39 POP_TOP
-             40 JUMP_ABSOLUTE           24
-        >>   43 DELETE_FAST              1 (_[1])
-
- %-4d        46 LOAD_CONST               2 (1)
-             49 BINARY_ADD
-             50 RAISE_VARARGS            2
-        >>   53 POP_TOP
+             14 STORE_FAST               1 (_[1])
+             17 LOAD_FAST                0 (x)
+             20 GET_ITER
+        >>   21 FOR_ITER                13 (to 37)
+             24 STORE_FAST               2 (s)
+             27 LOAD_FAST                1 (_[1])
+             30 LOAD_FAST                2 (s)
+             33 LIST_APPEND
+             34 JUMP_ABSOLUTE           21
+        >>   37 DELETE_FAST              1 (_[1])
+
+ %-4d        40 LOAD_CONST               2 (1)
+             43 BINARY_ADD
+             44 RAISE_VARARGS            2
+        >>   47 POP_TOP
 
- %-4d        54 LOAD_CONST               0 (None)
-             57 RETURN_VALUE
+ %-4d        48 LOAD_CONST               0 (None)
+             51 RETURN_VALUE
 """%(bug1333982.func_code.co_firstlineno + 1,
      bug1333982.func_code.co_firstlineno + 2,
      bug1333982.func_code.co_firstlineno + 3)

Modified: python/trunk/Python/compile.c
==============================================================================
--- python/trunk/Python/compile.c	(original)
+++ python/trunk/Python/compile.c	Fri Mar  3 21:29:11 2006
@@ -1297,6 +1297,9 @@
 		case UNARY_INVERT:
 			return 0;
 
+		case LIST_APPEND:
+			return -2;
+
 		case BINARY_POWER:
 		case BINARY_MULTIPLY:
 		case BINARY_DIVIDE:
@@ -3149,8 +3152,7 @@
 	    if (!compiler_nameop(c, tmpname, Load))
 		return 0;
 	    VISIT(c, expr, elt);
-	    ADDOP_I(c, CALL_FUNCTION, 1);
-	    ADDOP(c, POP_TOP);
+	    ADDOP(c, LIST_APPEND);
 
 	    compiler_use_next_block(c, skip);
 	}
@@ -3189,7 +3191,6 @@
 		return 0;
 	ADDOP_I(c, BUILD_LIST, 0);
 	ADDOP(c, DUP_TOP);
-	ADDOP_O(c, LOAD_ATTR, append, names);
 	if (compiler_nameop(c, tmp, Store))
 	    rc = compiler_listcomp_generator(c, tmp, generators, 0, 
 					     e->v.ListComp.elt);


More information about the Python-checkins mailing list