From 8bb8e9b8b3456bc77643ecc3538c6b5205b4d8db Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 15 Oct 2020 07:20:12 -0700 Subject: [PATCH] Initialize TSLanguage fields in order of their declaration This makes parser.c valid under the C++20 standard --- cli/src/generate/render.rs | 81 +++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/cli/src/generate/render.rs b/cli/src/generate/render.rs index cf3109c8..f7f788d0 100644 --- a/cli/src/generate/render.rs +++ b/cli/src/generate/render.rs @@ -1268,34 +1268,12 @@ impl Generator { add_line!(self, ".symbol_count = SYMBOL_COUNT,"); add_line!(self, ".alias_count = ALIAS_COUNT,"); add_line!(self, ".token_count = TOKEN_COUNT,"); - add_line!(self, ".large_state_count = LARGE_STATE_COUNT,"); - - if self.next_abi { - add_line!(self, ".alias_map = ts_non_terminal_alias_map,"); - add_line!(self, ".state_count = STATE_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 unsigned short *)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_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, ".symbol_names = ts_symbol_names,"); - add_line!(self, ".public_symbol_map = ts_symbol_map,"); if !self.parse_table.production_infos.is_empty() { add_line!( @@ -1303,27 +1281,12 @@ impl Generator { ".alias_sequences = (const TSSymbol *)ts_alias_sequences," ); } - - add_line!(self, ".field_count = FIELD_COUNT,"); - - 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, ".max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH," ); - add_line!(self, ".lex_fn = ts_lex,"); + 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,"); add_line!( @@ -1333,8 +1296,6 @@ impl Generator { ); } - add_line!(self, ".external_token_count = EXTERNAL_TOKEN_COUNT,"); - if !self.syntax_grammar.external_tokens.is_empty() { add_line!(self, ".external_scanner = {{"); indent!(self); @@ -1348,8 +1309,40 @@ impl Generator { dedent!(self); add_line!(self, "}},"); } - dedent!(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,"); + + if self.next_abi { + add_line!(self, ".alias_map = ts_non_terminal_alias_map,"); + add_line!(self, ".state_count = STATE_COUNT,"); + } + + dedent!(self); add_line!(self, "}};"); add_line!(self, "return &language;"); dedent!(self);