From 366239b8b9a2fbea3b6eae8dfc7b4a503d427e4c Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 8 Oct 2015 23:13:18 +0100 Subject: py/parse: Factor logic when creating parse node from and-rule. --- py/parse.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'py/parse.c') 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; } -- cgit v1.2.3