summaryrefslogtreecommitdiffstats
path: root/Lib/compiler/transformer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/compiler/transformer.py')
-rw-r--r--Lib/compiler/transformer.py32
1 files changed, 25 insertions, 7 deletions
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 16d1d8b..9562aa6 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -402,19 +402,20 @@ class Transformer:
return n
def import_stmt(self, nodelist):
- # import: dotted_name (',' dotted_name)* |
- # from: dotted_name 'import' ('*' | NAME (',' NAME)*)
- names = [ ]
- if nodelist[0][1][0] == 'f':
+ # import_stmt: 'import' dotted_as_name (',' dotted_as_name)* |
+ # from: 'from' dotted_name 'import'
+ # ('*' | import_as_name (',' import_as_name)*)
+ names = []
+ is_as = 0
+ if nodelist[0][1] == 'from':
for i in range(3, len(nodelist), 2):
- # note: nodelist[i] could be (token.STAR, '*') or (token.NAME, name)
- names.append(nodelist[i][1])
+ names.append(self.com_import_as_name(nodelist[i][1]))
n = Node('from', self.com_dotted_name(nodelist[1]), names)
n.lineno = nodelist[0][2]
return n
for i in range(1, len(nodelist), 2):
- names.append(self.com_dotted_name(nodelist[i]))
+ names.append(self.com_dotted_as_name(nodelist[i]))
n = Node('import', names)
n.lineno = nodelist[0][2]
return n
@@ -738,6 +739,7 @@ class Transformer:
if node[0] not in _legal_node_types:
raise error, 'illegal node passed to com_node: %s' % node[0]
+# print "dispatch", self._dispatch[node[0]].__name__, node
return self._dispatch[node[0]](node[1:])
def com_arglist(self, nodelist):
@@ -814,6 +816,22 @@ class Transformer:
name = name + n[1] + '.'
return name[:-1]
+ def com_dotted_as_name(self, node):
+ dot = self.com_dotted_name(node[1])
+ if len(node) == 2:
+ return dot, None
+ assert node[2][1] == 'as'
+ assert node[3][0] == token.NAME
+ return dot, node[3][1]
+
+ def com_import_as_name(self, node):
+ if node[0] == token.NAME:
+ return node[1], None
+ assert len(node) == 4
+ assert node[2][1] == 'as'
+ assert node[3][0] == token.NAME
+ return node[1][1], node[3][1]
+
def com_bases(self, node):
bases = [ ]
for i in range(1, len(node), 2):