コード例 #1
0
ファイル: __init__.py プロジェクト: gordol/lever
    def __init__(self, cfunc, callback):
        self.cfunc = cfunc
        self.callback = callback
        pointer = rffi.cast(rffi.VOIDP, clibffi.closureHeap.alloc())
        if cfunc.notready:
            cfunc.prepare_cif()
            cfunc.notready = False
        Mem.__init__(self, cfunc, pointer)

        closure_ptr = rffi.cast(clibffi.FFI_CLOSUREP, self.pointer)
        # hide the object
        gcref = rgc.cast_instance_to_gcref(self)
        raw = rgc.hide_nonmovable_gcref(gcref)
        unique_id = rffi.cast(rffi.VOIDP, raw)

        res = clibffi.c_ffi_prep_closure(closure_ptr, cfunc.cif.cif,
            invoke_callback, unique_id)

        if rffi.cast(lltype.Signed, res) != clibffi.FFI_OK:
            raise unwind(LError(u"libffi failed to build this callback"))
        if closure_ptr.c_user_data != unique_id:
            raise unwind(LError(u"ffi_prep_closure(): bad user_data"))

        # The function might be called in separate thread,
        # so allocate GIL here, just in case.
        rgil.allocate()
コード例 #2
0
ファイル: handle.py プロジェクト: sota/pypy-old
def _newp_handle(space, w_ctype, w_x):
    # Allocate a handle as a nonmovable W_CDataHandle instance, which
    # we can cast to a plain CCHARP.  As long as the object is not freed,
    # we can cast the CCHARP back to a W_CDataHandle with reveal_gcref().
    new_cdataobj = objectmodel.instantiate(cdataobj.W_CDataHandle,
                                           nonmovable=True)
    gcref = rgc.cast_instance_to_gcref(new_cdataobj)
    _cdata = rgc.hide_nonmovable_gcref(gcref)
    _cdata = rffi.cast(rffi.CCHARP, _cdata)
    cdataobj.W_CDataHandle.__init__(new_cdataobj, space, _cdata, w_ctype, w_x)
    return new_cdataobj
コード例 #3
0
ファイル: handle.py プロジェクト: mozillazg/pypy
def _newp_handle(space, w_ctype, w_x):
    # Allocate a handle as a nonmovable W_CDataHandle instance, which
    # we can cast to a plain CCHARP.  As long as the object is not freed,
    # we can cast the CCHARP back to a W_CDataHandle with reveal_gcref().
    new_cdataobj = objectmodel.instantiate(cdataobj.W_CDataHandle,
                                           nonmovable=True)
    gcref = rgc.cast_instance_to_gcref(new_cdataobj)
    _cdata = rgc.hide_nonmovable_gcref(gcref)
    _cdata = rffi.cast(rffi.CCHARP, _cdata)
    cdataobj.W_CDataHandle.__init__(new_cdataobj, space, _cdata, w_ctype, w_x)
    return new_cdataobj
コード例 #4
0
ファイル: ccallback.py プロジェクト: mozillazg/pypy
 def hide_object(self):
     gcref = rgc.cast_instance_to_gcref(self)
     raw = rgc.hide_nonmovable_gcref(gcref)
     return rffi.cast(rffi.VOIDP, raw)
コード例 #5
0
ファイル: ccallback.py プロジェクト: sota/pypy-old
 def hide_object(self):
     gcref = rgc.cast_instance_to_gcref(self)
     raw = rgc.hide_nonmovable_gcref(gcref)
     return rffi.cast(rffi.VOIDP, raw)
コード例 #6
0
ファイル: hide_reveal.py プロジェクト: zcxowwww/pypy
 def hide_object(PTR, obj):
     gcref = rgc.cast_instance_to_gcref(obj)
     raw = rgc.hide_nonmovable_gcref(gcref)
     return rffi.cast(PTR, raw)