summaryrefslogtreecommitdiffstatshomepage
path: root/py/parse.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-10-08 23:13:18 +0100
committerDamien George <damien.p.george@gmail.com>2015-10-08 23:13:18 +0100
commit366239b8b9a2fbea3b6eae8dfc7b4a503d427e4c (patch)
treed41b1bf8fe1323a4d05b2764324a6f072d7ea5f2 /py/parse.c
parent02041bf2e0f541f67a76ce6e77aad92b896cc18a (diff)
downloadmicropython-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.c9
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;
}