summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-11-30 23:02:50 +1100
committerDamien George <damien.p.george@gmail.com>2019-12-12 20:15:28 +1100
commitff58961944f4f2380e9610a4d18c53c08f68060e (patch)
tree2178695ed6d66fadeb53a053111b0c244f48dd7a /py
parent9ac949cdbd78d15f5edeaa651859659e8b382181 (diff)
downloadmicropython-ff58961944f4f2380e9610a4d18c53c08f68060e.tar.gz
micropython-ff58961944f4f2380e9610a4d18c53c08f68060e.zip
py/nativeglue: Add float new/get functions with both single and double.
Diffstat (limited to 'py')
-rw-r--r--py/nativeglue.c46
-rw-r--r--py/nativeglue.h4
2 files changed, 50 insertions, 0 deletions
diff --git a/py/nativeglue.c b/py/nativeglue.c
index a88d8c1b9b..1a7f92f945 100644
--- a/py/nativeglue.c
+++ b/py/nativeglue.c
@@ -211,6 +211,48 @@ STATIC bool mp_native_yield_from(mp_obj_t gen, mp_obj_t send_value, mp_obj_t *re
return false;
}
+#if MICROPY_PY_BUILTINS_FLOAT
+
+STATIC mp_obj_t mp_obj_new_float_from_f(float f) {
+ return mp_obj_new_float((mp_float_t)f);
+}
+
+STATIC mp_obj_t mp_obj_new_float_from_d(double d) {
+ return mp_obj_new_float((mp_float_t)d);
+}
+
+STATIC float mp_obj_get_float_to_f(mp_obj_t o) {
+ return (float)mp_obj_get_float(o);
+}
+
+STATIC double mp_obj_get_float_to_d(mp_obj_t o) {
+ return (double)mp_obj_get_float(o);
+}
+
+#else
+
+STATIC mp_obj_t mp_obj_new_float_from_f(float f) {
+ (void)f;
+ mp_raise_msg(&mp_type_RuntimeError, "float unsupported");
+}
+
+STATIC mp_obj_t mp_obj_new_float_from_d(double d) {
+ (void)d;
+ mp_raise_msg(&mp_type_RuntimeError, "float unsupported");
+}
+
+STATIC float mp_obj_get_float_to_f(mp_obj_t o) {
+ (void)o;
+ mp_raise_msg(&mp_type_RuntimeError, "float unsupported");
+}
+
+STATIC double mp_obj_get_float_to_d(mp_obj_t o) {
+ (void)o;
+ mp_raise_msg(&mp_type_RuntimeError, "float unsupported");
+}
+
+#endif
+
// these must correspond to the respective enum in runtime0.h
const mp_fun_table_t mp_fun_table = {
&mp_const_none_obj,
@@ -282,6 +324,10 @@ const mp_fun_table_t mp_fun_table = {
mp_obj_new_str,
mp_obj_new_bytes,
mp_obj_new_bytearray_by_ref,
+ mp_obj_new_float_from_f,
+ mp_obj_new_float_from_d,
+ mp_obj_get_float_to_f,
+ mp_obj_get_float_to_d,
mp_get_buffer_raise,
mp_get_stream_raise,
&mp_plat_print,
diff --git a/py/nativeglue.h b/py/nativeglue.h
index 9abae89df2..021e7a8ecb 100644
--- a/py/nativeglue.h
+++ b/py/nativeglue.h
@@ -150,6 +150,10 @@ typedef struct _mp_fun_table_t {
mp_obj_t (*obj_new_str)(const char* data, size_t len);
mp_obj_t (*obj_new_bytes)(const byte* data, size_t len);
mp_obj_t (*obj_new_bytearray_by_ref)(size_t n, void *items);
+ mp_obj_t (*obj_new_float_from_f)(float f);
+ mp_obj_t (*obj_new_float_from_d)(double d);
+ float (*obj_get_float_to_f)(mp_obj_t o);
+ double (*obj_get_float_to_d)(mp_obj_t o);
void (*get_buffer_raise)(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags);
const mp_stream_p_t *(*get_stream_raise)(mp_obj_t self_in, int flags);
const mp_print_t *plat_print;