Skip to content
Snippets Groups Projects
Select Git revision
  • ae491055fae927dbdfabeea69ffee166a9720a68
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

objint.h

Blame
  • user avatar
    Damien George authored
    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.
    88d7bba9
    History
    objint.h 970 B
    typedef struct _mp_obj_int_t {
        mp_obj_base_t base;
    #if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_LONGLONG
        mp_longint_impl_t val;
    #elif MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_MPZ
        mpz_t mpz;
    #endif
    } 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);
    mp_obj_t mp_obj_int_binary_op_extra_cases(int op, mp_obj_t lhs_in, mp_obj_t rhs_in);