mirror of
https://github.com/python/cpython.git
synced 2025-09-15 05:06:12 +00:00
Issue #999042: The Python compiler now handles explict global statements
correctly (should be assigned using STORE_GLOBAL opcode). This was done by having the system table differentiate between explict and implicit globals.
This commit is contained in:
parent
98c3b85bc4
commit
92c3b2190b
4 changed files with 18 additions and 10 deletions
|
@ -7,7 +7,8 @@ from cStringIO import StringIO
|
|||
|
||||
from compiler import ast, parse, walk, syntax
|
||||
from compiler import pyassem, misc, future, symbols
|
||||
from compiler.consts import SC_LOCAL, SC_GLOBAL, SC_FREE, SC_CELL
|
||||
from compiler.consts import SC_LOCAL, SC_GLOBAL_IMPLICIT, SC_GLOBAL_EXPLICT, \
|
||||
SC_FREE, SC_CELL
|
||||
from compiler.consts import (CO_VARARGS, CO_VARKEYWORDS, CO_NEWLOCALS,
|
||||
CO_NESTED, CO_GENERATOR, CO_FUTURE_DIVISION,
|
||||
CO_FUTURE_ABSIMPORT, CO_FUTURE_WITH_STATEMENT, CO_FUTURE_PRINT_FUNCTION)
|
||||
|
@ -282,7 +283,9 @@ class CodeGenerator:
|
|||
self.emit(prefix + '_NAME', name)
|
||||
else:
|
||||
self.emit(prefix + '_FAST', name)
|
||||
elif scope == SC_GLOBAL:
|
||||
elif scope == SC_GLOBAL_EXPLICT:
|
||||
self.emit(prefix + '_GLOBAL', name)
|
||||
elif scope == SC_GLOBAL_IMPLICIT:
|
||||
if not self.optimized:
|
||||
self.emit(prefix + '_NAME', name)
|
||||
else:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue