diff options
author | Damien George <damien.p.george@gmail.com> | 2014-04-08 23:30:46 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-04-08 23:30:46 +0100 |
commit | 88d7bba961cb38c594d72b6be5847cb1106f91b2 (patch) | |
tree | 4d49fb9d1c61148dde6e3429ccb950449e3f3581 /py/objint.h | |
parent | 803b9263ab1049d19d62d9a09e5f82084b7afa41 (diff) |
py: Make it so that printing a small int does not allocate heap memory.
With the implementation of proper string formatting, code to print a
small int was delegated to mpz_as_str_inpl (after first converting the
small int to an mpz using stack memory). But mpz_as_str_inpl allocates
heap memory to do the conversion, so small ints needed heap memory just
to be printed.
This fix has a separate function to print small ints, which does not
allocate heap, and allocates less stack.
String formatting, printf and pfenv are now large beasts, with some
semi-duplicated code.
Diffstat (limited to 'py/objint.h')
-rw-r--r-- | py/objint.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/py/objint.h b/py/objint.h index 7ee476269..5b21d55fe 100644 --- a/py/objint.h +++ b/py/objint.h @@ -10,6 +10,8 @@ typedef struct _mp_obj_int_t { void mp_obj_int_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind); char *mp_obj_int_formatted(char **buf, int *buf_size, int *fmt_size, mp_obj_t self_in, int base, const char *prefix, char base_char, char comma); +char *mp_obj_int_formatted_impl(char **buf, int *buf_size, int *fmt_size, mp_obj_t self_in, + int base, const char *prefix, char base_char, char comma); bool mp_obj_int_is_positive(mp_obj_t self_in); mp_obj_t mp_obj_int_unary_op(int op, mp_obj_t o_in); mp_obj_t mp_obj_int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in); |