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