mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Fix SF bug #116263: support for from .. import *
transformer.py: return '*', None from com_import_as_name pycodegen.py: special case for name == '*' pyassem.py: fix stack counting for IMPORT_ opcodes
This commit is contained in:
parent
babe326c65
commit
4e1be72e6b
6 changed files with 26 additions and 8 deletions
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue