summaryrefslogtreecommitdiffstats
path: root/Lib/compiler/pycodegen.py
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-04-09 04:28:48 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2001-04-09 04:28:48 (GMT)
commit80e29bd1392bfae865f2ff44b1fe92a5d0fad7c8 (patch)
tree65c812fe4e6128af147b78daa2ceac73f3ec4b22 /Lib/compiler/pycodegen.py
parent42a083071353f80215715437fdcb6b49cc431169 (diff)
downloadcpython-80e29bd1392bfae865f2ff44b1fe92a5d0fad7c8.zip
cpython-80e29bd1392bfae865f2ff44b1fe92a5d0fad7c8.tar.gz
cpython-80e29bd1392bfae865f2ff44b1fe92a5d0fad7c8.tar.bz2
Add support for future statements
Diffstat (limited to 'Lib/compiler/pycodegen.py')
-rw-r--r--Lib/compiler/pycodegen.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index a1b5d1d..e6849e5 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -9,7 +9,7 @@ import types
from cStringIO import StringIO
from compiler import ast, parse, walk
-from compiler import pyassem, misc
+from compiler import pyassem, misc, future
from compiler.pyassem import CO_VARARGS, CO_VARKEYWORDS, CO_NEWLOCALS, TupleArg
# Do we have Python 1.x or Python 2.x?
@@ -43,13 +43,13 @@ class Module:
self.code = None
def compile(self, display=0):
- ast = parse(self.source)
+ tree = parse(self.source)
root, filename = os.path.split(self.filename)
gen = ModuleCodeGenerator(filename)
- walk(ast, gen, 1)
+ walk(tree, gen, 1)
if display:
import pprint
- print pprint.pprint(ast)
+ print pprint.pprint(tree)
self.code = gen.getCode()
def dump(self, f):
@@ -862,12 +862,24 @@ class CodeGenerator:
self.emit('STORE_SUBSCR')
class ModuleCodeGenerator(CodeGenerator):
- super_init = CodeGenerator.__init__
+ __super_init = CodeGenerator.__init__
+ __super_visitModule = CodeGenerator.visitModule
def __init__(self, filename):
# XXX <module> is ? in compile.c
self.graph = pyassem.PyFlowGraph("<module>", filename)
- self.super_init(filename)
+ self.__super_init(filename)
+ self.symbols = None
+ self.future = None
+
+ def visitModule(self, node):
+ self.future = future.find_futures(node)
+ self.symbols = self.parseSymbols(node)
+ self.__super_visitModule(node)
+
+ def parseSymbols(self, node):
+ # XXX not implemented
+ return None
class FunctionCodeGenerator(CodeGenerator):
super_init = CodeGenerator.__init__
@@ -965,6 +977,8 @@ class LocalNameFinder:
for name in names:
self.names.add(name)
+ # XXX list comprehensions and for loops
+
def getLocals(self):
for elt in self.globals.elements():
if self.names.has_elt(elt):