Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r54322:6c02358185a1 Date: 2012-04-12 12:41 -0700 http://bitbucket.org/pypy/pypy/changeset/6c02358185a1/
Log: const builtin& for CINT backend diff --git a/pypy/module/cppyy/converter.py b/pypy/module/cppyy/converter.py --- a/pypy/module/cppyy/converter.py +++ b/pypy/module/cppyy/converter.py @@ -338,6 +338,13 @@ class ConstLongRefConverter(LongConverter): _immutable_ = True libffitype = lltype.nullptr(clibffi.FFI_TYPE_P.TO) + typecode = 'r' + + def convert_argument(self, space, w_obj, address): + x = rffi.cast(self.rffiptype, address) + x[0] = self._unwrap_object(space, w_obj) + ba = rffi.cast(rffi.CCHARP, address) + ba[capi.c_function_arg_typeoffset()] = self.typecode class UnsignedLongConverter(IntTypeConverterMixin, TypeConverter): _immutable_ = True @@ -378,6 +385,7 @@ class ConstFloatRefConverter(FloatConverter): _immutable_ = True libffitype = lltype.nullptr(clibffi.FFI_TYPE_P.TO) + typecode = 'F' class DoubleConverter(FloatTypeConverterMixin, TypeConverter): _immutable_ = True @@ -397,6 +405,7 @@ class ConstDoubleRefConverter(DoubleConverter): _immutable_ = True libffitype = lltype.nullptr(clibffi.FFI_TYPE_P.TO) + typecode = 'D' class CStringConverter(TypeConverter): diff --git a/pypy/module/cppyy/src/cintcwrapper.cxx b/pypy/module/cppyy/src/cintcwrapper.cxx --- a/pypy/module/cppyy/src/cintcwrapper.cxx +++ b/pypy/module/cppyy/src/cintcwrapper.cxx @@ -167,15 +167,33 @@ for (int i = 0; i < libp->paran; ++i) { libp->para[i].ref = libp->para[i].obj.i; const char partype = libp->para[i].type; - if (partype == 'p') + switch (partype) { + case 'p': { libp->para[i].obj.i = (long)&libp->para[i].ref; - else if (partype == 'r') + break; + } + case 'r': { libp->para[i].ref = (long)&libp->para[i].obj.i; - else if (partype == 'f') { + break; + } + case 'f': { assert(sizeof(float) <= sizeof(long)); long val = libp->para[i].obj.i; void* pval = (void*)&val; libp->para[i].obj.d = *(float*)pval; + break; + } + case 'F': { + libp->para[i].ref = (long)&libp->para[i].obj.i; + libp->para[i].type = 'f'; + break; + } + case 'D': { + libp->para[i].ref = (long)&libp->para[i].obj.i; + libp->para[i].type = 'd'; + break; + + } } } } _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit