Author: Lars Wassermann <[email protected]>
Branch:
Changeset: r104:bcc60850a290
Date: 2013-02-27 14:08 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/bcc60850a290/
Log: fixed #asSymbol asSymbol test fixed perform method to inquire
whether the method to perform is primitive
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -96,12 +96,21 @@
w_selector = self.image.w_asSymbol
else:
w_selector = self.perform(self.space.wrap_string(selector),
"asSymbol")
- s_class = w_receiver.shadow_of_my_class(self.space)
- s_method = s_class.lookup(w_selector)
- assert s_method
- w_frame = s_method.create_frame(self.space, w_receiver,
list(arguments_w))
+
+ w_method = model.W_CompiledMethod()
+ w_method.setbytes([chr(124)]) #returnTopFromMethod
+ s_method = w_method.as_compiledmethod_get_shadow(self.space)
+ s_frame = MethodContextShadow.make_context(
+ self.space, s_method, w_receiver, [],
None).get_shadow(self.space)
+ s_frame.push(w_receiver)
+ s_frame.push_all(list(arguments_w))
try:
- self.loop(w_frame)
+ w_new_frame = s_frame._sendSelfSelector(w_selector,
len(arguments_w), self)
+ if w_new_frame == None:
+ # which means that we tried to call a primitive method
+ return s_frame.pop()
+ else:
+ self.loop(w_new_frame)
except ReturnFromTopLevel, e:
return e.object
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -750,7 +750,7 @@
def __str__(self):
retval = '\nMethodContext of:'
- retval += self.w_method().as_string(markBytecode=self.pc())
+ retval += self.w_method().as_string(markBytecode=self.pc() + 1)
retval += "Stackptr: %i" % self._stack_ptr
retval += "\nStack : " + str(self.stack())
return retval
diff --git a/spyvm/test/test_bootstrappedimage.py
b/spyvm/test/test_bootstrappedimage.py
--- a/spyvm/test/test_bootstrappedimage.py
+++ b/spyvm/test/test_bootstrappedimage.py
@@ -7,15 +7,13 @@
testhelper.setup_module(testhelper, filename='bootstrapped.image')
def test_retrieve_symbol():
- py.test.skip("This method will fail, because the bytecodes are not
adjusted for blockclosures, yet.")
- perform(testhelper.image.w_asSymbol, "asSymbol")
+ w_result = perform(testhelper.image.w_asSymbol, "asSymbol")
+ assert w_result is testhelper.image.w_asSymbol
def test_create_new_symbol():
- py.test.skip("This method is based upon the above.")
- #import pdb; pdb.set_trace()
w_result = perform(w("someString"), "asSymbol")
assert w_result is not None
- assert w_result.as_string() is "someString"
+ assert w_result.as_string() == "someString"
#def test_hazelnut():
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit