[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