]> granicus.if.org Git - python/commitdiff
Last set of change to get regression tests to pass
authorJeremy Hylton <jeremy@alum.mit.edu>
Mon, 17 Sep 2001 19:33:48 +0000 (19:33 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Mon, 17 Sep 2001 19:33:48 +0000 (19:33 +0000)
Remove the only test in the syntax module.  It ends up that the
transformer must handle this error case.

In the transformer, check for a list compression in com_assign_list()
by looking for a list_for node where a comma is expected.

In pycodegen.compile() re-raise the SyntaxError rather than catching
it and exiting

Lib/compiler/pycodegen.py
Lib/compiler/syntax.py
Lib/compiler/transformer.py
Tools/compiler/compiler/pycodegen.py
Tools/compiler/compiler/syntax.py
Tools/compiler/compiler/transformer.py

index 04c115a7c3448f19cbbe54ea540b9cdb48a447bf..7bc17958cf542edc323e97a1f052963444729a82 100644 (file)
@@ -49,7 +49,7 @@ def compile(filename, display=0):
     try:
         mod.compile(display)
     except SyntaxError, err:
-        print "SyntaxError:", err
+        raise
     else:
         f = open(filename + "c", "wb")
         mod.dump(f)
index 14613ef7876bb9a5b7dfd5c3bd0c3ef56f66591e..88c1453a1fadad995e92b7437a89fb560f3b8568 100644 (file)
@@ -39,7 +39,8 @@ class SyntaxErrorChecker:
     def visitAssign(self, node):
         # the transformer module handles many of these
         for target in node.nodes:
-            if isinstance(target, ast.AssList):
-                if target.lineno is None:
-                    target.lineno = node.lineno
-                self.error(target, "can't assign to list comprehension")
+            pass
+##            if isinstance(target, ast.AssList):
+##                if target.lineno is None:
+##                    target.lineno = node.lineno
+##                self.error(target, "can't assign to list comprehension")
index 6e82b10c7843746e1d49acdc6e88bbf2d815449c..3607af11cb5535aa17a4870e2618e26b06fd2c3a 100644 (file)
@@ -943,6 +943,10 @@ class Transformer:
     def com_assign_list(self, node, assigning):
         assigns = []
         for i in range(1, len(node), 2):
+            if i + 1 < len(node):
+                if node[i + 1][0] == symbol.list_for:
+                    raise SyntaxError, "can't assign to list comprehension"
+                assert node[i + 1][0] == token.COMMA, node[i + 1]
             assigns.append(self.com_assign(node[i], assigning))
         return AssList(assigns)
 
index 04c115a7c3448f19cbbe54ea540b9cdb48a447bf..7bc17958cf542edc323e97a1f052963444729a82 100644 (file)
@@ -49,7 +49,7 @@ def compile(filename, display=0):
     try:
         mod.compile(display)
     except SyntaxError, err:
-        print "SyntaxError:", err
+        raise
     else:
         f = open(filename + "c", "wb")
         mod.dump(f)
index 14613ef7876bb9a5b7dfd5c3bd0c3ef56f66591e..88c1453a1fadad995e92b7437a89fb560f3b8568 100644 (file)
@@ -39,7 +39,8 @@ class SyntaxErrorChecker:
     def visitAssign(self, node):
         # the transformer module handles many of these
         for target in node.nodes:
-            if isinstance(target, ast.AssList):
-                if target.lineno is None:
-                    target.lineno = node.lineno
-                self.error(target, "can't assign to list comprehension")
+            pass
+##            if isinstance(target, ast.AssList):
+##                if target.lineno is None:
+##                    target.lineno = node.lineno
+##                self.error(target, "can't assign to list comprehension")
index 6e82b10c7843746e1d49acdc6e88bbf2d815449c..3607af11cb5535aa17a4870e2618e26b06fd2c3a 100644 (file)
@@ -943,6 +943,10 @@ class Transformer:
     def com_assign_list(self, node, assigning):
         assigns = []
         for i in range(1, len(node), 2):
+            if i + 1 < len(node):
+                if node[i + 1][0] == symbol.list_for:
+                    raise SyntaxError, "can't assign to list comprehension"
+                assert node[i + 1][0] == token.COMMA, node[i + 1]
             assigns.append(self.com_assign(node[i], assigning))
         return AssList(assigns)