[pypy-svn] r69738 - in pypy/branch/virtual-forcing/pypy: jit/metainterp rlib

arigo at codespeak.net arigo at codespeak.net
Sun Nov 29 19:14:01 CET 2009


Author: arigo
Date: Sun Nov 29 19:14:00 2009
New Revision: 69738

Modified:
   pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py
   pypy/branch/virtual-forcing/pypy/rlib/jit.py
Log:
Translation fixes.


Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py	Sun Nov 29 19:14:00 2009
@@ -1208,15 +1208,19 @@
         if op.opname == "direct_call":
             func = getattr(get_funcobj(op.args[0].value), '_callable', None)
             pure = getattr(func, "_pure_function_", False)
+            all_promoted_args = getattr(func,
+                               "_pure_function_with_all_promoted_args_", False)
+            if pure and not all_promoted_args:
+                effectinfo = calldescr.get_extra_info()
+                assert (effectinfo is not None and
+                        not effectinfo.promotes_virtualizables)
         try:
             canraise = self.codewriter.raise_analyzer.can_raise(op)
         except lltype.DelayedPointer:
             canraise = True  # if we need to look into the delayed ptr that is
                              # the portal, then it's certainly going to raise
         if pure:
-            effectinfo = calldescr.get_extra_info()
-            assert (effectinfo is not None and
-                    not effectinfo.promotes_virtualizables)
+            # XXX check what to do about exceptions (also MemoryError?)
             self.emit('residual_call_pure')
         elif canraise:
             self.emit('residual_call')

Modified: pypy/branch/virtual-forcing/pypy/rlib/jit.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/rlib/jit.py	(original)
+++ pypy/branch/virtual-forcing/pypy/rlib/jit.py	Sun Nov 29 19:14:00 2009
@@ -22,6 +22,7 @@
 def purefunction_promote(func):
     import inspect
     purefunction(func)
+    func._pure_function_with_all_promoted_args_ = True
     args, varargs, varkw, defaults = inspect.getargspec(func)
     args = ["v%s" % (i, ) for i in range(len(args))]
     assert varargs is None and varkw is None



More information about the Pypy-commit mailing list