@@ -57,8 +57,9 @@ impl RuleFlattener {
5757 }
5858
5959 fn flatten_variable ( & mut self , variable : Variable ) -> FlattenGrammarResult < SyntaxVariable > {
60- let mut productions = Vec :: new ( ) ;
61- for rule in extract_choices ( variable. rule ) {
60+ let choices = extract_choices ( variable. rule ) ;
61+ let mut productions = Vec :: with_capacity ( choices. len ( ) ) ;
62+ for rule in choices {
6263 let production = self . flatten_rule ( rule) ?;
6364 if !productions. contains ( & production) {
6465 productions. push ( production) ;
@@ -195,7 +196,7 @@ fn extract_choices(rule: Rule) -> Vec<Rule> {
195196 let mut result = vec ! [ Rule :: Blank ] ;
196197 for element in elements {
197198 let extraction = extract_choices ( element) ;
198- let mut next_result = Vec :: new ( ) ;
199+ let mut next_result = Vec :: with_capacity ( result . len ( ) ) ;
199200 for entry in result {
200201 for extraction_entry in & extraction {
201202 next_result. push ( Rule :: Seq ( vec ! [ entry. clone( ) , extraction_entry. clone( ) ] ) ) ;
@@ -206,7 +207,7 @@ fn extract_choices(rule: Rule) -> Vec<Rule> {
206207 result
207208 }
208209 Rule :: Choice ( elements) => {
209- let mut result = Vec :: new ( ) ;
210+ let mut result = Vec :: with_capacity ( elements . len ( ) ) ;
210211 for element in elements {
211212 for rule in extract_choices ( element) {
212213 result. push ( rule) ;
0 commit comments