diff options
author | Damien George <damien.p.george@gmail.com> | 2014-04-08 01:29:53 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-04-08 01:29:53 +0100 |
commit | a12a0f78b0462f9b5e8f3d4cb1b164656f44ad03 (patch) | |
tree | 1d828572cecd5fa90155050ec73a3a9afa52179c /py/pfenv.c | |
parent | 97543c5285b47c765e19d6ab7c08b36630e23c6a (diff) |
py: Rename pfenv_print_int to pfenv_print_mp_int, and add back former.
stmhal relies on pfenv_* to implement its printf. Thus, it needs a
pfenv_print_int which prints a proper 32-bit integer. With latest
change to pfenv, this function became one that took mp_obj_t, and
extracted the integer value from that object.
To fix temporarily, pfenv_print_int has been renamed to
pfenv_print_mp_int (to indicate it takes a mp_obj_t for the int), and
pfenv_print_int has been added (which takes a normal C int). Currently,
pfenv_print_int proxies to pfenv_print_mp_int, but this means it looses
the MSB. Need to find a way to fix this, but the only way I can think
of will duplicate lots of code.
Diffstat (limited to 'py/pfenv.c')
-rw-r--r-- | py/pfenv.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/py/pfenv.c b/py/pfenv.c index ab45328ad..b91390d6d 100644 --- a/py/pfenv.c +++ b/py/pfenv.c @@ -77,11 +77,16 @@ int pfenv_print_strn(const pfenv_t *pfenv, const char *str, unsigned int len, in return len; } +int pfenv_print_int(const pfenv_t *pfenv, int x, int sgn, int base, int base_char, int flags, char fill, int width) { + // XXX this really needs to be a dedicated function, since converting to a mp_int looses the MSB + return pfenv_print_mp_int(pfenv, MP_OBJ_NEW_SMALL_INT((machine_int_t)x), sgn, base, base_char, flags, fill, width); +} + // 32-bits is 10 digits, add 3 for commas, 1 for sign, 1 for terminating null // We can use 16 characters for 32-bit and 32 characters for 64-bit #define INT_BUF_SIZE (sizeof(machine_int_t) * 4) -int pfenv_print_int(const pfenv_t *pfenv, mp_obj_t x, int sgn, int base, int base_char, int flags, char fill, int width) { +int pfenv_print_mp_int(const pfenv_t *pfenv, mp_obj_t x, int sgn, int base, int base_char, int flags, char fill, int width) { if (!MP_OBJ_IS_INT(x)) { // This will convert booleans to int, or raise an error for // non-integer types. |