aboutsummaryrefslogtreecommitdiff
path: root/py/objint.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-03-14 14:54:20 +1100
committerDamien George <damien.p.george@gmail.com>2017-03-14 14:54:20 +1100
commitd1ae6ae080e1475b50aa2c6580d1ea588cfbdf64 (patch)
treed981d364e5e7c83bc8ac2058e2202429b0e30e51 /py/objint.c
parent4f29b315a6900445d2139652914f81168763816f (diff)
py/objint: Allow to print long-long ints without using the heap.
Some stack is allocated to format ints, and when the int implementation uses long-long there should be additional stack allocated compared with the other cases. This patch uses the existing "fmt_int_t" type to determine the amount of stack to allocate.
Diffstat (limited to 'py/objint.c')
-rw-r--r--py/objint.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/py/objint.c b/py/objint.c
index 2a7e3f3fd..5aa6a95cc 100644
--- a/py/objint.c
+++ b/py/objint.c
@@ -127,11 +127,17 @@ mp_fp_as_int_class_t mp_classify_fp_as_int(mp_float_t val) {
#undef MP_FLOAT_EXP_SHIFT_I32
#endif
+#if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_LONGLONG
+typedef mp_longint_impl_t fmt_int_t;
+#else
+typedef mp_int_t fmt_int_t;
+#endif
+
void mp_obj_int_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
(void)kind;
// The size of this buffer is rather arbitrary. If it's not large
// enough, a dynamic one will be allocated.
- char stack_buf[sizeof(mp_int_t) * 4];
+ char stack_buf[sizeof(fmt_int_t) * 4];
char *buf = stack_buf;
size_t buf_size = sizeof(stack_buf);
size_t fmt_size;
@@ -144,12 +150,6 @@ void mp_obj_int_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t
}
}
-#if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_LONGLONG
-typedef mp_longint_impl_t fmt_int_t;
-#else
-typedef mp_int_t fmt_int_t;
-#endif
-
STATIC const uint8_t log_base2_floor[] = {
0, 1, 1, 2,
2, 2, 2, 3,