diff options
author | Damien George <damien.p.george@gmail.com> | 2015-10-08 23:13:18 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-10-08 23:13:18 +0100 |
commit | 366239b8b9a2fbea3b6eae8dfc7b4a503d427e4c (patch) | |
tree | d41b1bf8fe1323a4d05b2764324a6f072d7ea5f2 /py/parse.c | |
parent | 02041bf2e0f541f67a76ce6e77aad92b896cc18a (diff) | |
download | micropython-366239b8b9a2fbea3b6eae8dfc7b4a503d427e4c.tar.gz micropython-366239b8b9a2fbea3b6eae8dfc7b4a503d427e4c.zip |
py/parse: Factor logic when creating parse node from and-rule.
Diffstat (limited to 'py/parse.c')
-rw-r--r-- | py/parse.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/py/parse.c b/py/parse.c index 64cec79ad4..64acaec441 100644 --- a/py/parse.c +++ b/py/parse.c @@ -625,11 +625,10 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) { num_not_nil += 1; } } - if (emit_rule) { + if (emit_rule || num_not_nil != 1) { + // need to add rule when num_not_nil==0 for, eg, atom_paren, testlist_comp_3b push_result_rule(&parser, rule_src_line, rule, i); - } else if (num_not_nil == 0) { - push_result_rule(&parser, rule_src_line, rule, i); // needed for, eg, atom_paren, testlist_comp_3b - } else if (num_not_nil == 1) { + } else { // single result, leave it on stack mp_parse_node_t pn = MP_PARSE_NODE_NULL; for (mp_uint_t x = 0; x < i; ++x) { @@ -639,8 +638,6 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) { } } push_result_node(&parser, pn); - } else { - push_result_rule(&parser, rule_src_line, rule, i); } break; } |