Author: Wim Lavrijsen <wlavrij...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit