summaryrefslogtreecommitdiff
path: root/py/objint_longlong.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-08 23:30:46 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-08 23:30:46 +0100
commit88d7bba961cb38c594d72b6be5847cb1106f91b2 (patch)
tree4d49fb9d1c61148dde6e3429ccb950449e3f3581 /py/objint_longlong.c
parent803b9263ab1049d19d62d9a09e5f82084b7afa41 (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.c8
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) {