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_longlong.c | |
| 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_longlong.c')
| -rw-r--r-- | py/objint_longlong.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/py/objint_longlong.c b/py/objint_longlong.c index 332f0bbb8..24435415f 100644 --- a/py/objint_longlong.c +++ b/py/objint_longlong.c @@ -22,6 +22,14 @@ #define SUFFIX "" #endif +bool mp_obj_int_is_positive(mp_obj_t self_in) { + if (MP_OBJ_IS_SMALL_INT(self_in)) { + return MP_OBJ_SMALL_INT_VALUE(self_in) >= 0; + } + mp_obj_int_t *self = self_in; + return self->val >= 0; +} + mp_obj_t mp_obj_int_unary_op(int op, mp_obj_t o_in) { mp_obj_int_t *o = o_in; switch (op) { |
