[pypy-commit] pypy translation-cleanup: Fix PRINT_ITEM and PRINT_NEWLINE

rlamy noreply at buildbot.pypy.org
Thu Sep 27 19:29:16 CEST 2012


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: translation-cleanup
Changeset: r57630:41fac9129f86
Date: 2012-09-27 07:07 +0100
http://bitbucket.org/pypy/pypy/changeset/41fac9129f86/

Log:	Fix PRINT_ITEM and PRINT_NEWLINE

diff --git a/pypy/objspace/flow/flowcontext.py b/pypy/objspace/flow/flowcontext.py
--- a/pypy/objspace/flow/flowcontext.py
+++ b/pypy/objspace/flow/flowcontext.py
@@ -10,6 +10,7 @@
 from pypy.objspace.flow.framestate import (FrameState, recursively_unflatten,
         recursively_flatten)
 from pypy.objspace.flow.bytecode import HostCode
+from pypy.objspace.flow.specialcase import sc_applevel
 
 class FlowingError(Exception):
     """ Signals invalid RPython in the function being analysed"""
@@ -574,6 +575,36 @@
         # isn't popped straightaway.
         self.pushvalue(None)
 
+    def PRINT_EXPR(self, oparg, next_instr):
+        w_expr = self.popvalue()
+        print_expr(self.space, w_expr)
+
+    def PRINT_ITEM_TO(self, oparg, next_instr):
+        w_stream = self.popvalue()
+        w_item = self.popvalue()
+        if self.space.is_w(w_stream, self.space.w_None):
+            w_stream = sys_stdout(self.space)   # grumble grumble special cases
+        print_item_to(self.space, w_item, w_stream)
+
+    def PRINT_ITEM(self, oparg, next_instr):
+        w_item = self.popvalue()
+        self.print_item(w_item)
+
+    def print_item(self, *args):
+        return sc_applevel(self.space, 'print_item', args)
+
+    def PRINT_NEWLINE_TO(self, oparg, next_instr):
+        w_stream = self.popvalue()
+        if self.space.is_w(w_stream, self.space.w_None):
+            w_stream = sys_stdout(self.space)   # grumble grumble special cases
+        print_newline_to(self.space, w_stream)
+
+    def PRINT_NEWLINE(self, oparg, next_instr):
+        self.print_newline()
+
+    def print_newline(self):
+        return sc_applevel(self.space, 'print_newline', [])
+
     def FOR_ITER(self, jumpby, next_instr):
         w_iterator = self.peekvalue()
         try:
diff --git a/pypy/objspace/flow/specialcase.py b/pypy/objspace/flow/specialcase.py
--- a/pypy/objspace/flow/specialcase.py
+++ b/pypy/objspace/flow/specialcase.py
@@ -51,12 +51,12 @@
     import os
     os.write(1, s)
 
-def sc_applevel(space, app, name, args_w):
+def sc_applevel(space, name, args_w):
     # special case only for print_item and print_newline
-    if 'pyopcode' in app.filename and name == 'print_item':
+    if name == 'print_item':
         w_s = space.do_operation('str', *args_w)
         args_w = (w_s,)
-    elif 'pyopcode' in app.filename and name == 'print_newline':
+    elif name == 'print_newline':
         pass
     else:
         raise Exception("not RPython: calling %r from %r" % (name, app))


More information about the pypy-commit mailing list