summaryrefslogtreecommitdiffstats
path: root/Tools/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/compiler')
-rw-r--r--Tools/compiler/compiler/pyassem.py4
-rw-r--r--Tools/compiler/compiler/pycodegen.py11
-rw-r--r--Tools/compiler/compiler/transformer.py2
3 files changed, 13 insertions, 4 deletions
diff --git a/Tools/compiler/compiler/pyassem.py b/Tools/compiler/compiler/pyassem.py
index 74ea562..3411273 100644
--- a/Tools/compiler/compiler/pyassem.py
+++ b/Tools/compiler/compiler/pyassem.py
@@ -515,12 +515,14 @@ class StackDepthTracker:
'BUILD_MAP': 1,
'COMPARE_OP': -1,
'STORE_FAST': -1,
+ 'IMPORT_STAR': -1,
+ 'IMPORT_NAME': 0,
+ 'IMPORT_FROM': 1,
}
# use pattern match
patterns = [
('BINARY_', -1),
('LOAD_', 1),
- ('IMPORT_', 1),
]
# special cases:
diff --git a/Tools/compiler/compiler/pycodegen.py b/Tools/compiler/compiler/pycodegen.py
index 2a1b308..2888729 100644
--- a/Tools/compiler/compiler/pycodegen.py
+++ b/Tools/compiler/compiler/pycodegen.py
@@ -439,9 +439,14 @@ class CodeGenerator:
for name, alias in node.names:
if name == '*':
self.namespace = 0
- self.emit('IMPORT_FROM', name)
- self._resolveDots(name)
- self.storeName(alias or name)
+ self.emit('IMPORT_STAR')
+ # There can only be one name w/ from ... import *
+ assert len(node.names) == 1
+ return
+ else:
+ self.emit('IMPORT_FROM', name)
+ self._resolveDots(name)
+ self.storeName(alias or name)
self.emit('POP_TOP')
def _resolveDots(self, name):
diff --git a/Tools/compiler/compiler/transformer.py b/Tools/compiler/compiler/transformer.py
index 91d4b5b..c8a8518 100644
--- a/Tools/compiler/compiler/transformer.py
+++ b/Tools/compiler/compiler/transformer.py
@@ -825,6 +825,8 @@ class Transformer:
return dot, node[3][1]
def com_import_as_name(self, node):
+ if node == '*':
+ return '*', None
if node[0] == token.NAME:
return node[1], None
assert len(node) == 4