Author: Tim Felgentreff <[email protected]>
Branch: storage
Changeset: r872:04a55ec5b4d2
Date: 2014-07-09 16:11 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/04a55ec5b4d2/

Log:    only force and store the sender if the context wasn't returned
        properly (it had an exception)

diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -141,7 +141,7 @@
             # Cleanly leave the context. This will finish the virtual 
sender-reference, if
             # it is still there, which can happen in case of ProcessSwitch or 
StackOverflow;
             # in case of a Return, this will already be handled while 
unwinding the stack.
-            s_frame.finish_virtual_sender()
+            s_frame.finish_virtual_sender(s_sender)
 
     def step(self, context):
         bytecode = context.fetch_next_bytecode()
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -699,13 +699,15 @@
     def is_fresh(self):
         return self.direct_sender is None and self.virtual_sender is 
jit.vref_None
 
-    def finish_virtual_sender(self, save_direct_sender=True):
+    def finish_virtual_sender(self, s_sender):
         if self.virtual_sender is not jit.vref_None:
-            sender = self.virtual_sender() # xxx: check if we can move this 
down
-            jit.virtual_ref_finish(self.virtual_sender, sender)
+            if self.pc() != -1:
+                # stack is unrolling, but this frame was not
+                # marked_returned: it is an escaped frame
+                sender = self.virtual_sender()
+                self.direct_sender = sender
+            jit.virtual_ref_finish(self.virtual_sender, s_sender)
             self.virtual_sender = jit.vref_None
-            if save_direct_sender:
-                self.direct_sender = sender
 
     def store_s_sender(self, s_sender, raise_error=True):
         # If we have a virtual back reference, we must finish it before 
storing the direct reference.
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to