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