Author: Maciej Fijalkowski <[email protected]>
Branch: continulet-jit-3
Changeset: r58215:25b339b57cf9
Date: 2012-10-18 15:35 +0200
http://bitbucket.org/pypy/pypy/changeset/25b339b57cf9/

Log:    fix basics on llgraph backend

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
@@ -146,7 +146,6 @@
         model.AbstractCPU.__init__(self)
         self.rtyper = rtyper
         self.llinterp = LLInterpreter(rtyper)
-        self.last_exception = None
         self.descrs = {}
         class MiniStats:
             pass
@@ -212,27 +211,32 @@
             frame.execute(lltrace)
             assert False
         except ExecutionFinished, e:
-            self.latest_values = e.args
-            return e.descr
+            frame.latest_values = e.args
+            frame.latest_descr = e.descr
+            return frame
         except GuardFailed, e:
-            self.latest_values = e.failargs
-            return e.descr
+            frame.latest_values = e.failargs
+            frame.latest_descr = e.descr
+            return frame
 
-    def get_latest_value_int(self, index):
-        return self.latest_values[index]
+    def get_latest_value_int(self, frame, index):
+        return frame.latest_values[index]
     get_latest_value_float = get_latest_value_int
     get_latest_value_ref   = get_latest_value_int
 
-    def get_latest_value_count(self):
-        return len(self.latest_values)
+    def get_latest_value_count(self, frame):
+        return len(frame.latest_values)
+
+    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):
-        if self.last_exception is not None:
-            result = self.last_exception.args[1]
-            self.last_exception = None
+    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)
@@ -523,6 +527,7 @@
         for box, arg in zip(argboxes, args):
             self.env[box] = arg
         self.overflow_flag = False
+        self.last_exception = None
 
     def lookup(self, arg):
         if isinstance(arg, Const):
@@ -638,11 +643,11 @@
         self.execute_guard_class(descr, arg, klass)
 
     def execute_guard_no_exception(self, descr):
-        if self.cpu.last_exception is not None:
+        if self.last_exception is not None:
             self.fail_guard(descr)
 
     def execute_guard_exception(self, descr, excklass):
-        lle = self.cpu.last_exception
+        lle = self.last_exception
         if lle is None:
             gotklass = lltype.nullptr(rclass.CLASSTYPE.TO)
         else:
@@ -654,7 +659,7 @@
             self.fail_guard(descr)
         #
         res = lle.args[1]
-        self.cpu.last_exception = None
+        self.last_exception = None
         return support.cast_to_ptr(res)
 
     def execute_guard_not_forced(self, descr):
@@ -725,9 +730,9 @@
         call_args = support.cast_call_args_in_order(TP.ARGS, args)
         try:
             res = self.cpu.maybe_on_top_of_llinterp(func, call_args, TP.RESULT)
-            self.cpu.last_exception = None
+            self.last_exception = None
         except LLException, lle:
-            self.cpu.last_exception = lle
+            self.last_exception = lle
             res = _example_res[getkind(TP.RESULT)[0]]
         return res
 
@@ -767,8 +772,8 @@
         try:
             result = assembler_helper_ptr(failindex, vable)
         except LLException, lle:
-            assert self.cpu.last_exception is None, "exception left behind"
-            self.cpu.last_exception = lle
+            assert self.last_exception is None, "exception left behind"
+            self.last_exception = lle
             if self.current_op.result is not None:
                 return _example_res[self.current_op.result.type]
             return None
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to