[Python-checkins] r69394 - in python/trunk: Lib/compiler/consts.py Lib/compiler/pycodegen.py Lib/compiler/symbols.py Misc/NEWS

neil.schemenauer python-checkins at python.org
Sat Feb 7 01:54:42 CET 2009


Author: neil.schemenauer
Date: Sat Feb 7 01:54:41 2009
New Revision: 69394
Log:
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.
Modified:
 python/trunk/Lib/compiler/consts.py
 python/trunk/Lib/compiler/pycodegen.py
 python/trunk/Lib/compiler/symbols.py
 python/trunk/Misc/NEWS
Modified: python/trunk/Lib/compiler/consts.py
==============================================================================
--- python/trunk/Lib/compiler/consts.py	(original)
+++ python/trunk/Lib/compiler/consts.py	Sat Feb 7 01:54:41 2009
@@ -4,10 +4,11 @@
 OP_APPLY = 'OP_APPLY'
 
 SC_LOCAL = 1
-SC_GLOBAL = 2
-SC_FREE = 3
-SC_CELL = 4
-SC_UNKNOWN = 5
+SC_GLOBAL_IMPLICIT = 2
+SC_GLOBAL_EXPLICT = 3
+SC_FREE = 4
+SC_CELL = 5
+SC_UNKNOWN = 6
 
 CO_OPTIMIZED = 0x0001
 CO_NEWLOCALS = 0x0002
Modified: python/trunk/Lib/compiler/pycodegen.py
==============================================================================
--- python/trunk/Lib/compiler/pycodegen.py	(original)
+++ python/trunk/Lib/compiler/pycodegen.py	Sat Feb 7 01:54:41 2009
@@ -7,7 +7,8 @@
 
 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 @@
 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:
Modified: python/trunk/Lib/compiler/symbols.py
==============================================================================
--- python/trunk/Lib/compiler/symbols.py	(original)
+++ python/trunk/Lib/compiler/symbols.py	Sat Feb 7 01:54:41 2009
@@ -1,7 +1,8 @@
 """Module symbol-table generator"""
 
 from compiler import ast
-from compiler.consts import SC_LOCAL, SC_GLOBAL, SC_FREE, SC_CELL, SC_UNKNOWN
+from compiler.consts import SC_LOCAL, SC_GLOBAL_IMPLICIT, SC_GLOBAL_EXPLICT, \
+ SC_FREE, SC_CELL, SC_UNKNOWN
 from compiler.misc import mangle
 import types
 
@@ -89,7 +90,7 @@
 The scope of a name could be LOCAL, GLOBAL, FREE, or CELL.
 """
 if name in self.globals:
- return SC_GLOBAL
+ return SC_GLOBAL_EXPLICT
 if name in self.cells:
 return SC_CELL
 if name in self.defs:
@@ -99,7 +100,7 @@
 if self.nested:
 return SC_UNKNOWN
 else:
- return SC_GLOBAL
+ return SC_GLOBAL_IMPLICIT
 
 def get_free_vars(self):
 if not self.nested:
@@ -152,7 +153,7 @@
 if sc == SC_UNKNOWN or sc == SC_FREE \
 or isinstance(self, ClassScope):
 self.frees[name] = 1
- elif sc == SC_GLOBAL:
+ elif sc == SC_GLOBAL_IMPLICIT:
 child_globals.append(name)
 elif isinstance(self, FunctionScope) and sc == SC_LOCAL:
 self.cells[name] = 1
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sat Feb 7 01:54:41 2009
@@ -410,6 +410,9 @@
 protocol numbers are supplied outside the allowed 0-65536 range on bind()
 and getservbyport().
 
+- Issue #999042: The Python compiler now handles explict global statements
+ correctly (should be assigned using STORE_GLOBAL opcode).
+
 Tools/Demos
 -----------
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /