Avoid creating redundant rename sequences
This commit is contained in:
parent
afb499bf2e
commit
4649c3a37f
3 changed files with 9 additions and 6 deletions
|
|
@ -699,15 +699,21 @@ class ParseTableBuilder {
|
|||
}
|
||||
|
||||
unsigned get_rename_sequence_id(const Production &production) {
|
||||
bool has_rename = false;
|
||||
RenameSequence rename_sequence;
|
||||
for (unsigned i = 0, n = production.size(); i < n; i++) {
|
||||
auto &step = production.at(i);
|
||||
if (!step.name_replacement.empty()) {
|
||||
rename_sequence.resize(production.size());
|
||||
has_rename = true;
|
||||
rename_sequence.resize(i + 1);
|
||||
rename_sequence[i] = step.name_replacement;
|
||||
}
|
||||
}
|
||||
|
||||
if (has_rename && production.size() > parse_table.max_rename_sequence_length) {
|
||||
parse_table.max_rename_sequence_length = production.size();
|
||||
}
|
||||
|
||||
auto begin = parse_table.rename_sequences.begin();
|
||||
auto end = parse_table.rename_sequences.end();
|
||||
auto iter = find(begin, end, rename_sequence);
|
||||
|
|
|
|||
|
|
@ -141,11 +141,7 @@ class CCodeGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
unsigned max_rename_sequence_length = 0;
|
||||
for (const RenameSequence &rename_sequence : parse_table.rename_sequences) {
|
||||
if (rename_sequence.size() > max_rename_sequence_length) {
|
||||
max_rename_sequence_length = rename_sequence.size();
|
||||
}
|
||||
for (const string &name_replacement : rename_sequence) {
|
||||
if (!name_replacement.empty()) {
|
||||
unique_replacement_names.insert(name_replacement);
|
||||
|
|
@ -159,7 +155,7 @@ class CCodeGenerator {
|
|||
line("#define RENAME_SYMBOL_COUNT " + to_string(unique_replacement_names.size()));
|
||||
line("#define TOKEN_COUNT " + to_string(token_count));
|
||||
line("#define EXTERNAL_TOKEN_COUNT " + to_string(syntax_grammar.external_tokens.size()));
|
||||
line("#define MAX_RENAME_SEQUENCE_LENGTH " + to_string(max_rename_sequence_length));
|
||||
line("#define MAX_RENAME_SEQUENCE_LENGTH " + to_string(parse_table.max_rename_sequence_length));
|
||||
line();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ struct ParseTable {
|
|||
std::vector<ParseState> states;
|
||||
std::map<rules::Symbol, ParseTableSymbolMetadata> symbols;
|
||||
std::vector<RenameSequence> rename_sequences;
|
||||
unsigned max_rename_sequence_length = 0;
|
||||
};
|
||||
|
||||
} // namespace tree_sitter
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue