[pypy-commit] pypy reflex-support: const builtin& for CINT backend
wlav
noreply at buildbot.pypy.org
Fri Apr 13 05:43:26 CEST 2012
Author: Wim Lavrijsen <WLavrijsen at 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;
+
+ }
}
}
}
More information about the pypy-commit
mailing list