From: Jeremy Hylton Date: Mon, 17 Sep 2001 19:33:48 +0000 (+0000) Subject: Last set of change to get regression tests to pass X-Git-Tag: v2.2.1c1~1771 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2e4cc7e0d84747826d3d2546d1bccd9c40a455c2;p=python Last set of change to get regression tests to pass 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 --- diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py index 04c115a7c3..7bc17958cf 100644 --- a/Lib/compiler/pycodegen.py +++ b/Lib/compiler/pycodegen.py @@ -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) diff --git a/Lib/compiler/syntax.py b/Lib/compiler/syntax.py index 14613ef787..88c1453a1f 100644 --- a/Lib/compiler/syntax.py +++ b/Lib/compiler/syntax.py @@ -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") diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py index 6e82b10c78..3607af11cb 100644 --- a/Lib/compiler/transformer.py +++ b/Lib/compiler/transformer.py @@ -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) diff --git a/Tools/compiler/compiler/pycodegen.py b/Tools/compiler/compiler/pycodegen.py index 04c115a7c3..7bc17958cf 100644 --- a/Tools/compiler/compiler/pycodegen.py +++ b/Tools/compiler/compiler/pycodegen.py @@ -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) diff --git a/Tools/compiler/compiler/syntax.py b/Tools/compiler/compiler/syntax.py index 14613ef787..88c1453a1f 100644 --- a/Tools/compiler/compiler/syntax.py +++ b/Tools/compiler/compiler/syntax.py @@ -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") diff --git a/Tools/compiler/compiler/transformer.py b/Tools/compiler/compiler/transformer.py index 6e82b10c78..3607af11cb 100644 --- a/Tools/compiler/compiler/transformer.py +++ b/Tools/compiler/compiler/transformer.py @@ -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)