Organize TSLanguage fields
Due to the breaking ABI change in #943, this is our chance to reorder the fields in a more logical way.
This commit is contained in:
parent
a6b267201f
commit
592fd8678d
2 changed files with 61 additions and 59 deletions
|
|
@ -1321,27 +1321,62 @@ impl Generator {
|
|||
add_line!(self, "static TSLanguage language = {{");
|
||||
indent!(self);
|
||||
add_line!(self, ".version = LANGUAGE_VERSION,");
|
||||
|
||||
// Quantities
|
||||
add_line!(self, ".symbol_count = SYMBOL_COUNT,");
|
||||
add_line!(self, ".alias_count = ALIAS_COUNT,");
|
||||
add_line!(self, ".token_count = TOKEN_COUNT,");
|
||||
add_line!(self, ".external_token_count = EXTERNAL_TOKEN_COUNT,");
|
||||
add_line!(self, ".symbol_names = ts_symbol_names,");
|
||||
add_line!(self, ".symbol_metadata = ts_symbol_metadata,");
|
||||
add_line!(self, ".parse_table = (const uint16_t *)ts_parse_table,");
|
||||
add_line!(self, ".parse_actions = ts_parse_actions,");
|
||||
add_line!(self, ".lex_modes = ts_lex_modes,");
|
||||
add_line!(self, ".state_count = STATE_COUNT,");
|
||||
add_line!(self, ".large_state_count = LARGE_STATE_COUNT,");
|
||||
if self.next_abi {
|
||||
add_line!(self, ".production_id_count = PRODUCTION_ID_COUNT,");
|
||||
}
|
||||
add_line!(self, ".field_count = FIELD_COUNT,");
|
||||
add_line!(
|
||||
self,
|
||||
".max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,"
|
||||
);
|
||||
|
||||
// Parse table
|
||||
add_line!(self, ".parse_table = (const uint16_t *)ts_parse_table,");
|
||||
if self.large_state_count < self.parse_table.states.len() {
|
||||
add_line!(
|
||||
self,
|
||||
".small_parse_table = (const uint16_t *)ts_small_parse_table,"
|
||||
);
|
||||
add_line!(
|
||||
self,
|
||||
".small_parse_table_map = (const uint32_t *)ts_small_parse_table_map,"
|
||||
);
|
||||
}
|
||||
add_line!(self, ".parse_actions = ts_parse_actions,");
|
||||
|
||||
// Metadata
|
||||
add_line!(self, ".symbol_names = ts_symbol_names,");
|
||||
if !self.field_names.is_empty() {
|
||||
add_line!(self, ".field_names = ts_field_names,");
|
||||
add_line!(
|
||||
self,
|
||||
".field_map_slices = (const TSFieldMapSlice *)ts_field_map_slices,"
|
||||
);
|
||||
add_line!(
|
||||
self,
|
||||
".field_map_entries = (const TSFieldMapEntry *)ts_field_map_entries,"
|
||||
);
|
||||
}
|
||||
add_line!(self, ".symbol_metadata = ts_symbol_metadata,");
|
||||
add_line!(self, ".public_symbol_map = ts_symbol_map,");
|
||||
add_line!(self, ".alias_map = ts_non_terminal_alias_map,");
|
||||
if !self.parse_table.production_infos.is_empty() {
|
||||
add_line!(
|
||||
self,
|
||||
".alias_sequences = (const TSSymbol *)ts_alias_sequences,"
|
||||
);
|
||||
}
|
||||
add_line!(
|
||||
self,
|
||||
".max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,"
|
||||
);
|
||||
|
||||
// Lexing
|
||||
add_line!(self, ".lex_modes = ts_lex_modes,");
|
||||
add_line!(self, ".lex_fn = ts_lex,");
|
||||
if let Some(keyword_capture_token) = self.keyword_capture_token {
|
||||
add_line!(self, ".keyword_lex_fn = ts_lex_keywords,");
|
||||
|
|
@ -1366,39 +1401,6 @@ impl Generator {
|
|||
add_line!(self, "}},");
|
||||
}
|
||||
|
||||
add_line!(self, ".field_count = FIELD_COUNT,");
|
||||
if !self.field_names.is_empty() {
|
||||
add_line!(
|
||||
self,
|
||||
".field_map_slices = (const TSFieldMapSlice *)ts_field_map_slices,"
|
||||
);
|
||||
add_line!(
|
||||
self,
|
||||
".field_map_entries = (const TSFieldMapEntry *)ts_field_map_entries,"
|
||||
);
|
||||
add_line!(self, ".field_names = ts_field_names,");
|
||||
}
|
||||
|
||||
add_line!(self, ".large_state_count = LARGE_STATE_COUNT,");
|
||||
if self.large_state_count < self.parse_table.states.len() {
|
||||
add_line!(
|
||||
self,
|
||||
".small_parse_table = (const uint16_t *)ts_small_parse_table,"
|
||||
);
|
||||
add_line!(
|
||||
self,
|
||||
".small_parse_table_map = (const uint32_t *)ts_small_parse_table_map,"
|
||||
);
|
||||
}
|
||||
|
||||
add_line!(self, ".public_symbol_map = ts_symbol_map,");
|
||||
add_line!(self, ".alias_map = ts_non_terminal_alias_map,");
|
||||
add_line!(self, ".state_count = STATE_COUNT,");
|
||||
|
||||
if self.next_abi {
|
||||
add_line!(self, ".production_id_count = PRODUCTION_ID_COUNT,");
|
||||
}
|
||||
|
||||
dedent!(self);
|
||||
add_line!(self, "}};");
|
||||
add_line!(self, "return &language;");
|
||||
|
|
|
|||
|
|
@ -93,13 +93,24 @@ struct TSLanguage {
|
|||
uint32_t alias_count;
|
||||
uint32_t token_count;
|
||||
uint32_t external_token_count;
|
||||
const char **symbol_names;
|
||||
const TSSymbolMetadata *symbol_metadata;
|
||||
const uint16_t *parse_table;
|
||||
const TSParseActionEntry *parse_actions;
|
||||
const TSLexMode *lex_modes;
|
||||
const TSSymbol *alias_sequences;
|
||||
uint32_t state_count;
|
||||
uint32_t large_state_count;
|
||||
uint32_t production_id_count;
|
||||
uint32_t field_count;
|
||||
uint16_t max_alias_sequence_length;
|
||||
const uint16_t *parse_table;
|
||||
const uint16_t *small_parse_table;
|
||||
const uint32_t *small_parse_table_map;
|
||||
const TSParseActionEntry *parse_actions;
|
||||
const char **symbol_names;
|
||||
const char **field_names;
|
||||
const TSFieldMapSlice *field_map_slices;
|
||||
const TSFieldMapEntry *field_map_entries;
|
||||
const TSSymbolMetadata *symbol_metadata;
|
||||
const TSSymbol *public_symbol_map;
|
||||
const uint16_t *alias_map;
|
||||
const TSSymbol *alias_sequences;
|
||||
const TSLexMode *lex_modes;
|
||||
bool (*lex_fn)(TSLexer *, TSStateId);
|
||||
bool (*keyword_lex_fn)(TSLexer *, TSStateId);
|
||||
TSSymbol keyword_capture_token;
|
||||
|
|
@ -112,17 +123,6 @@ struct TSLanguage {
|
|||
unsigned (*serialize)(void *, char *);
|
||||
void (*deserialize)(void *, const char *, unsigned);
|
||||
} external_scanner;
|
||||
uint32_t field_count;
|
||||
const TSFieldMapSlice *field_map_slices;
|
||||
const TSFieldMapEntry *field_map_entries;
|
||||
const char **field_names;
|
||||
uint32_t large_state_count;
|
||||
const uint16_t *small_parse_table;
|
||||
const uint32_t *small_parse_table_map;
|
||||
const TSSymbol *public_symbol_map;
|
||||
const uint16_t *alias_map;
|
||||
uint32_t state_count;
|
||||
uint32_t production_id_count;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue