本文整理汇总了Python中pypy.module.cpyext.api.generic_cpy_call函数的典型用法代码示例。如果您正苦于以下问题:Python generic_cpy_call函数的具体用法?Python generic_cpy_call怎么用?Python generic_cpy_call使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了generic_cpy_call函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _Py_Dealloc
def _Py_Dealloc(space, obj):
from pypy.module.cpyext.api import generic_cpy_call
pto = obj.c_ob_type
#print >>sys.stderr, "Calling dealloc slot", pto.c_tp_dealloc, "of", obj, \
# "'s type which is", rffi.charp2str(pto.c_tp_name)
rawrefcount.mark_deallocating(w_marker_deallocating, obj)
generic_cpy_call(space, pto.c_tp_dealloc, obj)
示例2: call
def call(self, space, w_self, w_args, w_kw):
# Call the C function
if w_self is None:
w_self = self.w_self
flags = rffi.cast(lltype.Signed, self.ml.c_ml_flags)
flags &= ~(METH_CLASS | METH_STATIC | METH_COEXIST)
if space.is_true(w_kw) and not flags & METH_KEYWORDS:
raise OperationError(space.w_TypeError, space.wrap(self.name + "() takes no keyword arguments"))
func = rffi.cast(PyCFunction, self.ml.c_ml_meth)
length = space.int_w(space.len(w_args))
if flags & METH_KEYWORDS:
func = rffi.cast(PyCFunctionKwArgs, self.ml.c_ml_meth)
return generic_cpy_call(space, func, w_self, w_args, w_kw)
elif flags & METH_NOARGS:
if length == 0:
return generic_cpy_call(space, func, w_self, None)
raise OperationError(space.w_TypeError, space.wrap(self.name + "() takes no arguments"))
elif flags & METH_O:
if length != 1:
raise oefmt(space.w_TypeError, "%s() takes exactly one argument (%d given)", self.name, length)
w_arg = space.getitem(w_args, space.wrap(0))
return generic_cpy_call(space, func, w_self, w_arg)
elif flags & METH_VARARGS:
return generic_cpy_call(space, func, w_self, w_args)
else: # METH_OLDARGS, the really old style
size = length
if size == 1:
w_arg = space.getitem(w_args, space.wrap(0))
elif size == 0:
w_arg = None
else:
w_arg = w_args
return generic_cpy_call(space, func, w_self, w_arg)
示例3: PyObject_AsCharBuffer
def PyObject_AsCharBuffer(space, obj, bufferp, sizep):
"""Returns a pointer to a read-only memory location usable as
character-based input. The obj argument must support the single-segment
character buffer interface. On success, returns 0, sets buffer to the
memory location and size to the buffer length. Returns -1 and sets a
TypeError on error.
"""
pto = obj.c_ob_type
pb = pto.c_tp_as_buffer
if not (pb and pb.c_bf_getbuffer):
raise OperationError(space.w_TypeError, space.wrap(
"expected an object with the buffer interface"))
with lltype.scoped_alloc(Py_buffer) as view:
ret = generic_cpy_call(
space, pb.c_bf_getbuffer,
obj, view, rffi.cast(rffi.INT_real, PyBUF_SIMPLE))
if rffi.cast(lltype.Signed, ret) == -1:
return -1
bufferp[0] = rffi.cast(rffi.CCHARP, view.c_buf)
sizep[0] = view.c_len
if pb.c_bf_releasebuffer:
generic_cpy_call(space, pb.c_bf_releasebuffer,
obj, view)
Py_DecRef(space, view.c_obj)
return 0
示例4: subtype_dealloc
def subtype_dealloc(space, obj):
pto = obj.c_ob_type
base = pto
this_func_ptr = llslot(space, subtype_dealloc)
while base.c_tp_dealloc == this_func_ptr:
base = base.c_tp_base
assert base
dealloc = base.c_tp_dealloc
# XXX call tp_del if necessary
generic_cpy_call(space, dealloc, obj)
示例5: subtype_dealloc
def subtype_dealloc(space, obj):
pto = obj.c_ob_type
base = pto
this_func_ptr = llhelper(subtype_dealloc.api_func.functype, subtype_dealloc.api_func.get_wrapper(space))
while base.c_tp_dealloc == this_func_ptr:
base = base.c_tp_base
assert base
dealloc = base.c_tp_dealloc
# XXX call tp_del if necessary
generic_cpy_call(space, dealloc, obj)
示例6: wrap_descr_delete
def wrap_descr_delete(space, w_self, w_args, func):
func_target = rffi.cast(descrsetfunc, func)
check_num_args(space, w_args, 1)
w_obj, = space.fixedview(w_args)
res = generic_cpy_call(space, func_target, w_self, w_obj, None)
if rffi.cast(lltype.Signed, res) == -1:
space.fromcache(State).check_and_raise_exception(always=True)
示例7: wrap_ssizessizeargfunc
def wrap_ssizessizeargfunc(space, w_self, w_args, func):
func_target = rffi.cast(ssizessizeargfunc, func)
check_num_args(space, w_args, 2)
args_w = space.fixedview(w_args)
start = space.int_w(args_w[0])
end = space.int_w(args_w[1])
return generic_cpy_call(space, func_target, w_self, start, end)
示例8: wrap_hashfunc
def wrap_hashfunc(space, w_self, w_args, func):
func_target = rffi.cast(hashfunc, func)
check_num_args(space, w_args, 0)
res = generic_cpy_call(space, func_target, w_self)
if res == -1:
space.fromcache(State).check_and_raise_exception(always=True)
return space.wrap(res)
示例9: wrap_getbuffer
def wrap_getbuffer(space, w_self, w_args, func):
func_target = rffi.cast(getbufferproc, func)
with lltype.scoped_alloc(Py_buffer) as pybuf:
_flags = 0
if space.len_w(w_args) > 0:
_flags = space.int_w(space.listview(w_args)[0])
flags = rffi.cast(rffi.INT_real,_flags)
size = generic_cpy_call(space, func_target, w_self, pybuf, flags)
if widen(size) < 0:
space.fromcache(State).check_and_raise_exception(always=True)
ptr = pybuf.c_buf
size = pybuf.c_len
ndim = widen(pybuf.c_ndim)
shape = [pybuf.c_shape[i] for i in range(ndim)]
if pybuf.c_strides:
strides = [pybuf.c_strides[i] for i in range(ndim)]
else:
strides = [1]
if pybuf.c_format:
format = rffi.charp2str(pybuf.c_format)
else:
format = 'B'
return space.newbuffer(CPyBuffer(ptr, size, w_self, format=format,
ndim=ndim, shape=shape, strides=strides,
itemsize=pybuf.c_itemsize,
readonly=widen(pybuf.c_readonly)))
示例10: setter
def setter(self, space, w_self, w_value):
assert isinstance(self, W_GetSetPropertyEx)
check_descr(space, w_self, self.w_type)
res = generic_cpy_call(space, self.getset.c_set, w_self, w_value, self.getset.c_closure)
if rffi.cast(lltype.Signed, res) < 0:
state = space.fromcache(State)
state.check_and_raise_exception()
示例11: wrap_getbuffer
def wrap_getbuffer(space, w_self, w_args, func):
func_target = rffi.cast(getbufferproc, func)
with lltype.scoped_alloc(Py_buffer) as view:
flags = rffi.cast(rffi.INT_real, 0)
ret = generic_cpy_call(space, func_target, w_self, view, flags)
if rffi.cast(lltype.Signed, ret) == -1:
space.fromcache(State).check_and_raise_exception(always=True)
return space.newbuffer(CPyBuffer(view.c_buf, view.c_len, w_self))
示例12: test_string_buffer
def test_string_buffer(self, space, api):
py_str = new_empty_str(space, 10)
c_buf = py_str.c_ob_type.c_tp_as_buffer
assert c_buf
py_obj = rffi.cast(PyObject, py_str)
assert generic_cpy_call(space, c_buf.c_bf_getsegcount,
py_obj, lltype.nullptr(Py_ssize_tP.TO)) == 1
ref = lltype.malloc(Py_ssize_tP.TO, 1, flavor='raw')
assert generic_cpy_call(space, c_buf.c_bf_getsegcount,
py_obj, ref) == 1
assert ref[0] == 10
lltype.free(ref, flavor='raw')
ref = lltype.malloc(rffi.VOIDPP.TO, 1, flavor='raw')
assert generic_cpy_call(space, c_buf.c_bf_getreadbuffer,
py_obj, 0, ref) == 10
lltype.free(ref, flavor='raw')
Py_DecRef(space, py_obj)
示例13: wrap_delattr
def wrap_delattr(space, w_self, w_args, func):
func_target = rffi.cast(setattrofunc, func)
check_num_args(space, w_args, 1)
w_name, = space.fixedview(w_args)
# XXX "Carlo Verre hack"?
res = generic_cpy_call(space, func_target, w_self, w_name, None)
if rffi.cast(lltype.Signed, res) == -1:
space.fromcache(State).check_and_raise_exception(always=True)
示例14: wrap_sq_setitem
def wrap_sq_setitem(space, w_self, w_args, func):
func_target = rffi.cast(ssizeobjargproc, func)
check_num_args(space, w_args, 2)
args_w = space.fixedview(w_args)
index = space.int_w(space.index(args_w[0]))
res = generic_cpy_call(space, func_target, w_self, index, args_w[1])
if rffi.cast(lltype.Signed, res) == -1:
space.fromcache(State).check_and_raise_exception(always=True)
示例15: wrap_getwritebuffer
def wrap_getwritebuffer(space, w_self, w_args, func):
func_target = rffi.cast(readbufferproc, func)
with lltype.scoped_alloc(rffi.VOIDPP.TO, 1) as ptr:
index = rffi.cast(Py_ssize_t, 0)
size = generic_cpy_call(space, func_target, w_self, index, ptr)
if size < 0:
space.fromcache(State).check_and_raise_exception(always=True)
return space.newbuffer(CPyBuffer(ptr[0], size, w_self, readonly=False))