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

Reply via email to