Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58218:a76a456e0f20
Date: 2012-10-18 17:00 +0200
http://bitbucket.org/pypy/pypy/changeset/a76a456e0f20/
Log: Port to the new model, enough to make test_ajit mostly work
diff --git a/pypy/jit/backend/llgraph/runner.py
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -27,9 +27,9 @@
self.descr = descr
class ExecutionFinished(Exception):
- def __init__(self, descr, args):
+ def __init__(self, descr, arg=None):
self.descr = descr
- self.args = args
+ self.arg = arg
class Jump(Exception):
def __init__(self, descr, args):
@@ -213,7 +213,7 @@
frame.execute(lltrace)
assert False
except ExecutionFinished, e:
- frame.latest_values = e.args
+ frame.finish_value = e.arg
frame.latest_descr = e.descr
return frame
except GuardFailed, e:
@@ -232,16 +232,10 @@
def get_latest_descr(self, frame):
return frame.latest_descr
- def clear_latest_values(self, count):
- del self.latest_values
-
- def grab_exc_value(self, frame):
- if frame.last_exception is not None:
- result = frame.last_exception.args[1]
- frame.last_exception = None
- return lltype.cast_opaque_ptr(llmemory.GCREF, result)
- else:
- return lltype.nullptr(llmemory.GCREF.TO)
+ def get_finish_value_int(self, frame):
+ return frame.finish_value
+ get_finish_value_float = get_finish_value_int
+ get_finish_value_ref = get_finish_value_int
def force(self, frame):
assert not frame._forced
@@ -619,11 +613,18 @@
# -----------------------------------------------------
- def fail_guard(self, descr):
+ def fail_guard(self, descr, saveexc=False):
+ if saveexc:
+ if self.last_exception is not None:
+ result = self.last_exception.args[1]
+ gcref = lltype.cast_opaque_ptr(llmemory.GCREF, result)
+ else:
+ gcref = lltype.nullptr(llmemory.GCREF.TO)
+ self.finish_value = gcref
raise GuardFailed(self._getfailargs(), descr)
- def execute_finish(self, descr, *args):
- raise ExecutionFinished(descr, args)
+ def execute_finish(self, descr, arg=None):
+ raise ExecutionFinished(descr, arg)
def execute_label(self, descr, *args):
argboxes = self.current_op.getarglist()
@@ -663,7 +664,7 @@
def execute_guard_no_exception(self, descr):
if self.last_exception is not None:
- self.fail_guard(descr)
+ self.fail_guard(descr, saveexc=True)
def execute_guard_exception(self, descr, excklass):
lle = self.last_exception
@@ -675,7 +676,7 @@
llmemory.cast_int_to_adr(excklass),
rclass.CLASSTYPE)
if gotklass != excklass:
- self.fail_guard(descr)
+ self.fail_guard(descr, saveexc=True)
#
res = lle.args[1]
self.last_exception = None
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit