Author: Lars Wassermann <[email protected]>
Branch: 
Changeset: r442:127ac7fc16ff
Date: 2013-06-10 18:57 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/127ac7fc16ff/

Log:    added misc category functions

diff --git a/spyvm/interpreter_proxy.py b/spyvm/interpreter_proxy.py
--- a/spyvm/interpreter_proxy.py
+++ b/spyvm/interpreter_proxy.py
@@ -473,15 +473,21 @@
     s_class = w_class.as_class_get_shadow(IProxy.space)
     return s_class.new(varsize)
 
-# @expose_on_virtual_machine_proxy([int, int], oop)
-# def makePointwithxValueyValue(x, y):
-#     space = IProxy.space
-#     w_x = space.wrap_int(x)
-#     w_y = space.wrap_int(y)
+@expose_on_virtual_machine_proxy([int, int], oop)
+def makePointwithxValueyValue(x, y):
+    space = IProxy.space
+    w_point = space.w_Point.as_class_get_shadow(space).new()
+    w_point.store(space, 0, space.wrap_int(x))
+    w_point.store(space, 1, space.wrap_int(y))
+    return w_point
 
-#     sqInt (*makePointwithxValueyValue)(sqInt xValue, sqInt yValue);
-#     sqInt (*popRemappableOop)(void);
-#     sqInt (*pushRemappableOop)(sqInt oop);
+@expose_on_virtual_machine_proxy([], oop)
+def popRemappableOop():
+    return IProxy.pop_remappable()
+
+@expose_on_virtual_machine_proxy([oop], oop)
+def pushRemappableOop(w_object):
+    return IProxy.push_remappable(w_object)
 
 #     /* InterpreterProxy methodsFor: 'other' */
 
@@ -709,6 +715,7 @@
         self._next_oop = 0
         self.oop_map = {}
         self.object_map = {}
+        self.remappable_objects = []
         self.reset()
 
     def reset(self):
@@ -716,7 +723,6 @@
         self.s_frame = None
         self.argcount = 0
         self.s_method = None
-        self.success_flag = True
         self.fail_reason = 0
 
     def call(self, signature, interp, s_frame, argcount, s_method):
@@ -725,15 +731,20 @@
         self.argcount = argcount
         self.s_method = s_method
         self.space = interp.space
+        # ensure that space.w_nil gets the first possible oop
+        self.object_to_oop(self.space.w_nil)
         try:
             # Load the correct DLL
-            self.success_flag = False
+            self.failed()
             # call the correct function in it...
-            if not self.success_flag:
+            if not self.fail_reason == 0:
                 raise error.PrimitiveFailedError
         finally:
             self.reset()
 
+    def failed(self, reason=1):
+        self.fail_reason = reason
+
     def oop_to_object(self, oop):
         try:
             return self.oop_map[oop]
@@ -754,8 +765,15 @@
         self._next_oop = next_oop + 1
         return next_oop
 
-    def failed(self, reason=1):
-        self.success_flag = False
-        self.fail_reason = reason
+    def pop_remappable(self):
+        try:
+            return self.remappable_objects.pop()
+        except IndexError:
+            self.failed()
+            return self.space.w_nil
+
+    def push_remappable(self, w_object):
+        self.remappable_objects.append(w_object)
+        return w_object
 
 IProxy = _InterpreterProxy()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to