mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 19:50:30 +01:00
all: Fix implicit floating point promotion.
Initially some of these were found building the unix coverage variant on MacOS because that build uses clang and has -Wdouble-promotion enabled, and clang performs more vigorous promotion checks than gcc. Additionally the codebase has been compiled with clang and msvc (the latter with warning level 3), and with MICROPY_FLOAT_IMPL_FLOAT to find the rest of the conversions. Fixes are implemented either as explicit casts, or by using the correct type, or by using one of the utility functions to handle floating point casting; these have been moved from nativeglue.c to the public API.
This commit is contained in:
33
py/obj.h
33
py/obj.h
@@ -820,6 +820,39 @@ void mp_str_print_quoted(const mp_print_t *print, const byte *str_data, size_t s
|
||||
|
||||
#if MICROPY_PY_BUILTINS_FLOAT
|
||||
// float
|
||||
#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
|
||||
static inline float mp_obj_get_float_to_f(mp_obj_t o) {
|
||||
return mp_obj_get_float(o);
|
||||
}
|
||||
|
||||
static inline double mp_obj_get_float_to_d(mp_obj_t o) {
|
||||
return (double)mp_obj_get_float(o);
|
||||
}
|
||||
|
||||
static inline mp_obj_t mp_obj_new_float_from_f(float o) {
|
||||
return mp_obj_new_float(o);
|
||||
}
|
||||
|
||||
static inline mp_obj_t mp_obj_new_float_from_d(double o) {
|
||||
return mp_obj_new_float((mp_float_t)o);
|
||||
}
|
||||
#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
|
||||
static inline float mp_obj_get_float_to_f(mp_obj_t o) {
|
||||
return (float)mp_obj_get_float(o);
|
||||
}
|
||||
|
||||
static inline double mp_obj_get_float_to_d(mp_obj_t o) {
|
||||
return mp_obj_get_float(o);
|
||||
}
|
||||
|
||||
static inline mp_obj_t mp_obj_new_float_from_f(float o) {
|
||||
return mp_obj_new_float((mp_float_t)o);
|
||||
}
|
||||
|
||||
static inline mp_obj_t mp_obj_new_float_from_d(double o) {
|
||||
return mp_obj_new_float(o);
|
||||
}
|
||||
#endif
|
||||
#if MICROPY_FLOAT_HIGH_QUALITY_HASH
|
||||
mp_int_t mp_float_hash(mp_float_t val);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user