[pypy-commit] pypy cling-support: simplified dispatch for improved performance
wlav
pypy.commits at gmail.com
Wed Nov 23 14:50:53 EST 2016
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: cling-support
Changeset: r88591:d4eede32eec0
Date: 2016-11-23 11:42 -0800
http://bitbucket.org/pypy/pypy/changeset/d4eede32eec0/
Log: simplified dispatch for improved performance
diff --git a/pypy/module/cppyy/capi/loadable_capi.py b/pypy/module/cppyy/capi/loadable_capi.py
--- a/pypy/module/cppyy/capi/loadable_capi.py
+++ b/pypy/module/cppyy/capi/loadable_capi.py
@@ -25,11 +25,32 @@
class _Arg: # poor man's union
_immutable_ = True
- def __init__(self, h = 0, l = -1, s = '', vp = rffi.cast(rffi.VOIDP, 0)):
+ def __init__(self, tc, h = 0, l = -1, s = '', p = rffi.cast(rffi.VOIDP, 0)):
+ self.tc = tc
self._handle = h
self._long = l
self._string = s
- self._voidp = vp
+ self._voidp = p
+
+class _ArgH(_Arg):
+ _immutable_ = True
+ def __init__(self, val):
+ _Arg.__init__(self, 'h', h = val)
+
+class _ArgL(_Arg):
+ _immutable_ = True
+ def __init__(self, val):
+ _Arg.__init__(self, 'l', l = val)
+
+class _ArgS(_Arg):
+ _immutable_ = True
+ def __init__(self, val):
+ _Arg.__init__(self, 's', s = val)
+
+class _ArgP(_Arg):
+ _immutable_ = True
+ def __init__(self, val):
+ _Arg.__init__(self, 'p', p = val)
# For the loadable CAPI, the calls start and end in RPython. Therefore, the standard
# _call of W_CTypeFunc, which expects wrapped objects, does not quite work: some
@@ -59,14 +80,18 @@
argtype = self.fargs[i]
# the following is clumsy, but the data types used as arguments are
# very limited, so it'll do for now
- if isinstance(argtype, ctypeprim.W_CTypePrimitiveSigned):
+ if obj.tc == 'l':
+ assert isinstance(argtype, ctypeprim.W_CTypePrimitiveSigned)
misc.write_raw_signed_data(data, rffi.cast(rffi.LONG, obj._long), argtype.size)
- elif isinstance(argtype, ctypeprim.W_CTypePrimitiveUnsigned):
+ elif obj.tc == 'h':
+ assert isinstance(argtype, ctypeprim.W_CTypePrimitiveUnsigned)
misc.write_raw_unsigned_data(data, rffi.cast(rffi.ULONG, obj._handle), argtype.size)
- elif obj._voidp != rffi.cast(rffi.VOIDP, 0):
+ elif obj.tc == 'p':
+ assert obj._voidp != rffi.cast(rffi.VOIDP, 0)
data = rffi.cast(rffi.VOIDPP, data)
data[0] = obj._voidp
else: # only other use is sring
+ assert obj.tc == 's'
n = len(obj._string)
assert raw_string == rffi.cast(rffi.CCHARP, 0)
# XXX could use rffi.get_nonmovingbuffer_final_null()
@@ -298,87 +323,87 @@
# name to opaque C++ scope representation ------------------------------------
def c_num_scopes(space, cppscope):
- return space.int_w(call_capi(space, 'num_scopes', [_Arg(h=cppscope.handle)]))
+ return space.int_w(call_capi(space, 'num_scopes', [_ArgH(cppscope.handle)]))
def c_scope_name(space, cppscope, iscope):
- args = [_Arg(h=cppscope.handle), _Arg(l=iscope)]
+ args = [_ArgH(cppscope.handle), _ArgL(iscope)]
return charp2str_free(space, call_capi(space, 'scope_name', args))
def c_resolve_name(space, name):
- return charp2str_free(space, call_capi(space, 'resolve_name', [_Arg(s=name)]))
+ return charp2str_free(space, call_capi(space, 'resolve_name', [_ArgS(name)]))
def c_get_scope_opaque(space, name):
- return rffi.cast(C_SCOPE, space.uint_w(call_capi(space, 'get_scope', [_Arg(s=name)])))
+ return rffi.cast(C_SCOPE, space.uint_w(call_capi(space, 'get_scope', [_ArgS(name)])))
def c_actual_class(space, cppclass, cppobj):
- args = [_Arg(h=cppclass.handle), _Arg(h=cppobj)]
+ args = [_ArgH(cppclass.handle), _ArgH(cppobj)]
return rffi.cast(C_TYPE, space.uint_w(call_capi(space, 'actual_class', args)))
# memory management ----------------------------------------------------------
def c_allocate(space, cppclass):
- return _cdata_to_cobject(space, call_capi(space, 'allocate', [_Arg(h=cppclass.handle)]))
+ return _cdata_to_cobject(space, call_capi(space, 'allocate', [_ArgH(cppclass.handle)]))
def c_deallocate(space, cppclass, cppobject):
- call_capi(space, 'deallocate', [_Arg(h=cppclass.handle), _Arg(h=cppobject)])
+ call_capi(space, 'deallocate', [_ArgH(cppclass.handle), _ArgH(cppobject)])
def c_destruct(space, cppclass, cppobject):
- call_capi(space, 'destruct', [_Arg(h=cppclass.handle), _Arg(h=cppobject)])
+ call_capi(space, 'destruct', [_ArgH(cppclass.handle), _ArgH(cppobject)])
# method/function dispatching ------------------------------------------------
def c_call_v(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
call_capi(space, 'call_v', args)
def c_call_b(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.UCHAR, space.c_uint_w(call_capi(space, 'call_b', args)))
def c_call_c(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.CHAR, space.str_w(call_capi(space, 'call_c', args))[0])
def c_call_h(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.SHORT, space.int_w(call_capi(space, 'call_h', args)))
def c_call_i(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.INT, space.c_int_w(call_capi(space, 'call_i', args)))
def c_call_l(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.LONG, space.int_w(call_capi(space, 'call_l', args)))
def c_call_ll(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.LONGLONG, space.r_longlong_w(call_capi(space, 'call_ll', args)))
def c_call_f(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.FLOAT, r_singlefloat(space.float_w(call_capi(space, 'call_f', args))))
def c_call_d(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return rffi.cast(rffi.DOUBLE, space.float_w(call_capi(space, 'call_d', args)))
def c_call_r(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return _cdata_to_ptr(space, call_capi(space, 'call_r', args))
def c_call_s(space, cppmethod, cppobject, nargs, cargs):
length = lltype.malloc(rffi.SIZE_TP.TO, 1, flavor='raw')
try:
w_cstr = call_capi(space, 'call_s',
- [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs),
- _Arg(vp=rffi.cast(rffi.VOIDP, length))])
+ [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs),
+ _ArgP(rffi.cast(rffi.VOIDP, length))])
cstr_len = intmask(length[0])
finally:
lltype.free(length, flavor='raw')
return _cdata_to_ccharp(space, w_cstr), cstr_len
def c_constructor(space, cppmethod, cppobject, nargs, cargs):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs)]
return _cdata_to_cobject(space, call_capi(space, 'constructor', args))
def c_call_o(space, cppmethod, cppobject, nargs, cargs, cppclass):
- args = [_Arg(h=cppmethod), _Arg(h=cppobject), _Arg(l=nargs), _Arg(vp=cargs), _Arg(h=cppclass.handle)]
+ args = [_ArgH(cppmethod), _ArgH(cppobject), _ArgL(nargs), _ArgP(cargs), _ArgH(cppclass.handle)]
return _cdata_to_cobject(space, call_capi(space, 'call_o', args))
def c_get_function_address(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return rffi.cast(C_FUNC_PTR,
_cdata_to_ptr(space, call_capi(space, 'get_function_address', args)))
# handling of function argument buffer ---------------------------------------
def c_allocate_function_args(space, size):
- return _cdata_to_ptr(space, call_capi(space, 'allocate_function_args', [_Arg(l=size)]))
+ return _cdata_to_ptr(space, call_capi(space, 'allocate_function_args', [_ArgL(size)]))
def c_deallocate_function_args(space, cargs):
- call_capi(space, 'deallocate_function_args', [_Arg(vp=cargs)])
+ call_capi(space, 'deallocate_function_args', [_ArgP(cargs)])
def c_function_arg_sizeof(space):
state = space.fromcache(State)
return state.c_sizeof_farg
@@ -388,34 +413,34 @@
# scope reflection information -----------------------------------------------
def c_is_namespace(space, scope):
- return space.bool_w(call_capi(space, 'is_namespace', [_Arg(h=scope)]))
+ return space.bool_w(call_capi(space, 'is_namespace', [_ArgH(scope)]))
def c_is_template(space, name):
- return space.bool_w(call_capi(space, 'is_template', [_Arg(s=name)]))
+ return space.bool_w(call_capi(space, 'is_template', [_ArgS(name)]))
def c_is_abstract(space, cpptype):
- return space.bool_w(call_capi(space, 'is_abstract', [_Arg(h=cpptype)]))
+ return space.bool_w(call_capi(space, 'is_abstract', [_ArgH(cpptype)]))
def c_is_enum(space, name):
- return space.bool_w(call_capi(space, 'is_enum', [_Arg(s=name)]))
+ return space.bool_w(call_capi(space, 'is_enum', [_ArgS(name)]))
# type/class reflection information ------------------------------------------
def c_final_name(space, cpptype):
- return charp2str_free(space, call_capi(space, 'final_name', [_Arg(h=cpptype)]))
+ return charp2str_free(space, call_capi(space, 'final_name', [_ArgH(cpptype)]))
def c_scoped_final_name(space, cpptype):
- return charp2str_free(space, call_capi(space, 'scoped_final_name', [_Arg(h=cpptype)]))
+ return charp2str_free(space, call_capi(space, 'scoped_final_name', [_ArgH(cpptype)]))
def c_has_complex_hierarchy(space, handle):
- return space.bool_w(call_capi(space, 'has_complex_hierarchy', [_Arg(h=handle)]))
+ return space.bool_w(call_capi(space, 'has_complex_hierarchy', [_ArgH(handle)]))
def c_num_bases(space, cppclass):
- return space.int_w(call_capi(space, 'num_bases', [_Arg(h=cppclass.handle)]))
+ return space.int_w(call_capi(space, 'num_bases', [_ArgH(cppclass.handle)]))
def c_base_name(space, cppclass, base_index):
- args = [_Arg(h=cppclass.handle), _Arg(l=base_index)]
+ args = [_ArgH(cppclass.handle), _ArgL(base_index)]
return charp2str_free(space, call_capi(space, 'base_name', args))
def c_is_subtype(space, derived, base):
jit.promote(base)
if derived == base:
return bool(1)
- return space.bool_w(call_capi(space, 'is_subtype', [_Arg(h=derived.handle), _Arg(h=base.handle)]))
+ return space.bool_w(call_capi(space, 'is_subtype', [_ArgH(derived.handle), _ArgH(base.handle)]))
def _c_base_offset(space, derived_h, base_h, address, direction):
- args = [_Arg(h=derived_h), _Arg(h=base_h), _Arg(h=address), _Arg(l=direction)]
+ args = [_ArgH(derived_h), _ArgH(base_h), _ArgH(address), _ArgL(direction)]
return _cdata_to_ptrdiff_t(space, call_capi(space, 'base_offset', args))
def c_base_offset(space, derived, base, address, direction):
if derived == base:
@@ -426,13 +451,13 @@
# method/function reflection information -------------------------------------
def c_num_methods(space, cppscope):
- args = [_Arg(h=cppscope.handle)]
+ args = [_ArgH(cppscope.handle)]
return space.int_w(call_capi(space, 'num_methods', args))
def c_method_index_at(space, cppscope, imethod):
- args = [_Arg(h=cppscope.handle), _Arg(l=imethod)]
+ args = [_ArgH(cppscope.handle), _ArgL(imethod)]
return space.int_w(call_capi(space, 'method_index_at', args))
def c_method_indices_from_name(space, cppscope, name):
- args = [_Arg(h=cppscope.handle), _Arg(s=name)]
+ args = [_ArgH(cppscope.handle), _ArgS(name)]
indices = rffi.cast(C_INDEX_ARRAY,
_cdata_to_ptr(space, call_capi(space, 'method_indices_from_name', args)))
if not indices:
@@ -448,91 +473,91 @@
return py_indices
def c_method_name(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return charp2str_free(space, call_capi(space, 'method_name', args))
def c_method_result_type(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return charp2str_free(space, call_capi(space, 'method_result_type', args))
def c_method_num_args(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return space.int_w(call_capi(space, 'method_num_args', args))
def c_method_req_args(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return space.int_w(call_capi(space, 'method_req_args', args))
def c_method_arg_type(space, cppscope, index, arg_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index), _Arg(l=arg_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index), _ArgL(arg_index)]
return charp2str_free(space, call_capi(space, 'method_arg_type', args))
def c_method_arg_default(space, cppscope, index, arg_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index), _Arg(l=arg_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index), _ArgL(arg_index)]
return charp2str_free(space, call_capi(space, 'method_arg_default', args))
def c_method_signature(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return charp2str_free(space, call_capi(space, 'method_signature', args))
def c_method_is_template(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return space.bool_w(call_capi(space, 'method_is_template', args))
def _c_method_num_template_args(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return space.int_w(call_capi(space, 'method_num_template_args', args))
def c_template_args(space, cppscope, index):
nargs = _c_method_num_template_args(space, cppscope, index)
- arg1 = _Arg(h=cppscope.handle)
- arg2 = _Arg(l=index)
+ arg1 = _ArgH(cppscope.handle)
+ arg2 = _ArgL(index)
args = [c_resolve_name(space, charp2str_free(space,
- call_capi(space, 'method_template_arg_name', [arg1, arg2, _Arg(l=iarg)]))
+ call_capi(space, 'method_template_arg_name', [arg1, arg2, _ArgL(iarg)]))
) for iarg in range(nargs)]
return args
def c_get_method(space, cppscope, index):
- args = [_Arg(h=cppscope.handle), _Arg(l=index)]
+ args = [_ArgH(cppscope.handle), _ArgL(index)]
return rffi.cast(C_METHOD, space.uint_w(call_capi(space, 'get_method', args)))
def c_get_global_operator(space, nss, lc, rc, op):
if nss is not None:
- args = [_Arg(h=nss.handle), _Arg(h=lc.handle), _Arg(h=rc.handle), _Arg(s=op)]
+ args = [_ArgH(nss.handle), _ArgH(lc.handle), _ArgH(rc.handle), _ArgS(op)]
return rffi.cast(WLAVC_INDEX, space.int_w(call_capi(space, 'get_global_operator', args)))
return rffi.cast(WLAVC_INDEX, -1)
# method properties ----------------------------------------------------------
def c_is_constructor(space, cppclass, index):
- args = [_Arg(h=cppclass.handle), _Arg(l=index)]
+ args = [_ArgH(cppclass.handle), _ArgL(index)]
return space.bool_w(call_capi(space, 'is_constructor', args))
def c_is_staticmethod(space, cppclass, index):
- args = [_Arg(h=cppclass.handle), _Arg(l=index)]
+ args = [_ArgH(cppclass.handle), _ArgL(index)]
return space.bool_w(call_capi(space, 'is_staticmethod', args))
# data member reflection information -----------------------------------------
def c_num_datamembers(space, cppscope):
- return space.int_w(call_capi(space, 'num_datamembers', [_Arg(h=cppscope.handle)]))
+ return space.int_w(call_capi(space, 'num_datamembers', [_ArgH(cppscope.handle)]))
def c_datamember_name(space, cppscope, datamember_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=datamember_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(datamember_index)]
return charp2str_free(space, call_capi(space, 'datamember_name', args))
def c_datamember_type(space, cppscope, datamember_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=datamember_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(datamember_index)]
return charp2str_free(space, call_capi(space, 'datamember_type', args))
def c_datamember_offset(space, cppscope, datamember_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=datamember_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(datamember_index)]
return _cdata_to_ptrdiff_t(space, call_capi(space, 'datamember_offset', args))
def c_datamember_index(space, cppscope, name):
- args = [_Arg(h=cppscope.handle), _Arg(s=name)]
+ args = [_ArgH(cppscope.handle), _ArgS(name)]
return space.int_w(call_capi(space, 'datamember_index', args))
# data member properties -----------------------------------------------------
def c_is_publicdata(space, cppscope, datamember_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=datamember_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(datamember_index)]
return space.bool_w(call_capi(space, 'is_publicdata', args))
def c_is_staticdata(space, cppscope, datamember_index):
- args = [_Arg(h=cppscope.handle), _Arg(l=datamember_index)]
+ args = [_ArgH(cppscope.handle), _ArgL(datamember_index)]
return space.bool_w(call_capi(space, 'is_staticdata', args))
# misc helpers ---------------------------------------------------------------
def c_strtoll(space, svalue):
- return space.r_longlong_w(call_capi(space, 'strtoll', [_Arg(s=svalue)]))
+ return space.r_longlong_w(call_capi(space, 'strtoll', [_ArgS(svalue)]))
def c_strtoull(space, svalue):
- return space.r_ulonglong_w(call_capi(space, 'strtoull', [_Arg(s=svalue)]))
+ return space.r_ulonglong_w(call_capi(space, 'strtoull', [_ArgS(svalue)]))
def c_free(space, voidp):
- call_capi(space, 'free', [_Arg(vp=voidp)])
+ call_capi(space, 'free', [_ArgP(voidp)])
def charp2str_free(space, cdata):
charp = rffi.cast(rffi.CCHARP, _cdata_to_ptr(space, cdata))
@@ -542,26 +567,26 @@
def c_charp2stdstring(space, svalue, sz):
return _cdata_to_cobject(space, call_capi(space, 'charp2stdstring',
- [_Arg(s=svalue), _Arg(h=rffi.cast(rffi.ULONG, sz))]))
+ [_ArgS(svalue), _ArgH(rffi.cast(rffi.ULONG, sz))]))
def c_stdstring2charp(space, cppstr):
sz = lltype.malloc(rffi.SIZE_TP.TO, 1, flavor='raw')
try:
w_cstr = call_capi(space, 'stdstring2charp',
- [_Arg(h=cppstr), _Arg(vp=rffi.cast(rffi.VOIDP, sz))])
+ [_ArgH(cppstr), _ArgP(rffi.cast(rffi.VOIDP, sz))])
cstr_len = intmask(sz[0])
finally:
lltype.free(sz, flavor='raw')
return rffi.charpsize2str(_cdata_to_ccharp(space, w_cstr), cstr_len)
def c_stdstring2stdstring(space, cppobject):
- return _cdata_to_cobject(space, call_capi(space, 'stdstring2stdstring', [_Arg(h=cppobject)]))
+ return _cdata_to_cobject(space, call_capi(space, 'stdstring2stdstring', [_ArgH(cppobject)]))
def c_stdvector_valuetype(space, pystr):
- return charp2str_free(space, call_capi(space, 'stdvector_valuetype', [_Arg(s=pystr)]))
+ return charp2str_free(space, call_capi(space, 'stdvector_valuetype', [_ArgS(pystr)]))
def c_stdvector_valuetype(space, pystr):
- return charp2str_free(space, call_capi(space, 'stdvector_valuetype', [_Arg(s=pystr)]))
+ return charp2str_free(space, call_capi(space, 'stdvector_valuetype', [_ArgS(pystr)]))
def c_stdvector_valuesize(space, pystr):
- return _cdata_to_size_t(space, call_capi(space, 'stdvector_valuesize', [_Arg(s=pystr)]))
+ return _cdata_to_size_t(space, call_capi(space, 'stdvector_valuesize', [_ArgS(pystr)]))
# TODO: factor these out ...
More information about the pypy-commit
mailing list