diff options
Diffstat (limited to 'Tools/compiler')
-rw-r--r-- | Tools/compiler/compiler/pyassem.py | 4 | ||||
-rw-r--r-- | Tools/compiler/compiler/pycodegen.py | 11 | ||||
-rw-r--r-- | Tools/compiler/compiler/transformer.py | 2 |
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 |