strip mult-factor from empty list literals
authorStefan Behnel <stefan_ml@behnel.de>
Sun, 1 Dec 2013 15:10:01 +0000 (16:10 +0100)
committerStefan Behnel <stefan_ml@behnel.de>
Sun, 1 Dec 2013 15:10:01 +0000 (16:10 +0100)
Cython/Compiler/Optimize.py
tests/run/constant_folding.py

index 8880d27..95893f1 100644 (file)
@@ -3269,7 +3269,7 @@ class ConstantFolding(Visitor.VisitorTransform, SkipDeclarations):
             sequence_node = node.operand1
             factor = node.operand2
             self._calculate_const(factor)
-            if factor.constant_result != 1:
+            if factor.constant_result != 1 and sequence_node.args:
                 sequence_node.mult_factor = factor
             self.visitchildren(sequence_node)
             return sequence_node
@@ -3278,7 +3278,7 @@ class ConstantFolding(Visitor.VisitorTransform, SkipDeclarations):
             sequence_node = node.operand2
             factor = node.operand1
             self._calculate_const(factor)
-            if factor.constant_result != 1:
+            if factor.constant_result != 1 and sequence_node.args:
                 sequence_node.mult_factor = factor
             self.visitchildren(sequence_node)
             return sequence_node
index 25cbbe1..0f2a136 100644 (file)
@@ -278,3 +278,14 @@ def for_in_nested_listcomp():
     []
     """
     return [x for x in [1, 2, 3] for _ in []]
+
+
+@cython.test_fail_if_path_exists(
+    "//ListNode//IntNode",
+)
+def mult_empty_list():
+    """
+    >>> mult_empty_list()
+    []
+    """
+    return 5 * [] * 100