diff options
author | Damien George <damien.p.george@gmail.com> | 2014-03-22 20:54:01 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-03-22 20:54:01 +0000 |
commit | eabdf6718a8d9d10c810b8cd440b82a11d517205 (patch) | |
tree | 955749df1f3f5ba17d5dac9fc742606dc5d0794a /py | |
parent | 8138205bea96afb6b59e3147fbaab754cb218ea2 (diff) | |
download | micropython-eabdf6718a8d9d10c810b8cd440b82a11d517205.tar.gz micropython-eabdf6718a8d9d10c810b8cd440b82a11d517205.zip |
py: Add function to convert long int to float.
Diffstat (limited to 'py')
-rw-r--r-- | py/obj.c | 2 | ||||
-rw-r--r-- | py/obj.h | 3 | ||||
-rw-r--r-- | py/objint.c | 6 | ||||
-rw-r--r-- | py/objint_longlong.c | 16 | ||||
-rw-r--r-- | py/objint_mpz.c | 16 |
5 files changed, 39 insertions, 4 deletions
@@ -176,6 +176,8 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) { return 1; } else if (MP_OBJ_IS_SMALL_INT(arg)) { return MP_OBJ_SMALL_INT_VALUE(arg); + } else if (MP_OBJ_IS_TYPE(arg, &int_type)) { + return mp_obj_int_as_float(arg); } else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) { return mp_obj_float_get(arg); } else { @@ -330,6 +330,9 @@ void mp_obj_cell_set(mp_obj_t self_in, mp_obj_t obj); extern const mp_obj_type_t int_type; // For long int, returns value truncated to machine_int_t machine_int_t mp_obj_int_get(mp_obj_t self_in); +#if MICROPY_ENABLE_FLOAT +mp_float_t mp_obj_int_as_float(mp_obj_t self_in); +#endif // Will rains exception if value doesn't fit into machine_int_t machine_int_t mp_obj_int_get_checked(mp_obj_t self_in); diff --git a/py/objint.c b/py/objint.c index 9cba1ce744..70f44ac1e5 100644 --- a/py/objint.c +++ b/py/objint.c @@ -101,6 +101,12 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) { return MP_OBJ_SMALL_INT_VALUE(self_in); } +#if MICROPY_ENABLE_FLOAT +mp_float_t mp_obj_int_as_float(mp_obj_t self_in) { + return MP_OBJ_SMALL_INT_VALUE(self_in); +} +#endif + #endif // MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_NONE const mp_obj_type_t int_type = { diff --git a/py/objint_longlong.c b/py/objint_longlong.c index 6a0dfa70e9..b066fa544d 100644 --- a/py/objint_longlong.c +++ b/py/objint_longlong.c @@ -153,9 +153,10 @@ mp_obj_t mp_obj_new_int_from_long_str(const char *s) { machine_int_t mp_obj_int_get(mp_obj_t self_in) { if (MP_OBJ_IS_SMALL_INT(self_in)) { return MP_OBJ_SMALL_INT_VALUE(self_in); + } else { + mp_obj_int_t *self = self_in; + return self->val; } - mp_obj_int_t *self = self_in; - return self->val; } machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) { @@ -163,4 +164,15 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) { return mp_obj_int_get(self_in); } +#if MICROPY_ENABLE_FLOAT +mp_float_t mp_obj_int_as_float(mp_obj_t self_in) { + if (MP_OBJ_IS_SMALL_INT(self_in)) { + return MP_OBJ_SMALL_INT_VALUE(self_in); + } else { + mp_obj_int_t *self = self_in; + return self->val; + } +} +#endif + #endif diff --git a/py/objint_mpz.c b/py/objint_mpz.c index 39ea7ca115..05e300ddc9 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -215,9 +215,10 @@ mp_obj_t mp_obj_new_int_from_long_str(const char *str) { machine_int_t mp_obj_int_get(mp_obj_t self_in) { if (MP_OBJ_IS_SMALL_INT(self_in)) { return MP_OBJ_SMALL_INT_VALUE(self_in); + } else { + mp_obj_int_t *self = self_in; + return mpz_as_int(&self->mpz); } - mp_obj_int_t *self = self_in; - return mpz_as_int(&self->mpz); } machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) { @@ -225,4 +226,15 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) { return mp_obj_int_get(self_in); } +#if MICROPY_ENABLE_FLOAT +mp_float_t mp_obj_int_as_float(mp_obj_t self_in) { + if (MP_OBJ_IS_SMALL_INT(self_in)) { + return MP_OBJ_SMALL_INT_VALUE(self_in); + } else { + mp_obj_int_t *self = self_in; + return mpz_as_float(&self->mpz); + } +} +#endif + #endif |