From 66144dc28ec395b53dbf64f1254bab72024b5662 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 16 Dec 2015 20:04:45 -0800 Subject: [PATCH] Treat tokens that are sometimes extra as fragile --- include/tree_sitter/parser.h | 1 + spec/fixtures/parsers/anonymous_tokens.c | 14 +- spec/fixtures/parsers/arithmetic.c | 40 ++--- spec/fixtures/parsers/c.c | 164 ++++++++--------- spec/fixtures/parsers/cpp.c | 166 +++++++++--------- spec/fixtures/parsers/golang.c | 168 +++++++++--------- spec/fixtures/parsers/javascript.c | 214 +++++++++++------------ spec/fixtures/parsers/json.c | 36 ++-- src/compiler/generate_code/c_code.cc | 9 +- src/runtime/parser.c | 4 +- src/runtime/tree.h | 5 + 11 files changed, 418 insertions(+), 403 deletions(-) diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index 95f29135..7f0156cc 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -27,6 +27,7 @@ typedef struct { bool visible : 1; bool named : 1; bool extra : 1; + bool structural : 1; } TSSymbolMetadata; typedef struct TSLexer { diff --git a/spec/fixtures/parsers/anonymous_tokens.c b/spec/fixtures/parsers/anonymous_tokens.c index 14d8db00..2b9095d4 100644 --- a/spec/fixtures/parsers/anonymous_tokens.c +++ b/spec/fixtures/parsers/anonymous_tokens.c @@ -22,13 +22,13 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_program] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_LF] = {.visible = true, .named = false, .extra = false}, - [anon_sym_CR] = {.visible = true, .named = false, .extra = false}, - [aux_sym_SLASH_BSLASHd_SLASH] = {.visible = false, .named = false, .extra = false}, - [anon_sym_DQUOTEhello_DQUOTE] = {.visible = true, .named = false, .extra = false}, + [sym_program] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = false, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_LF] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_CR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [aux_sym_SLASH_BSLASHd_SLASH] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_DQUOTEhello_DQUOTE] = {.visible = true, .named = false, .structural = true, .extra = false}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/arithmetic.c b/spec/fixtures/parsers/arithmetic.c index 1e278dd4..94980225 100644 --- a/spec/fixtures/parsers/arithmetic.c +++ b/spec/fixtures/parsers/arithmetic.c @@ -48,26 +48,26 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_program] = {.visible = true, .named = true, .extra = false}, - [sym__expression] = {.visible = false, .named = false, .extra = false}, - [sym_sum] = {.visible = true, .named = true, .extra = false}, - [sym_difference] = {.visible = true, .named = true, .extra = false}, - [sym_product] = {.visible = true, .named = true, .extra = false}, - [sym_quotient] = {.visible = true, .named = true, .extra = false}, - [sym_exponent] = {.visible = true, .named = true, .extra = false}, - [sym_group] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_PLUS] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SLASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_CARET] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_variable] = {.visible = true, .named = true, .extra = false}, - [sym_comment] = {.visible = true, .named = true, .extra = true}, + [sym_program] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_sum] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_difference] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_product] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_quotient] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_exponent] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_group] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SLASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_CARET] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_variable] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_comment] = {.visible = true, .named = true, .structural = false, .extra = true}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/c.c b/spec/fixtures/parsers/c.c index 971f6463..10d2ceaf 100644 --- a/spec/fixtures/parsers/c.c +++ b/spec/fixtures/parsers/c.c @@ -172,88 +172,88 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_translation_unit] = {.visible = true, .named = true, .extra = false}, - [sym_preproc_define] = {.visible = true, .named = true, .extra = false}, - [sym_function_definition] = {.visible = true, .named = true, .extra = false}, - [sym_declaration_specifiers] = {.visible = true, .named = true, .extra = false}, - [sym_storage_class_specifier] = {.visible = true, .named = true, .extra = false}, - [sym__type_specifier] = {.visible = false, .named = false, .extra = false}, - [sym_numeric_type_specifier] = {.visible = true, .named = true, .extra = false}, - [sym_struct_specifier] = {.visible = true, .named = true, .extra = false}, - [sym_type_name] = {.visible = true, .named = true, .extra = false}, - [sym_struct_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_parameter_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_declaration] = {.visible = true, .named = true, .extra = false}, - [sym__init_declarator] = {.visible = false, .named = false, .extra = false}, - [sym_initializer] = {.visible = true, .named = true, .extra = false}, - [sym_initializer_list] = {.visible = true, .named = true, .extra = false}, - [sym_designation] = {.visible = true, .named = true, .extra = false}, - [sym__declarator] = {.visible = false, .named = false, .extra = false}, - [sym__abstract_declarator] = {.visible = false, .named = false, .extra = false}, - [sym_pointer_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_abstract_pointer_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_function_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_abstract_function_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_array_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_abstract_array_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_type_qualifier] = {.visible = true, .named = true, .extra = false}, - [sym_compound_statement] = {.visible = true, .named = true, .extra = false}, - [sym__expression] = {.visible = false, .named = false, .extra = false}, - [sym_cast_expression] = {.visible = true, .named = true, .extra = false}, - [sym_math_expression] = {.visible = true, .named = true, .extra = false}, - [sym_call_expression] = {.visible = true, .named = true, .extra = false}, - [sym_pointer_expression] = {.visible = true, .named = true, .extra = false}, - [sym_assignment_expression] = {.visible = true, .named = true, .extra = false}, - [sym__statement] = {.visible = false, .named = false, .extra = false}, - [sym_for_statement] = {.visible = true, .named = true, .extra = false}, - [sym_expression_statement] = {.visible = true, .named = true, .extra = false}, - [sym_macro_type] = {.visible = true, .named = true, .extra = false}, - [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_declaration_specifiers_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_numeric_type_specifier_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_struct_specifier_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_type_name_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_declaration_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_designation_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_function_declarator_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_POUNDdefine] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LF] = {.visible = true, .named = false, .extra = false}, - [sym_preproc_arg] = {.visible = true, .named = true, .extra = false}, - [anon_sym_typedef] = {.visible = true, .named = false, .extra = false}, - [anon_sym_extern] = {.visible = true, .named = false, .extra = false}, - [anon_sym_static] = {.visible = true, .named = false, .extra = false}, - [anon_sym_auto] = {.visible = true, .named = false, .extra = false}, - [anon_sym_register] = {.visible = true, .named = false, .extra = false}, - [anon_sym_signed] = {.visible = true, .named = false, .extra = false}, - [anon_sym_unsigned] = {.visible = true, .named = false, .extra = false}, - [anon_sym_long] = {.visible = true, .named = false, .extra = false}, - [anon_sym_short] = {.visible = true, .named = false, .extra = false}, - [anon_sym_struct] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COMMA] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SEMI] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DOT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR] = {.visible = true, .named = false, .extra = false}, - [anon_sym_const] = {.visible = true, .named = false, .extra = false}, - [anon_sym_restrict] = {.visible = true, .named = false, .extra = false}, - [anon_sym_volatile] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PLUS] = {.visible = true, .named = false, .extra = false}, - [anon_sym_AMP] = {.visible = true, .named = false, .extra = false}, - [anon_sym_for] = {.visible = true, .named = false, .extra = false}, - [sym_string] = {.visible = true, .named = true, .extra = false}, - [sym_identifier] = {.visible = true, .named = true, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_comment] = {.visible = true, .named = true, .extra = true}, + [sym_translation_unit] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_preproc_define] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_definition] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_declaration_specifiers] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_storage_class_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__type_specifier] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_numeric_type_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_struct_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_name] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_struct_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_parameter_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__init_declarator] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_initializer] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_initializer_list] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_designation] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__declarator] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym__abstract_declarator] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_pointer_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_abstract_pointer_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_abstract_function_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_array_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_abstract_array_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_qualifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_compound_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_cast_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_math_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_call_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_pointer_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_assignment_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__statement] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_for_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_expression_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_macro_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_declaration_specifiers_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_numeric_type_specifier_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_struct_specifier_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_type_name_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_declaration_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_designation_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_function_declarator_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_POUNDdefine] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LF] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_preproc_arg] = {.visible = true, .named = true, .structural = true, .extra = false}, + [anon_sym_typedef] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_extern] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_static] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_auto] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_register] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_signed] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_unsigned] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_long] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_short] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_struct] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COMMA] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SEMI] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DOT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_const] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_restrict] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_volatile] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_AMP] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_for] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_string] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_identifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_comment] = {.visible = true, .named = true, .structural = false, .extra = true}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/cpp.c b/spec/fixtures/parsers/cpp.c index 44708085..30db6221 100644 --- a/spec/fixtures/parsers/cpp.c +++ b/spec/fixtures/parsers/cpp.c @@ -174,89 +174,89 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_translation_unit] = {.visible = true, .named = true, .extra = false}, - [sym__declaration] = {.visible = false, .named = false, .extra = false}, - [sym__block_declaration] = {.visible = false, .named = false, .extra = false}, - [sym_function_definition] = {.visible = true, .named = true, .extra = false}, - [sym_simple_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_namespace_alias_definition] = {.visible = true, .named = true, .extra = false}, - [sym_scoped_identifier] = {.visible = true, .named = true, .extra = false}, - [sym_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_abstract_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_direct_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_parameter_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_direct_abstract_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_cv_qualifier] = {.visible = true, .named = true, .extra = false}, - [sym_type_id] = {.visible = true, .named = true, .extra = false}, - [sym_pointer_operator] = {.visible = true, .named = true, .extra = false}, - [sym_function_body] = {.visible = true, .named = true, .extra = false}, - [sym_constructor_initializer] = {.visible = true, .named = true, .extra = false}, - [sym_member_initializer] = {.visible = true, .named = true, .extra = false}, - [sym_init_declarator] = {.visible = true, .named = true, .extra = false}, - [sym_decl_specifier] = {.visible = true, .named = true, .extra = false}, - [sym_storage_class_specifier] = {.visible = true, .named = true, .extra = false}, - [sym_type_specifier] = {.visible = true, .named = true, .extra = false}, - [sym_compound_statement] = {.visible = true, .named = true, .extra = false}, - [sym__statement] = {.visible = false, .named = false, .extra = false}, - [sym_expression_statement] = {.visible = true, .named = true, .extra = false}, - [sym_initializer] = {.visible = true, .named = true, .extra = false}, - [sym_initializer_clause] = {.visible = true, .named = true, .extra = false}, - [sym_function_specifier] = {.visible = true, .named = true, .extra = false}, - [sym__expression] = {.visible = false, .named = false, .extra = false}, - [sym_call_expression] = {.visible = true, .named = true, .extra = false}, - [sym_relational_expression] = {.visible = true, .named = true, .extra = false}, - [sym_template_call] = {.visible = true, .named = true, .extra = false}, - [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_function_definition_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_simple_declaration_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_declarator_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_direct_declarator_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_pointer_operator_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_constructor_initializer_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_default] = {.visible = true, .named = false, .extra = false}, - [anon_sym_delete] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SEMI] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COMMA] = {.visible = true, .named = false, .extra = false}, - [anon_sym_namespace] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COLON_COLON] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_const] = {.visible = true, .named = false, .extra = false}, - [anon_sym_volatile] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR] = {.visible = true, .named = false, .extra = false}, - [anon_sym_AMP] = {.visible = true, .named = false, .extra = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COLON] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DOT_DOT_DOT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_initializer_list] = {.visible = true, .named = false, .extra = false}, - [anon_sym_friend] = {.visible = true, .named = false, .extra = false}, - [anon_sym_typedef] = {.visible = true, .named = false, .extra = false}, - [anon_sym_constexpr] = {.visible = true, .named = false, .extra = false}, - [anon_sym_register] = {.visible = true, .named = false, .extra = false}, - [anon_sym_static] = {.visible = true, .named = false, .extra = false}, - [anon_sym_thread_local] = {.visible = true, .named = false, .extra = false}, - [anon_sym_extern] = {.visible = true, .named = false, .extra = false}, - [anon_sym_mutable] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_inline] = {.visible = true, .named = false, .extra = false}, - [anon_sym_virtual] = {.visible = true, .named = false, .extra = false}, - [anon_sym_explicit] = {.visible = true, .named = false, .extra = false}, - [anon_sym_GT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_GT_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_BANG_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LT_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LT] = {.visible = true, .named = false, .extra = false}, - [sym_string] = {.visible = true, .named = true, .extra = false}, - [sym_identifier] = {.visible = true, .named = true, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_comment] = {.visible = true, .named = true, .extra = true}, + [sym_translation_unit] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__declaration] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym__block_declaration] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_function_definition] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_simple_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_namespace_alias_definition] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_scoped_identifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_abstract_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_direct_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_parameter_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_direct_abstract_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_cv_qualifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_id] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_pointer_operator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_body] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_constructor_initializer] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_member_initializer] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_init_declarator] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_decl_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_storage_class_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_compound_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__statement] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_expression_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_initializer] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_initializer_clause] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_specifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_call_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_relational_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_template_call] = {.visible = true, .named = true, .structural = true, .extra = false}, + [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_function_definition_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_simple_declaration_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_declarator_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_direct_declarator_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_pointer_operator_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_constructor_initializer_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = false, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_default] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_delete] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SEMI] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COMMA] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_namespace] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COLON_COLON] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_const] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_volatile] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_AMP] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_AMP_AMP] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COLON] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DOT_DOT_DOT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_initializer_list] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_friend] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_typedef] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_constexpr] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_register] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_static] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_thread_local] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_extern] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_mutable] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_inline] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_virtual] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_explicit] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_GT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_GT_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_BANG_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LT_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_string] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_identifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_comment] = {.visible = true, .named = true, .structural = false, .extra = true}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/golang.c b/spec/fixtures/parsers/golang.c index 94b62bb8..277780a6 100644 --- a/spec/fixtures/parsers/golang.c +++ b/spec/fixtures/parsers/golang.c @@ -176,90 +176,90 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_program] = {.visible = true, .named = true, .extra = false}, - [sym_package_directive] = {.visible = true, .named = true, .extra = false}, - [sym_imports_block] = {.visible = true, .named = true, .extra = false}, - [sym_package_import] = {.visible = true, .named = true, .extra = false}, - [sym__declaration] = {.visible = false, .named = false, .extra = false}, - [sym_type_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_var_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_func_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_block_statement] = {.visible = true, .named = true, .extra = false}, - [sym__type_expression] = {.visible = false, .named = false, .extra = false}, - [sym_pointer_type] = {.visible = true, .named = true, .extra = false}, - [sym_map_type] = {.visible = true, .named = true, .extra = false}, - [sym_slice_type] = {.visible = true, .named = true, .extra = false}, - [sym_struct_type] = {.visible = true, .named = true, .extra = false}, - [sym_interface_type] = {.visible = true, .named = true, .extra = false}, - [sym__statement] = {.visible = false, .named = false, .extra = false}, - [sym_return_statement] = {.visible = true, .named = true, .extra = false}, - [sym_short_var_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_range_statement] = {.visible = true, .named = true, .extra = false}, - [sym_if_statement] = {.visible = true, .named = true, .extra = false}, - [sym_expression_statement] = {.visible = true, .named = true, .extra = false}, - [sym__expression] = {.visible = false, .named = false, .extra = false}, - [sym_call_expression] = {.visible = true, .named = true, .extra = false}, - [sym_selector_expression] = {.visible = true, .named = true, .extra = false}, - [sym_math_op] = {.visible = true, .named = true, .extra = false}, - [sym_bool_op] = {.visible = true, .named = true, .extra = false}, - [sym__func_signature] = {.visible = false, .named = false, .extra = false}, - [sym_package_name] = {.visible = true, .named = true, .extra = false}, - [sym_var_name] = {.visible = true, .named = true, .extra = false}, - [sym_type_name] = {.visible = true, .named = true, .extra = false}, - [aux_sym_program_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_program_repeat2] = {.visible = false, .named = false, .extra = false}, - [aux_sym_imports_block_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_block_statement_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_struct_type_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_interface_type_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_return_statement_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_short_var_declaration_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym__func_signature_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym__func_signature_repeat2] = {.visible = false, .named = false, .extra = false}, - [aux_sym__func_signature_repeat3] = {.visible = false, .named = false, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_package] = {.visible = true, .named = false, .extra = false}, - [anon_sym_import] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_type] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SEMI] = {.visible = true, .named = false, .extra = false}, - [anon_sym_var] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_func] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR] = {.visible = true, .named = false, .extra = false}, - [anon_sym_map] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_struct] = {.visible = true, .named = false, .extra = false}, - [anon_sym_interface] = {.visible = true, .named = false, .extra = false}, - [anon_sym_return] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COMMA] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COLON_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_for] = {.visible = true, .named = false, .extra = false}, - [anon_sym_range] = {.visible = true, .named = false, .extra = false}, - [anon_sym_if] = {.visible = true, .named = false, .extra = false}, - [anon_sym_else] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DOT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SLASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PLUS] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LT_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_GT_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_GT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_BANG] = {.visible = true, .named = false, .extra = false}, - [sym__line_break] = {.visible = false, .named = false, .extra = false}, - [sym_string] = {.visible = true, .named = true, .extra = false}, - [sym__identifier] = {.visible = false, .named = false, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_comment] = {.visible = true, .named = true, .extra = false}, + [sym_program] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_package_directive] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_imports_block] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_package_import] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__declaration] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_type_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_var_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_func_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_block_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__type_expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_pointer_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_map_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_slice_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_struct_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_interface_type] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__statement] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_return_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_short_var_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_range_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_if_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_expression_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_call_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_selector_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_math_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_bool_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__func_signature] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_package_name] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_var_name] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_name] = {.visible = true, .named = true, .structural = true, .extra = false}, + [aux_sym_program_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_program_repeat2] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_imports_block_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_block_statement_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_struct_type_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_interface_type_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_return_statement_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_short_var_declaration_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym__func_signature_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym__func_signature_repeat2] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym__func_signature_repeat3] = {.visible = false, .named = false, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_package] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_import] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_type] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SEMI] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_var] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_func] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_map] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_struct] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_interface] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_return] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COMMA] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COLON_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_for] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_range] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_if] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_else] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DOT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SLASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_AMP_AMP] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LT_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_GT_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_GT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_BANG] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym__line_break] = {.visible = false, .named = false, .structural = true, .extra = true}, + [sym_string] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__identifier] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_comment] = {.visible = true, .named = true, .structural = true, .extra = true}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/javascript.c b/spec/fixtures/parsers/javascript.c index 3757e81c..283607eb 100644 --- a/spec/fixtures/parsers/javascript.c +++ b/spec/fixtures/parsers/javascript.c @@ -222,113 +222,113 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_program] = {.visible = true, .named = true, .extra = false}, - [sym__statement] = {.visible = false, .named = false, .extra = false}, - [sym_expression_statement] = {.visible = true, .named = true, .extra = false}, - [sym_var_declaration] = {.visible = true, .named = true, .extra = false}, - [sym_statement_block] = {.visible = true, .named = true, .extra = false}, - [sym_if_statement] = {.visible = true, .named = true, .extra = false}, - [sym_switch_statement] = {.visible = true, .named = true, .extra = false}, - [sym_for_statement] = {.visible = true, .named = true, .extra = false}, - [sym_for_in_statement] = {.visible = true, .named = true, .extra = false}, - [sym_while_statement] = {.visible = true, .named = true, .extra = false}, - [sym_try_statement] = {.visible = true, .named = true, .extra = false}, - [sym_return_statement] = {.visible = true, .named = true, .extra = false}, - [sym_throw_statement] = {.visible = true, .named = true, .extra = false}, - [sym_break_statement] = {.visible = true, .named = true, .extra = false}, - [sym_delete_statement] = {.visible = true, .named = true, .extra = false}, - [sym_case] = {.visible = true, .named = true, .extra = false}, - [sym_default] = {.visible = true, .named = true, .extra = false}, - [sym_catch] = {.visible = true, .named = true, .extra = false}, - [sym_finally] = {.visible = true, .named = true, .extra = false}, - [sym_var_assignment] = {.visible = true, .named = true, .extra = false}, - [sym__paren_expression] = {.visible = false, .named = false, .extra = false}, - [sym__expression] = {.visible = false, .named = false, .extra = false}, - [sym_object] = {.visible = true, .named = true, .extra = false}, - [sym_array] = {.visible = true, .named = true, .extra = false}, - [sym_function_expression] = {.visible = true, .named = true, .extra = false}, - [sym_function_call] = {.visible = true, .named = true, .extra = false}, - [sym_constructor_call] = {.visible = true, .named = true, .extra = false}, - [sym_member_access] = {.visible = true, .named = true, .extra = false}, - [sym_subscript_access] = {.visible = true, .named = true, .extra = false}, - [sym_assignment] = {.visible = true, .named = true, .extra = false}, - [sym_math_assignment] = {.visible = true, .named = true, .extra = false}, - [sym_ternary] = {.visible = true, .named = true, .extra = false}, - [sym_bool_op] = {.visible = true, .named = true, .extra = false}, - [sym_math_op] = {.visible = true, .named = true, .extra = false}, - [sym_rel_op] = {.visible = true, .named = true, .extra = false}, - [sym_type_op] = {.visible = true, .named = true, .extra = false}, - [sym_formal_parameters] = {.visible = true, .named = true, .extra = false}, - [sym_arguments] = {.visible = true, .named = true, .extra = false}, - [sym_pair] = {.visible = true, .named = true, .extra = false}, - [sym_method_definition] = {.visible = true, .named = true, .extra = false}, - [aux_sym_program_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_var_declaration_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_switch_statement_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_object_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_array_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_formal_parameters_repeat1] = {.visible = false, .named = false, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_SEMI] = {.visible = true, .named = false, .extra = false}, - [anon_sym_var] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COMMA] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_if] = {.visible = true, .named = false, .extra = false}, - [anon_sym_else] = {.visible = true, .named = false, .extra = false}, - [anon_sym_switch] = {.visible = true, .named = false, .extra = false}, - [anon_sym_for] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false}, - [anon_sym_in] = {.visible = true, .named = false, .extra = false}, - [anon_sym_while] = {.visible = true, .named = false, .extra = false}, - [anon_sym_try] = {.visible = true, .named = false, .extra = false}, - [anon_sym_return] = {.visible = true, .named = false, .extra = false}, - [anon_sym_throw] = {.visible = true, .named = false, .extra = false}, - [anon_sym_break] = {.visible = true, .named = false, .extra = false}, - [anon_sym_delete] = {.visible = true, .named = false, .extra = false}, - [anon_sym_case] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COLON] = {.visible = true, .named = false, .extra = false}, - [anon_sym_default] = {.visible = true, .named = false, .extra = false}, - [anon_sym_catch] = {.visible = true, .named = false, .extra = false}, - [anon_sym_finally] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_function] = {.visible = true, .named = false, .extra = false}, - [anon_sym_new] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DOT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PLUS_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DASH_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SLASH_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_QMARK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false}, - [anon_sym_BANG] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PLUS_PLUS] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DASH_DASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_STAR] = {.visible = true, .named = false, .extra = false}, - [anon_sym_SLASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_PLUS] = {.visible = true, .named = false, .extra = false}, - [anon_sym_DASH] = {.visible = true, .named = false, .extra = false}, - [anon_sym_EQ_EQ_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_BANG_EQ_EQ] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_GT] = {.visible = true, .named = false, .extra = false}, - [anon_sym_instanceof] = {.visible = true, .named = false, .extra = false}, - [anon_sym_typeof] = {.visible = true, .named = false, .extra = false}, - [sym_comment] = {.visible = true, .named = true, .extra = false}, - [sym_string] = {.visible = true, .named = true, .extra = false}, - [sym_regex] = {.visible = true, .named = true, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_identifier] = {.visible = true, .named = true, .extra = false}, - [sym_null] = {.visible = true, .named = true, .extra = false}, - [sym_undefined] = {.visible = true, .named = true, .extra = false}, - [sym_true] = {.visible = true, .named = true, .extra = false}, - [sym_false] = {.visible = true, .named = true, .extra = false}, - [sym__line_break] = {.visible = false, .named = false, .extra = false}, + [sym_program] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__statement] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_expression_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_var_declaration] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_statement_block] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_if_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_switch_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_for_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_for_in_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_while_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_try_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_return_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_throw_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_break_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_delete_statement] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_case] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_default] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_catch] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_finally] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_var_assignment] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__paren_expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym__expression] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_object] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_array] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_expression] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_function_call] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_constructor_call] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_member_access] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_subscript_access] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_assignment] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_math_assignment] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_ternary] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_bool_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_math_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_rel_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_type_op] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_formal_parameters] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_arguments] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_pair] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_method_definition] = {.visible = true, .named = true, .structural = true, .extra = false}, + [aux_sym_program_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_var_declaration_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_switch_statement_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_object_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_array_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_formal_parameters_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_SEMI] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_var] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COMMA] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_if] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_else] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_switch] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_for] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RPAREN] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_in] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_while] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_try] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_return] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_throw] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_break] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_delete] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_case] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COLON] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_default] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_catch] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_finally] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_function] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_new] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DOT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DASH_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SLASH_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_QMARK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_AMP_AMP] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_BANG] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS_PLUS] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DASH_DASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_STAR] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_SLASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_PLUS] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_DASH] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_EQ_EQ_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_BANG_EQ_EQ] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_GT] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_instanceof] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_typeof] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_comment] = {.visible = true, .named = true, .structural = true, .extra = true}, + [sym_string] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_regex] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_identifier] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_null] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_undefined] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_true] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_false] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym__line_break] = {.visible = false, .named = false, .structural = true, .extra = true}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/json.c b/spec/fixtures/parsers/json.c index 19c46be9..2ae8fd7d 100644 --- a/spec/fixtures/parsers/json.c +++ b/spec/fixtures/parsers/json.c @@ -44,24 +44,24 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym__value] = {.visible = false, .named = false, .extra = false}, - [sym_object] = {.visible = true, .named = true, .extra = false}, - [sym_array] = {.visible = true, .named = true, .extra = false}, - [aux_sym_object_repeat1] = {.visible = false, .named = false, .extra = false}, - [aux_sym_array_repeat1] = {.visible = false, .named = false, .extra = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false}, - [ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COLON] = {.visible = true, .named = false, .extra = false}, - [anon_sym_COMMA] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false}, - [sym_string] = {.visible = true, .named = true, .extra = false}, - [sym_number] = {.visible = true, .named = true, .extra = false}, - [sym_null] = {.visible = true, .named = true, .extra = false}, - [sym_true] = {.visible = true, .named = true, .extra = false}, - [sym_false] = {.visible = true, .named = true, .extra = false}, + [sym__value] = {.visible = false, .named = false, .structural = true, .extra = false}, + [sym_object] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_array] = {.visible = true, .named = true, .structural = true, .extra = false}, + [aux_sym_object_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [aux_sym_array_repeat1] = {.visible = false, .named = false, .structural = true, .extra = false}, + [ts_builtin_sym_error] = {.visible = true, .named = true, .structural = true, .extra = false}, + [ts_builtin_sym_end] = {.visible = false, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COLON] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_COMMA] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACE] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_LBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [anon_sym_RBRACK] = {.visible = true, .named = false, .structural = true, .extra = false}, + [sym_string] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_number] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_null] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_true] = {.visible = true, .named = true, .structural = true, .extra = false}, + [sym_false] = {.visible = true, .named = true, .structural = true, .extra = false}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/src/compiler/generate_code/c_code.cc b/src/compiler/generate_code/c_code.cc index 3c4e4638..5b10b01a 100644 --- a/src/compiler/generate_code/c_code.cc +++ b/src/compiler/generate_code/c_code.cc @@ -166,9 +166,16 @@ class CCodeGenerator { add(", "); if (entry.second.structural) - add(".extra = false"); + add(".structural = true"); else + add(".structural = false"); + + add(", "); + + if (syntax_grammar.ubiquitous_tokens.find(symbol) != syntax_grammar.ubiquitous_tokens.end()) add(".extra = true"); + else + add(".extra = false"); add("},"); } diff --git a/src/runtime/parser.c b/src/runtime/parser.c index afdf2aa7..c9b37263 100644 --- a/src/runtime/parser.c +++ b/src/runtime/parser.c @@ -210,6 +210,8 @@ static TSTree *ts_parser__select_tree(void *data, TSTree *left, TSTree *right) { static bool ts_parser__shift(TSParser *self, int head, TSStateId parse_state, TSTree *lookahead) { + if (self->language->symbol_metadata[lookahead->symbol].extra) + ts_tree_set_fragile(lookahead); if (ts_stack_push(self->stack, head, parse_state, lookahead)) { LOG("merge head:%d", head); vector_erase(&self->lookahead_states, head); @@ -222,7 +224,7 @@ static bool ts_parser__shift(TSParser *self, int head, static bool ts_parser__shift_extra(TSParser *self, int head, TSStateId state, TSTree *lookahead) { TSSymbolMetadata metadata = self->language->symbol_metadata[lookahead->symbol]; - if (!metadata.extra && ts_stack_head_count(self->stack) > 1) + if (metadata.structural && ts_stack_head_count(self->stack) > 1) lookahead = ts_tree_make_copy(lookahead); ts_tree_set_extra(lookahead); return ts_parser__shift(self, head, state, lookahead); diff --git a/src/runtime/tree.h b/src/runtime/tree.h index d78a914b..166b7c11 100644 --- a/src/runtime/tree.h +++ b/src/runtime/tree.h @@ -90,6 +90,11 @@ static inline void ts_tree_set_fragile_right(TSTree *tree) { tree->options.fragile_right = true; } +static inline void ts_tree_set_fragile(TSTree *tree) { + ts_tree_set_fragile_left(tree); + ts_tree_set_fragile_right(tree); +} + static inline bool ts_tree_is_fragile_left(const TSTree *tree) { return tree->options.fragile_left; }