From bbf0e2fe120f095ce09fcb7eb631c9fd04bd9760 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 21 Feb 2014 02:04:32 +0200 Subject: [PATCH] parse: Note that fact that parser's small ints are different than VM small int. Specifically, VM's small ints are 31 bit, while parser's only 28. There's already MP_OBJ_FITS_SMALL_INT(), so, for clarity, rename MP_FIT_SMALL_INT() to MP_PARSE_FITS_SMALL_INT(). --- py/compile.c | 2 +- py/parse.c | 2 +- py/parse.h | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/py/compile.c b/py/compile.c index c895b26fa9..ef0130463d 100644 --- a/py/compile.c +++ b/py/compile.c @@ -117,7 +117,7 @@ mp_parse_node_t fold_constants(mp_parse_node_t pn) { assert(0); res = 0; } - if (MP_FIT_SMALL_INT(res)) { + if (MP_PARSE_FITS_SMALL_INT(res)) { pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, res); } } diff --git a/py/parse.c b/py/parse.c index bbab19d352..57d78a05b1 100644 --- a/py/parse.c +++ b/py/parse.c @@ -279,7 +279,7 @@ STATIC void push_result_token(parser_t *parser, const mp_lexer_t *lex) { } if (dec) { pn = mp_parse_node_new_leaf(MP_PARSE_NODE_DECIMAL, qstr_from_strn(str, len)); - } else if (small_int && !overflow && MP_FIT_SMALL_INT(int_val)) { + } else if (small_int && !overflow && MP_PARSE_FITS_SMALL_INT(int_val)) { pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, int_val); } else { pn = mp_parse_node_new_leaf(MP_PARSE_NODE_INTEGER, qstr_from_strn(str, len)); diff --git a/py/parse.h b/py/parse.h index 66efd8a208..6e299ef69e 100644 --- a/py/parse.h +++ b/py/parse.h @@ -14,7 +14,8 @@ struct _mp_lexer_t; // makes sure the top 5 bits of x are all cleared (positive number) or all set (negavite number) // these macros can probably go somewhere else because they are used more than just in the parser #define MP_UINT_HIGH_5_BITS (~((~((machine_uint_t)0)) >> 5)) -#define MP_FIT_SMALL_INT(x) (((((machine_uint_t)(x)) & MP_UINT_HIGH_5_BITS) == 0) || ((((machine_uint_t)(x)) & MP_UINT_HIGH_5_BITS) == MP_UINT_HIGH_5_BITS)) +// parser's small ints are different from VM small int +#define MP_PARSE_FITS_SMALL_INT(x) (((((machine_uint_t)(x)) & MP_UINT_HIGH_5_BITS) == 0) || ((((machine_uint_t)(x)) & MP_UINT_HIGH_5_BITS) == MP_UINT_HIGH_5_BITS)) #define MP_PARSE_NODE_NULL (0) #define MP_PARSE_NODE_ID (0x1)