@@ -398,21 +398,24 @@ STATIC mp_parse_node_t make_node_const_object(parser_t *parser, size_t src_line,
398
398
return (mp_parse_node_t )pn ;
399
399
}
400
400
401
- STATIC void push_result_token (parser_t * parser ) {
401
+ STATIC void push_result_token (parser_t * parser , const rule_t * rule ) {
402
402
mp_parse_node_t pn ;
403
403
mp_lexer_t * lex = parser -> lexer ;
404
404
if (lex -> tok_kind == MP_TOKEN_NAME ) {
405
405
qstr id = qstr_from_strn (lex -> vstr .buf , lex -> vstr .len );
406
406
#if MICROPY_COMP_CONST
407
- // lookup identifier in table of dynamic constants
408
- mp_map_elem_t * elem = mp_map_lookup (& parser -> consts , MP_OBJ_NEW_QSTR (id ), MP_MAP_LOOKUP );
409
- if (elem != NULL ) {
407
+ // if name is a standalone identifier, look it up in the table of dynamic constants
408
+ mp_map_elem_t * elem ;
409
+ if (rule -> rule_id == RULE_atom
410
+ && (elem = mp_map_lookup (& parser -> consts , MP_OBJ_NEW_QSTR (id ), MP_MAP_LOOKUP )) != NULL ) {
410
411
pn = mp_parse_node_new_leaf (MP_PARSE_NODE_SMALL_INT , MP_OBJ_SMALL_INT_VALUE (elem -> value ));
411
- } else
412
- #endif
413
- {
412
+ } else {
414
413
pn = mp_parse_node_new_leaf (MP_PARSE_NODE_ID , id );
415
414
}
415
+ #else
416
+ (void )rule ;
417
+ pn = mp_parse_node_new_leaf (MP_PARSE_NODE_ID , id );
418
+ #endif
416
419
} else if (lex -> tok_kind == MP_TOKEN_INTEGER ) {
417
420
mp_obj_t o = mp_parse_num_integer (lex -> vstr .buf , lex -> vstr .len , 0 , lex );
418
421
if (MP_OBJ_IS_SMALL_INT (o )) {
@@ -765,7 +768,7 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
765
768
uint16_t kind = rule -> arg [i ] & RULE_ARG_KIND_MASK ;
766
769
if (kind == RULE_ARG_TOK ) {
767
770
if (lex -> tok_kind == (rule -> arg [i ] & RULE_ARG_ARG_MASK )) {
768
- push_result_token (& parser );
771
+ push_result_token (& parser , rule );
769
772
mp_lexer_to_next (lex );
770
773
goto next_rule ;
771
774
}
@@ -810,7 +813,7 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
810
813
if (lex -> tok_kind == tok_kind ) {
811
814
// matched token
812
815
if (tok_kind == MP_TOKEN_NAME ) {
813
- push_result_token (& parser );
816
+ push_result_token (& parser , rule );
814
817
}
815
818
mp_lexer_to_next (lex );
816
819
} else {
@@ -950,7 +953,7 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
950
953
if (i & 1 & n ) {
951
954
// separators which are tokens are not pushed to result stack
952
955
} else {
953
- push_result_token (& parser );
956
+ push_result_token (& parser , rule );
954
957
}
955
958
mp_lexer_to_next (lex );
956
959
// got element of list, so continue parsing list
0 commit comments