From 5073af0d03d26886ef60a1ffb863b379d10ac12e Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Sun, 1 Nov 2015 21:20:59 -0800 Subject: [PATCH] Extract helper method for precedence in lex_item_transitions --- .../build_tables/lex_item_transitions.cc | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/compiler/build_tables/lex_item_transitions.cc b/src/compiler/build_tables/lex_item_transitions.cc index b0a90719..e3312af3 100644 --- a/src/compiler/build_tables/lex_item_transitions.cc +++ b/src/compiler/build_tables/lex_item_transitions.cc @@ -73,6 +73,12 @@ class LexItemTransitions : public rules::RuleFn { { new_char_set, { new_item_set, new_precedence_range } }); } + PrecedenceRange merge_precedence(PrecedenceRange precedence) { + if (precedence.empty && !precedence_stack->empty()) + precedence.add(precedence_stack->back()); + return precedence; + } + void apply_to(const CharacterSet *rule) { merge_transition(transitions, *rule, LexItemSet({ @@ -90,15 +96,11 @@ class LexItemTransitions : public rules::RuleFn { LexItemSet::TransitionMap left_transitions; LexItemTransitions(&left_transitions, this).apply(rule->left); for (const auto &pair : left_transitions) { - PrecedenceRange precedence(pair.second.second); - if (precedence.empty && !precedence_stack->empty()) - precedence.add(precedence_stack->back()); - merge_transition( transitions, pair.first, transform_item_set(pair.second.first, [&rule](rule_ptr item_rule) { return rules::Seq::build({ item_rule, rule->right }); - }), precedence); + }), merge_precedence(pair.second.second)); } if (rule_can_be_blank(rule->left)) @@ -109,17 +111,13 @@ class LexItemTransitions : public rules::RuleFn { LexItemSet::TransitionMap content_transitions; LexItemTransitions(&content_transitions, this).apply(rule->content); for (const auto &pair : content_transitions) { - PrecedenceRange precedence(pair.second.second); - if (precedence.empty && !precedence_stack->empty()) - precedence.add(precedence_stack->back()); - merge_transition(transitions, pair.first, pair.second.first, - precedence); + merge_precedence(pair.second.second)); merge_transition( transitions, pair.first, transform_item_set(pair.second.first, [&rule](rule_ptr item_rule) { return rules::Seq::build({ item_rule, rule->copy() }); - }), precedence); + }), merge_precedence(pair.second.second)); } }