[pypy-commit] pypy cling-support: give up on long double for now ... this just doesn't work :(
wlav
pypy.commits at gmail.com
Tue Dec 13 18:53:21 EST 2016
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: cling-support
Changeset: r89051:33831e11eab1
Date: 2016-12-13 13:00 -0800
http://bitbucket.org/pypy/pypy/changeset/33831e11eab1/
Log: give up on long double for now ... this just doesn't work :(
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
@@ -386,14 +386,7 @@
fval = float(rfloat.rstring_to_float(default))
else:
fval = float(0.)
- # see ffitypes.LongDoubleTypeMixin: long double not really
- # supported in rffi
- self.default = fval #r_longfloat(fval)
-
- def from_memory(self, space, w_obj, w_pycppclass, offset):
- address = self._get_raw_address(space, w_obj, offset)
- rffiptr = rffi.cast(self.c_ptrtype, address)
- return self._wrap_object(space, rffiptr[0])
+ self.default = r_longfloat(fval)
class ConstLongDoubleRefConverter(ConstRefNumericTypeConverterMixin, LongDoubleConverter):
_immutable_fields_ = ['typecode']
@@ -746,8 +739,8 @@
_converters["const float&"] = ConstFloatRefConverter
_converters["double"] = DoubleConverter
_converters["const double&"] = ConstDoubleRefConverter
-_converters["long double"] = LongDoubleConverter
-_converters["const long double&"] = ConstLongDoubleRefConverter
+#_converters["long double"] = LongDoubleConverter
+#_converters["const long double&"] = ConstLongDoubleRefConverter
_converters["const char*"] = CStringConverter
_converters["void*"] = VoidPtrConverter
_converters["void**"] = VoidPtrPtrConverter
@@ -841,7 +834,7 @@
('Q', rffi.sizeof(rffi.ULONGLONG), ("unsigned long long", "unsigned long long int", "ULong64_t")),
('f', rffi.sizeof(rffi.FLOAT), ("float",)),
('d', rffi.sizeof(rffi.DOUBLE), ("double",)),
- ('g', rffi.sizeof(rffi.LONGDOUBLE), ("long double",)),
+# ('g', rffi.sizeof(rffi.LONGDOUBLE), ("long double",)),
)
for tcode, tsize, names in array_info:
diff --git a/pypy/module/cppyy/executor.py b/pypy/module/cppyy/executor.py
--- a/pypy/module/cppyy/executor.py
+++ b/pypy/module/cppyy/executor.py
@@ -329,7 +329,7 @@
(rffi.ULONGLONG, capi.c_call_ll, ("unsigned long long", "unsigned long long int", "ULong64_t")),
(rffi.FLOAT, capi.c_call_f, ("float",)),
(rffi.DOUBLE, capi.c_call_d, ("double",)),
- (rffi.LONGDOUBLE, capi.c_call_ld, ("long double",)),
+# (rffi.LONGDOUBLE, capi.c_call_ld, ("long double",)),
)
for c_type, stub, names in type_info:
diff --git a/pypy/module/cppyy/ffitypes.py b/pypy/module/cppyy/ffitypes.py
--- a/pypy/module/cppyy/ffitypes.py
+++ b/pypy/module/cppyy/ffitypes.py
@@ -239,25 +239,20 @@
_mixin_ = True
_immutable_fields_ = ['c_type', 'c_ptrtype', 'typecode']
- # long double is not really supported, so work with normal
- # double instead; doing it here keeps this localized
- c_type = rffi.DOUBLE #rffi.LONGDOUBLE
- c_ptrtype = rffi.DOUBLEP #rffi.LONGDOUBLEP
+ c_type = rffi.LONGDOUBLE
+ c_ptrtype = rffi.LONGDOUBLEP
typecode = 'g'
+ # long double is not really supported ...
def _unwrap_object(self, space, w_obj):
- #return r_longfloat(space.float_w(w_obj))
- return float(space.float_w(w_obj))
+ return r_longfloat(space.float_w(w_obj))
def _wrap_object(self, space, obj):
- # return space.wrap(obj)
- dbl = rffi.cast(rffi.DOUBLE, obj)
- return space.wrap(float(dbl))
+ return space.wrap(obj)
def cffi_type(self, space):
state = space.fromcache(State)
- #return state.c_ldouble
- return state.c_double
+ return state.c_ldouble
def typeid(c_type):
"NOT_RPYTHON"
diff --git a/pypy/module/cppyy/test/test_datatypes.py b/pypy/module/cppyy/test/test_datatypes.py
--- a/pypy/module/cppyy/test/test_datatypes.py
+++ b/pypy/module/cppyy/test/test_datatypes.py
@@ -64,9 +64,9 @@
assert round(c.m_double + 77., 11) == 0
assert round(c.get_double_cr() + 77., 11) == 0
assert round(c.get_double_r() + 77., 11) == 0
- assert round(c.m_ldouble + 88., 24) == 0
- assert round(c.get_ldouble_cr() + 88., 24) == 0
- assert round(c.get_ldouble_r() + 88., 24) == 0
+ #assert round(c.m_ldouble + 88., 24) == 0
+ #assert round(c.get_ldouble_cr() + 88., 24) == 0
+ #assert round(c.get_ldouble_r() + 88., 24) == 0
assert round(c.m_double + 77., 8) == 0
# reading of enum types
More information about the pypy-commit
mailing list