Author: Lars Wassermann <[email protected]>
Branch: 
Changeset: r111:f722db172868
Date: 2013-03-01 17:49 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/f722db172868/

Log:    refactored marking a context as returned from

diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -90,8 +90,6 @@
             w_new_context = self.step(s_active_context)
             if w_new_context is not None:
                 s_active_context = 
w_new_context.as_context_get_shadow(self.space)
-                #method = s_active_context.w_method()
-                #print method.get_identifier_string()
 
     def perform(self, w_receiver, selector, *arguments_w):
         if isinstance(selector, str):
@@ -250,7 +248,6 @@
             print "%sSending selector %r to %r with: %r" % (
                 interp._last_indent, w_selector.as_string(), receiver,
                 [self.peek(argcount-1-i) for i in range(argcount)])
-            pass
         assert argcount >= 0
         s_method = receiverclassshadow.lookup(w_selector)
         # XXX catch MethodNotFound here and send doesNotUnderstand:
@@ -285,12 +282,11 @@
     def _return(self, object, interp, w_return_to):
         # for tests, when returning from the top-level context
         if w_return_to.is_same_object(self.space.w_nil):
-            raise ReturnFromTopLevel(object)
-        # widow this context
-        self.store_pc(-1)
-        self.store_w_sender(self.space.w_nil)
+            raise ReturnFromTopLevel(return_value)
+        # make this context a returned one
+        self.mark_returned()
 
-        w_return_to.as_context_get_shadow(self.space).push(object)
+        w_return_to.as_context_get_shadow(self.space).push(return_value)
         return w_return_to
 
     def returnReceiver(self, interp, current_bytecode):
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -432,6 +432,13 @@
     def stackpointer_offset(self):
         raise NotImplementedError()
 
+    def mark_returned(self):
+        self.store_pc(-1)
+        self.store_w_sender(self.space.w_nil)
+
+    def is_returned(self):
+        return self.pc() == -1 and self.w_sender is self.space.w_nil
+
     # ______________________________________________________________________
     # Method that contains the bytecode for this method/block context
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to