Skip to content

Commit 071f4e4

Browse files
committed
Fix generate error when there are aliases in unused rules
1 parent bad2fd3 commit 071f4e4

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

cli/src/generate/render.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ impl Generator {
519519
}
520520

521521
fn add_non_terminal_alias_map(&mut self) {
522-
let mut aliases_by_symbol = HashMap::new();
522+
let mut alias_ids_by_symbol = HashMap::new();
523523
for variable in &self.syntax_grammar.variables {
524524
for production in &variable.productions {
525525
for step in &production.steps {
@@ -528,10 +528,13 @@ impl Generator {
528528
&& Some(alias) != self.default_aliases.get(&step.symbol)
529529
{
530530
if self.symbol_ids.contains_key(&step.symbol) {
531-
let alias_ids =
532-
aliases_by_symbol.entry(step.symbol).or_insert(Vec::new());
533-
if let Err(i) = alias_ids.binary_search(&alias) {
534-
alias_ids.insert(i, alias);
531+
if let Some(alias_id) = self.alias_ids.get(&alias) {
532+
let alias_ids = alias_ids_by_symbol
533+
.entry(step.symbol)
534+
.or_insert(Vec::new());
535+
if let Err(i) = alias_ids.binary_search(&alias_id) {
536+
alias_ids.insert(i, alias_id);
537+
}
535538
}
536539
}
537540
}
@@ -540,19 +543,19 @@ impl Generator {
540543
}
541544
}
542545

543-
let mut aliases_by_symbol = aliases_by_symbol.iter().collect::<Vec<_>>();
544-
aliases_by_symbol.sort_unstable_by_key(|e| e.0);
546+
let mut alias_ids_by_symbol = alias_ids_by_symbol.iter().collect::<Vec<_>>();
547+
alias_ids_by_symbol.sort_unstable_by_key(|e| e.0);
545548

546549
add_line!(self, "static uint16_t ts_non_terminal_alias_map[] = {{");
547550
indent!(self);
548-
for (symbol, aliases) in aliases_by_symbol {
551+
for (symbol, alias_ids) in alias_ids_by_symbol {
549552
let symbol_id = &self.symbol_ids[symbol];
550553
let public_symbol_id = &self.symbol_ids[&self.symbol_map[&symbol]];
551-
add_line!(self, "{}, {},", symbol_id, 1 + aliases.len());
554+
add_line!(self, "{}, {},", symbol_id, 1 + alias_ids.len());
552555
indent!(self);
553556
add_line!(self, "{},", public_symbol_id);
554-
for alias in aliases {
555-
add_line!(self, "{},", &self.alias_ids[&alias]);
557+
for alias_id in alias_ids {
558+
add_line!(self, "{},", alias_id);
556559
}
557560
dedent!(self);
558561
}

0 commit comments

Comments
 (0)