[Python-checkins] python/dist/src/Lib/compiler transformer.py, 1.43, 1.44

anthonybaxter at users.sourceforge.net anthonybaxter at users.sourceforge.net
Tue Aug 31 12:07:41 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib/compiler
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21410/Lib/compiler

Modified Files:
	transformer.py 
Log Message:
SF patch #1007189, multi-line imports, for instance:
"from blah import (foo, bar
baz, bongo)"


Index: transformer.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/compiler/transformer.py,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- transformer.py	17 Aug 2004 17:29:14 -0000	1.43
+++ transformer.py	31 Aug 2004 10:07:01 -0000	1.44
@@ -438,28 +438,28 @@
         return n
 
     def import_stmt(self, nodelist):
-        # import_stmt: 'import' dotted_as_name (',' dotted_as_name)* |
-        # from: 'from' dotted_name 'import'
-        #                        ('*' | import_as_name (',' import_as_name)*)
-        if nodelist[0][1] == 'from':
-            names = []
-            if nodelist[3][0] == token.NAME:
-                for i in range(3, len(nodelist), 2):
-                    names.append((nodelist[i][1], None))
-            else:
-                for i in range(3, len(nodelist), 2):
-                    names.append(self.com_import_as_name(nodelist[i]))
-            n = From(self.com_dotted_name(nodelist[1]), names)
-            n.lineno = nodelist[0][2]
-            return n
+        # import_stmt: import_name | import_from
+        assert len(nodelist) == 1
+        return self.com_node(nodelist[0])
 
-        if nodelist[1][0] == symbol.dotted_name:
-            names = [(self.com_dotted_name(nodelist[1][1:]), None)]
+    def import_name(self, nodelist):
+        # import_name: 'import' dotted_as_names
+        n = Import(self.com_dotted_as_names(nodelist[1]))
+        n.lineno = nodelist[0][2]
+        return n
+
+    def import_from(self, nodelist):
+        # import_from: 'from' dotted_name 'import' ('*' |
+        #    '(' import_as_names ')' | import_as_names)
+        assert nodelist[0][1] == 'from'
+        assert nodelist[1][0] == symbol.dotted_name
+        assert nodelist[2][1] == 'import'
+        fromname = self.com_dotted_name(nodelist[1])
+        if nodelist[3][0] == token.STAR:
+            n = From(fromname, [('*', None)])
         else:
-            names = []
-            for i in range(1, len(nodelist), 2):
-                names.append(self.com_dotted_as_name(nodelist[i]))
-        n = Import(names)
+            node = nodelist[3 + (nodelist[3][0] == token.LPAR)]
+            n = From(fromname, self.com_import_as_names(node))
         n.lineno = nodelist[0][2]
         return n
 
@@ -895,29 +895,41 @@
         return name[:-1]
 
     def com_dotted_as_name(self, node):
-        dot = self.com_dotted_name(node[1])
-        if len(node) <= 2:
+        assert node[0] == symbol.dotted_as_name
+        node = node[1:]
+        dot = self.com_dotted_name(node[0][1:])
+        if len(node) == 1:
             return dot, None
-        if node[0] == symbol.dotted_name:
-            pass
-        else:
-            assert node[2][1] == 'as'
-            assert node[3][0] == token.NAME
-            return dot, node[3][1]
+        assert node[1][1] == 'as'
+        assert node[2][0] == token.NAME
+        return dot, node[2][1]
+
+    def com_dotted_as_names(self, node):
+        assert node[0] == symbol.dotted_as_names
+        node = node[1:]
+        names = [self.com_dotted_as_name(node[0])]
+        for i in range(2, len(node), 2):
+            names.append(self.com_dotted_as_name(node[i]))
+        return names
 
     def com_import_as_name(self, node):
-        if node[0] == token.STAR:
-            return '*', None
         assert node[0] == symbol.import_as_name
         node = node[1:]
+        assert node[0][0] == token.NAME
         if len(node) == 1:
-            assert node[0][0] == token.NAME
             return node[0][1], None
-
         assert node[1][1] == 'as', node
         assert node[2][0] == token.NAME
         return node[0][1], node[2][1]
 
+    def com_import_as_names(self, node):
+        assert node[0] == symbol.import_as_names
+        node = node[1:]
+        names = [self.com_import_as_name(node[0])]
+        for i in range(2, len(node), 2):
+            names.append(self.com_import_as_name(node[i]))
+        return names
+
     def com_bases(self, node):
         bases = []
         for i in range(1, len(node), 2):



More information about the Python-checkins mailing list