Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77810:aa6e8a681364
Date: 2015-06-03 11:06 +0200
http://bitbucket.org/pypy/pypy/changeset/aa6e8a681364/

Log:    finish test_fficall

diff --git a/rpython/jit/metainterp/optimizeopt/info.py 
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -176,15 +176,11 @@
 
 class AbstractRawPtrInfo(AbstractVirtualPtrInfo):
     def visitor_walk_recursive(self, op, visitor, optimizer):
-        xxx
-        box = self.rawbuffer_value.get_key_box()
-        visitor.register_virtual_fields(self.keybox, [box])
-        self.rawbuffer_value.visitor_walk_recursive(visitor)
+        raise NotImplementedError("abstract")
 
     @specialize.argtype(1)
     def visitor_dispatch_virtual_type(self, visitor):
-        yyy
-        return visitor.visit_vrawslice(self.offset)    
+        raise NotImplementedError("abstract")
 
 class RawBufferPtrInfo(AbstractRawPtrInfo):
     buffer = None
@@ -254,6 +250,15 @@
     def _force_elements(self, op, optforce, descr):
         xxx
 
+    def visitor_walk_recursive(self, op, visitor, optimizer):
+        source_op = optimizer.get_box_replacement(op.getarg(0))
+        visitor.register_virtual_fields(op, [source_op])
+        self.parent.visitor_walk_recursive(source_op, visitor, optimizer)
+
+    @specialize.argtype(1)
+    def visitor_dispatch_virtual_type(self, visitor):
+        return visitor.visit_vrawslice(self.offset)
+
 class ArrayPtrInfo(AbstractVirtualPtrInfo):
     _attrs_ = ('length', '_items', 'lenbound', '_clear')
 
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py 
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -767,10 +767,9 @@
             if isinstance(opinfo, info.RawBufferPtrInfo):
                 self.make_virtual_raw_slice(offset, opinfo, op)
                 return
-            elif isinstance(value, VRawSliceValue):
-                offset = offset + value.offset
-                self.make_virtual_raw_slice(value.rawbuffer_value, offset,
-                                            op)
+            elif isinstance(opinfo, info.RawSlicePtrInfo):
+                offset = offset + opinfo.offset
+                self.make_virtual_raw_slice(offset, opinfo.parent, op)
                 return
         self.emit_operation(op)
 
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -3021,10 +3021,14 @@
                 rop.CALL_RELEASE_GIL_I, [c_saveall, argboxes[2]] + arg_boxes,
                 value, descr=calldescr)
         elif tp == 'f':
-            xxx
+            value = executor.execute_varargs(self.cpu, self,
+                                             rop.CALL_MAY_FORCE_F,
+                                             argboxes, descr)
             box_result = self.history.record(
                 rop.CALL_RELEASE_GIL_F, [c_saveall, argboxes[2]] + arg_boxes,
                 value, descr=calldescr)
+        else:
+            assert False
         #
         # note that the result is written back to the exchange_buffer by the
         # special op libffi_save_result_{int,float}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to