[pypy-svn] r17405 - in pypy/dist/pypy/interpreter: . astcompiler
ludal at codespeak.net
ludal at codespeak.net
Fri Sep 9 16:11:47 CEST 2005
Author: ludal
Date: Fri Sep 9 16:11:45 2005
New Revision: 17405
Modified:
pypy/dist/pypy/interpreter/astcompiler/ast.py
pypy/dist/pypy/interpreter/astcompiler/astgen.py
pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
pypy/dist/pypy/interpreter/pycompiler.py
Log:
- move compile_parse_result from AstCompiler into compile the split being not needed because it should be fully annotable
- correct some visitXXX signatures
- added missing base methods to AstVisitor
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py Fri Sep 9 16:11:45 2005
@@ -1710,6 +1710,12 @@
for child in node.getChildNodes():
child.accept(self)
+ def visitExpression(self, node):
+ return self.default(node)
+
+ def visitEmptyNode(self, node):
+ return self.default(node)
+
def visitAdd(self, node):
return self.default( node )
Modified: pypy/dist/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/astgen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py Fri Sep 9 16:11:45 2005
@@ -311,6 +311,12 @@
for child in node.getChildNodes():
child.accept(self)
+ def visitExpression(self, node):
+ return self.default(node)
+
+ def visitEmptyNode(self, node):
+ return self.default(node)
+
'''
def gen_ast_visitor(classes):
Modified: pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pycodegen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/pycodegen.py Fri Sep 9 16:11:45 2005
@@ -944,7 +944,7 @@
opcode = callfunc_opcode_info[have_star, have_dstar]
self.emitop_int(opcode, kw << 8 | pos)
- def visitPrint(self, node, newline=0):
+ def visitPrint(self, node):
self.set_lineno(node)
if node.dest:
node.dest.accept( self )
@@ -957,11 +957,22 @@
self.emit('PRINT_ITEM_TO')
else:
self.emit('PRINT_ITEM')
- if node.dest and not newline:
+ if node.dest:
self.emit('POP_TOP')
def visitPrintnl(self, node):
- self.visitPrint(node, newline=1)
+ self.set_lineno(node)
+ if node.dest:
+ node.dest.accept( self )
+ for child in node.nodes:
+ if node.dest:
+ self.emit('DUP_TOP')
+ child.accept( self )
+ if node.dest:
+ self.emit('ROT_TWO')
+ self.emit('PRINT_ITEM_TO')
+ else:
+ self.emit('PRINT_ITEM')
if node.dest:
self.emit('PRINT_NEWLINE_TO')
else:
@@ -978,8 +989,10 @@
self.emit('YIELD_VALUE')
# slice and subscript stuff
+ def visitSlice(self, node):
+ return self._visitSlice(node, False)
- def visitSlice(self, node, aug_flag=0):
+ def _visitSlice(self, node, aug_flag):
# aug_flag is used by visitAugSlice
node.expr.accept( self )
slice = 0
@@ -1005,7 +1018,10 @@
else:
assert False, "weird slice %s" % node.flags
- def visitSubscript(self, node, aug_flag=0):
+ def visitSubscript(self, node):
+ return self._visitSubscript(node, False)
+
+ def _visitSubscript(self, node, aug_flag):
node.expr.accept( self )
for sub in node.subs:
sub.accept( self )
@@ -1362,12 +1378,12 @@
self.main.emitop('LOAD_ATTR', self.main.mangle(node.attrname))
def visitSlice(self, node):
- self.main.visitSlice(node, 1)
+ self.main._visitSlice(node, True)
def visitSubscript(self, node):
if len(node.subs) > 1:
raise SyntaxError( "augmented assignment to tuple is not possible" )
- self.main.visitSubscript(node, 1)
+ self.main._visitSubscript(node, True)
class AugStoreVisitor(ast.ASTVisitor):
Modified: pypy/dist/pypy/interpreter/pycompiler.py
==============================================================================
--- pypy/dist/pypy/interpreter/pycompiler.py (original)
+++ pypy/dist/pypy/interpreter/pycompiler.py Fri Sep 9 16:11:45 2005
@@ -394,7 +394,14 @@
"""
def compile(self, source, filename, mode, flags):
from pyparser.error import ParseError
+ from pyparser.error import SyntaxError
+ from pypy.interpreter import astcompiler
+ from pypy.interpreter.astcompiler.pycodegen import ModuleCodeGenerator
+ from pypy.interpreter.astcompiler.pycodegen import InteractiveCodeGenerator
+ from pypy.interpreter.astcompiler.pycodegen import ExpressionCodeGenerator
from pyparser.pythonutil import AstBuilder, PYTHON_PARSER, TARGET_DICT
+ from pypy.interpreter.pycode import PyCode
+
flags |= __future__.generators.compiler_flag # always on (2.2 compat)
space = self.space
try:
@@ -406,17 +413,7 @@
except ParseError, e:
raise OperationError(space.w_SyntaxError,
e.wrap_info(space, filename))
- return self.compile_parse_result(ast_tree, filename, mode, flags)
- def compile_parse_result(self, ast_tree, filename, mode, flags):
- # __________
- # XXX this uses the non-annotatable astcompiler at interp-level
- from pypy.interpreter import astcompiler
- from pyparser.error import SyntaxError
- from pypy.interpreter.astcompiler.pycodegen import ModuleCodeGenerator
- from pypy.interpreter.astcompiler.pycodegen import InteractiveCodeGenerator
- from pypy.interpreter.astcompiler.pycodegen import ExpressionCodeGenerator
- space = self.space
try:
astcompiler.misc.set_filename(filename, ast_tree)
flag_names = get_flag_names(space, flags)
@@ -443,15 +440,13 @@
## space.wrap(e.end), space.wrap(e.reason)]))
except ValueError,e:
#if e.__class__ != ValueError:
- # extra_msg = "(Really go %s)" % e.__class__.__name__
+ # extra_msg = "(Really got %s)" % e.__class__.__name__
#else:
# extra_msg = ""
raise OperationError(space.w_ValueError,space.wrap(str(e)))
except TypeError,e:
raise
raise OperationError(space.w_TypeError,space.wrap(str(e)))
- # __________ end of XXX above
- from pypy.interpreter.pycode import PyCode
assert isinstance(c,PyCode)
return c
#compile_parse_result._annspecialcase_ = 'override:cpy_stablecompiler'
More information about the Pypy-commit
mailing list