[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