diff options
author | Damien George <damien@micropython.org> | 2022-03-31 14:26:07 +1100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2022-04-14 22:44:56 +1000 |
commit | e52f14d05772b670847c0692a635a5ec223c5e57 (patch) | |
tree | f98390653c2ef9374c076bf36168c7aa15d737f6 /py/parse.h | |
parent | 42d0bd2c17fd76860c3dc0ef5c62faa48efeb121 (diff) |
py/parse: Factor obj extract code to mp_parse_node_extract_const_object.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/parse.h')
-rw-r--r-- | py/parse.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/py/parse.h b/py/parse.h index 9c327c28b..5531e35cb 100644 --- a/py/parse.h +++ b/py/parse.h @@ -77,9 +77,20 @@ typedef struct _mp_parse_node_struct_t { static inline mp_parse_node_t mp_parse_node_new_small_int(mp_int_t val) { return (mp_parse_node_t)(MP_PARSE_NODE_SMALL_INT | ((mp_uint_t)val << 1)); } + static inline mp_parse_node_t mp_parse_node_new_leaf(size_t kind, mp_int_t arg) { return (mp_parse_node_t)(kind | ((mp_uint_t)arg << 4)); } + +static inline mp_obj_t mp_parse_node_extract_const_object(mp_parse_node_struct_t *pns) { + #if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_D + // nodes are 32-bit pointers, but need to extract 64-bit object + return (uint64_t)pns->nodes[0] | ((uint64_t)pns->nodes[1] << 32); + #else + return (mp_obj_t)pns->nodes[0]; + #endif +} + bool mp_parse_node_is_const_false(mp_parse_node_t pn); bool mp_parse_node_is_const_true(mp_parse_node_t pn); bool mp_parse_node_get_int_maybe(mp_parse_node_t pn, mp_obj_t *o); |