diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index bdd9d0cc..c2f5b02e 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -19,6 +19,7 @@ typedef unsigned short TSStateId; typedef struct { bool visible : 1; bool named : 1; + bool extra : 1; } TSSymbolMetadata; typedef struct TSLexer { diff --git a/spec/fixtures/parsers/anonymous_tokens.c b/spec/fixtures/parsers/anonymous_tokens.c index 7e54703a..14d8db00 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}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_LF] = {.visible = true, .named = false}, - [anon_sym_CR] = {.visible = true, .named = false}, - [aux_sym_SLASH_BSLASHd_SLASH] = {.visible = false, .named = false}, - [anon_sym_DQUOTEhello_DQUOTE] = {.visible = true, .named = false}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/arithmetic.c b/spec/fixtures/parsers/arithmetic.c index 99229951..902e45ea 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}, - [sym__expression] = {.visible = false, .named = false}, - [sym_sum] = {.visible = true, .named = true}, - [sym_difference] = {.visible = true, .named = true}, - [sym_product] = {.visible = true, .named = true}, - [sym_quotient] = {.visible = true, .named = true}, - [sym_exponent] = {.visible = true, .named = true}, - [sym_group] = {.visible = true, .named = true}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_PLUS] = {.visible = true, .named = false}, - [anon_sym_DASH] = {.visible = true, .named = false}, - [anon_sym_STAR] = {.visible = true, .named = false}, - [anon_sym_SLASH] = {.visible = true, .named = false}, - [anon_sym_CARET] = {.visible = true, .named = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false}, - [sym_number] = {.visible = true, .named = true}, - [sym_variable] = {.visible = true, .named = true}, - [sym_comment] = {.visible = true, .named = true}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/c.c b/spec/fixtures/parsers/c.c index 646ba5a4..af650e35 100644 --- a/spec/fixtures/parsers/c.c +++ b/spec/fixtures/parsers/c.c @@ -166,85 +166,85 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_translation_unit] = {.visible = true, .named = true}, - [sym_preproc_define] = {.visible = true, .named = true}, - [sym_function_definition] = {.visible = true, .named = true}, - [sym_declaration_specifiers] = {.visible = true, .named = true}, - [sym_storage_class_specifier] = {.visible = true, .named = true}, - [sym__type_specifier] = {.visible = false, .named = false}, - [sym_numeric_type_specifier] = {.visible = true, .named = true}, - [sym_struct_specifier] = {.visible = true, .named = true}, - [sym_type_name] = {.visible = true, .named = true}, - [sym_struct_declaration] = {.visible = true, .named = true}, - [sym_parameter_declaration] = {.visible = true, .named = true}, - [sym_declaration] = {.visible = true, .named = true}, - [sym__init_declarator] = {.visible = false, .named = false}, - [sym_initializer] = {.visible = true, .named = true}, - [sym_initializer_list] = {.visible = true, .named = true}, - [sym_designation] = {.visible = true, .named = true}, - [sym__declarator] = {.visible = false, .named = false}, - [sym__abstract_declarator] = {.visible = false, .named = false}, - [sym_pointer_declarator] = {.visible = true, .named = true}, - [sym_abstract_pointer_declarator] = {.visible = true, .named = true}, - [sym_function_declarator] = {.visible = true, .named = true}, - [sym_abstract_function_declarator] = {.visible = true, .named = true}, - [sym_array_declarator] = {.visible = true, .named = true}, - [sym_abstract_array_declarator] = {.visible = true, .named = true}, - [sym_type_qualifier] = {.visible = true, .named = true}, - [sym_compound_statement] = {.visible = true, .named = true}, - [sym__expression] = {.visible = false, .named = false}, - [sym_cast_expression] = {.visible = true, .named = true}, - [sym_math_expression] = {.visible = true, .named = true}, - [sym_call_expression] = {.visible = true, .named = true}, - [sym_pointer_expression] = {.visible = true, .named = true}, - [sym__statement] = {.visible = false, .named = false}, - [sym_expression_statement] = {.visible = true, .named = true}, - [sym_macro_type] = {.visible = true, .named = true}, - [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false}, - [aux_sym_declaration_specifiers_repeat1] = {.visible = false, .named = false}, - [aux_sym_numeric_type_specifier_repeat1] = {.visible = false, .named = false}, - [aux_sym_struct_specifier_repeat1] = {.visible = false, .named = false}, - [aux_sym_type_name_repeat1] = {.visible = false, .named = false}, - [aux_sym_declaration_repeat1] = {.visible = false, .named = false}, - [aux_sym_designation_repeat1] = {.visible = false, .named = false}, - [aux_sym_function_declarator_repeat1] = {.visible = false, .named = false}, - [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false}, - [aux_sym_call_expression_repeat1] = {.visible = false, .named = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_POUNDdefine] = {.visible = true, .named = false}, - [anon_sym_LF] = {.visible = true, .named = false}, - [sym_preproc_arg] = {.visible = true, .named = true}, - [anon_sym_typedef] = {.visible = true, .named = false}, - [anon_sym_extern] = {.visible = true, .named = false}, - [anon_sym_static] = {.visible = true, .named = false}, - [anon_sym_auto] = {.visible = true, .named = false}, - [anon_sym_register] = {.visible = true, .named = false}, - [anon_sym_signed] = {.visible = true, .named = false}, - [anon_sym_unsigned] = {.visible = true, .named = false}, - [anon_sym_long] = {.visible = true, .named = false}, - [anon_sym_short] = {.visible = true, .named = false}, - [anon_sym_struct] = {.visible = true, .named = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false}, - [anon_sym_COMMA] = {.visible = true, .named = false}, - [anon_sym_SEMI] = {.visible = true, .named = false}, - [anon_sym_EQ] = {.visible = true, .named = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false}, - [anon_sym_DOT] = {.visible = true, .named = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false}, - [anon_sym_STAR] = {.visible = true, .named = false}, - [anon_sym_const] = {.visible = true, .named = false}, - [anon_sym_restrict] = {.visible = true, .named = false}, - [anon_sym_volatile] = {.visible = true, .named = false}, - [anon_sym_PLUS] = {.visible = true, .named = false}, - [anon_sym_AMP] = {.visible = true, .named = false}, - [sym_string] = {.visible = true, .named = true}, - [sym_identifier] = {.visible = true, .named = true}, - [sym_number] = {.visible = true, .named = true}, - [sym_comment] = {.visible = true, .named = true}, + [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__statement] = {.visible = false, .named = false, .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}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/cpp.c b/spec/fixtures/parsers/cpp.c index 38c9e9c1..b2be5740 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}, - [sym__declaration] = {.visible = false, .named = false}, - [sym__block_declaration] = {.visible = false, .named = false}, - [sym_function_definition] = {.visible = true, .named = true}, - [sym_simple_declaration] = {.visible = true, .named = true}, - [sym_namespace_alias_definition] = {.visible = true, .named = true}, - [sym_scoped_identifier] = {.visible = true, .named = true}, - [sym_declarator] = {.visible = true, .named = true}, - [sym_abstract_declarator] = {.visible = true, .named = true}, - [sym_direct_declarator] = {.visible = true, .named = true}, - [sym_parameter_declaration] = {.visible = true, .named = true}, - [sym_direct_abstract_declarator] = {.visible = true, .named = true}, - [sym_cv_qualifier] = {.visible = true, .named = true}, - [sym_type_id] = {.visible = true, .named = true}, - [sym_pointer_operator] = {.visible = true, .named = true}, - [sym_function_body] = {.visible = true, .named = true}, - [sym_constructor_initializer] = {.visible = true, .named = true}, - [sym_member_initializer] = {.visible = true, .named = true}, - [sym_init_declarator] = {.visible = true, .named = true}, - [sym_decl_specifier] = {.visible = true, .named = true}, - [sym_storage_class_specifier] = {.visible = true, .named = true}, - [sym_type_specifier] = {.visible = true, .named = true}, - [sym_compound_statement] = {.visible = true, .named = true}, - [sym__statement] = {.visible = false, .named = false}, - [sym_expression_statement] = {.visible = true, .named = true}, - [sym_initializer] = {.visible = true, .named = true}, - [sym_initializer_clause] = {.visible = true, .named = true}, - [sym_function_specifier] = {.visible = true, .named = true}, - [sym__expression] = {.visible = false, .named = false}, - [sym_call_expression] = {.visible = true, .named = true}, - [sym_relational_expression] = {.visible = true, .named = true}, - [sym_template_call] = {.visible = true, .named = true}, - [aux_sym_translation_unit_repeat1] = {.visible = false, .named = false}, - [aux_sym_function_definition_repeat1] = {.visible = false, .named = false}, - [aux_sym_simple_declaration_repeat1] = {.visible = false, .named = false}, - [aux_sym_declarator_repeat1] = {.visible = false, .named = false}, - [aux_sym_direct_declarator_repeat1] = {.visible = false, .named = false}, - [aux_sym_pointer_operator_repeat1] = {.visible = false, .named = false}, - [aux_sym_constructor_initializer_repeat1] = {.visible = false, .named = false}, - [aux_sym_compound_statement_repeat1] = {.visible = false, .named = false}, - [aux_sym_call_expression_repeat1] = {.visible = false, .named = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_EQ] = {.visible = true, .named = false}, - [anon_sym_default] = {.visible = true, .named = false}, - [anon_sym_delete] = {.visible = true, .named = false}, - [anon_sym_SEMI] = {.visible = true, .named = false}, - [anon_sym_COMMA] = {.visible = true, .named = false}, - [anon_sym_namespace] = {.visible = true, .named = false}, - [anon_sym_COLON_COLON] = {.visible = true, .named = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false}, - [anon_sym_const] = {.visible = true, .named = false}, - [anon_sym_volatile] = {.visible = true, .named = false}, - [anon_sym_STAR] = {.visible = true, .named = false}, - [anon_sym_AMP] = {.visible = true, .named = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false}, - [anon_sym_COLON] = {.visible = true, .named = false}, - [anon_sym_DOT_DOT_DOT] = {.visible = true, .named = false}, - [anon_sym_initializer_list] = {.visible = true, .named = false}, - [anon_sym_friend] = {.visible = true, .named = false}, - [anon_sym_typedef] = {.visible = true, .named = false}, - [anon_sym_constexpr] = {.visible = true, .named = false}, - [anon_sym_register] = {.visible = true, .named = false}, - [anon_sym_static] = {.visible = true, .named = false}, - [anon_sym_thread_local] = {.visible = true, .named = false}, - [anon_sym_extern] = {.visible = true, .named = false}, - [anon_sym_mutable] = {.visible = true, .named = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false}, - [anon_sym_inline] = {.visible = true, .named = false}, - [anon_sym_virtual] = {.visible = true, .named = false}, - [anon_sym_explicit] = {.visible = true, .named = false}, - [anon_sym_GT] = {.visible = true, .named = false}, - [anon_sym_GT_EQ] = {.visible = true, .named = false}, - [anon_sym_EQ_EQ] = {.visible = true, .named = false}, - [anon_sym_BANG_EQ] = {.visible = true, .named = false}, - [anon_sym_LT_EQ] = {.visible = true, .named = false}, - [anon_sym_LT] = {.visible = true, .named = false}, - [sym_string] = {.visible = true, .named = true}, - [sym_identifier] = {.visible = true, .named = true}, - [sym_number] = {.visible = true, .named = true}, - [sym_comment] = {.visible = true, .named = true}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/golang.c b/spec/fixtures/parsers/golang.c index 6726c25b..31d0bd43 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}, - [sym_package_directive] = {.visible = true, .named = true}, - [sym_imports_block] = {.visible = true, .named = true}, - [sym_package_import] = {.visible = true, .named = true}, - [sym__declaration] = {.visible = false, .named = false}, - [sym_type_declaration] = {.visible = true, .named = true}, - [sym_var_declaration] = {.visible = true, .named = true}, - [sym_func_declaration] = {.visible = true, .named = true}, - [sym_block_statement] = {.visible = true, .named = true}, - [sym__type_expression] = {.visible = false, .named = false}, - [sym_pointer_type] = {.visible = true, .named = true}, - [sym_map_type] = {.visible = true, .named = true}, - [sym_slice_type] = {.visible = true, .named = true}, - [sym_struct_type] = {.visible = true, .named = true}, - [sym_interface_type] = {.visible = true, .named = true}, - [sym__statement] = {.visible = false, .named = false}, - [sym_return_statement] = {.visible = true, .named = true}, - [sym_short_var_declaration] = {.visible = true, .named = true}, - [sym_range_statement] = {.visible = true, .named = true}, - [sym_if_statement] = {.visible = true, .named = true}, - [sym_expression_statement] = {.visible = true, .named = true}, - [sym__expression] = {.visible = false, .named = false}, - [sym_call_expression] = {.visible = true, .named = true}, - [sym_selector_expression] = {.visible = true, .named = true}, - [sym_math_op] = {.visible = true, .named = true}, - [sym_bool_op] = {.visible = true, .named = true}, - [sym__func_signature] = {.visible = false, .named = false}, - [sym_package_name] = {.visible = true, .named = true}, - [sym_var_name] = {.visible = true, .named = true}, - [sym_type_name] = {.visible = true, .named = true}, - [aux_sym_program_repeat1] = {.visible = false, .named = false}, - [aux_sym_program_repeat2] = {.visible = false, .named = false}, - [aux_sym_imports_block_repeat1] = {.visible = false, .named = false}, - [aux_sym_block_statement_repeat1] = {.visible = false, .named = false}, - [aux_sym_struct_type_repeat1] = {.visible = false, .named = false}, - [aux_sym_interface_type_repeat1] = {.visible = false, .named = false}, - [aux_sym_return_statement_repeat1] = {.visible = false, .named = false}, - [aux_sym_short_var_declaration_repeat1] = {.visible = false, .named = false}, - [aux_sym__func_signature_repeat1] = {.visible = false, .named = false}, - [aux_sym__func_signature_repeat2] = {.visible = false, .named = false}, - [aux_sym__func_signature_repeat3] = {.visible = false, .named = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_package] = {.visible = true, .named = false}, - [anon_sym_import] = {.visible = true, .named = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false}, - [anon_sym_type] = {.visible = true, .named = false}, - [anon_sym_SEMI] = {.visible = true, .named = false}, - [anon_sym_var] = {.visible = true, .named = false}, - [anon_sym_EQ] = {.visible = true, .named = false}, - [anon_sym_func] = {.visible = true, .named = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false}, - [anon_sym_STAR] = {.visible = true, .named = false}, - [anon_sym_map] = {.visible = true, .named = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false}, - [anon_sym_struct] = {.visible = true, .named = false}, - [anon_sym_interface] = {.visible = true, .named = false}, - [anon_sym_return] = {.visible = true, .named = false}, - [anon_sym_COMMA] = {.visible = true, .named = false}, - [anon_sym_COLON_EQ] = {.visible = true, .named = false}, - [anon_sym_for] = {.visible = true, .named = false}, - [anon_sym_range] = {.visible = true, .named = false}, - [anon_sym_if] = {.visible = true, .named = false}, - [anon_sym_else] = {.visible = true, .named = false}, - [anon_sym_DOT] = {.visible = true, .named = false}, - [anon_sym_SLASH] = {.visible = true, .named = false}, - [anon_sym_PLUS] = {.visible = true, .named = false}, - [anon_sym_DASH] = {.visible = true, .named = false}, - [anon_sym_PIPE_PIPE] = {.visible = true, .named = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false}, - [anon_sym_EQ_EQ] = {.visible = true, .named = false}, - [anon_sym_LT_EQ] = {.visible = true, .named = false}, - [anon_sym_LT] = {.visible = true, .named = false}, - [anon_sym_GT_EQ] = {.visible = true, .named = false}, - [anon_sym_GT] = {.visible = true, .named = false}, - [anon_sym_BANG] = {.visible = true, .named = false}, - [sym__line_break] = {.visible = false, .named = false}, - [sym_string] = {.visible = true, .named = true}, - [sym__identifier] = {.visible = false, .named = false}, - [sym_number] = {.visible = true, .named = true}, - [sym_comment] = {.visible = true, .named = true}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/javascript.c b/spec/fixtures/parsers/javascript.c index 5108d6de..4b2b50b1 100644 --- a/spec/fixtures/parsers/javascript.c +++ b/spec/fixtures/parsers/javascript.c @@ -220,112 +220,112 @@ static const char *ts_symbol_names[] = { }; static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = { - [sym_program] = {.visible = true, .named = true}, - [sym__statement] = {.visible = false, .named = false}, - [sym_expression_statement] = {.visible = true, .named = true}, - [sym_var_declaration] = {.visible = true, .named = true}, - [sym_statement_block] = {.visible = true, .named = true}, - [sym_if_statement] = {.visible = true, .named = true}, - [sym_switch_statement] = {.visible = true, .named = true}, - [sym_for_statement] = {.visible = true, .named = true}, - [sym_for_in_statement] = {.visible = true, .named = true}, - [sym_while_statement] = {.visible = true, .named = true}, - [sym_try_statement] = {.visible = true, .named = true}, - [sym_return_statement] = {.visible = true, .named = true}, - [sym_throw_statement] = {.visible = true, .named = true}, - [sym_break_statement] = {.visible = true, .named = true}, - [sym_delete_statement] = {.visible = true, .named = true}, - [sym_case] = {.visible = true, .named = true}, - [sym_default] = {.visible = true, .named = true}, - [sym_catch] = {.visible = true, .named = true}, - [sym_finally] = {.visible = true, .named = true}, - [sym_var_assignment] = {.visible = true, .named = true}, - [sym__paren_expression] = {.visible = false, .named = false}, - [sym__expression] = {.visible = false, .named = false}, - [sym_object] = {.visible = true, .named = true}, - [sym_array] = {.visible = true, .named = true}, - [sym_function_expression] = {.visible = true, .named = true}, - [sym_function_call] = {.visible = true, .named = true}, - [sym_constructor_call] = {.visible = true, .named = true}, - [sym_member_access] = {.visible = true, .named = true}, - [sym_subscript_access] = {.visible = true, .named = true}, - [sym_assignment] = {.visible = true, .named = true}, - [sym_math_assignment] = {.visible = true, .named = true}, - [sym_ternary] = {.visible = true, .named = true}, - [sym_bool_op] = {.visible = true, .named = true}, - [sym_math_op] = {.visible = true, .named = true}, - [sym_rel_op] = {.visible = true, .named = true}, - [sym_type_op] = {.visible = true, .named = true}, - [sym_formal_parameters] = {.visible = true, .named = true}, - [sym_arguments] = {.visible = true, .named = true}, - [sym_pair] = {.visible = true, .named = true}, - [aux_sym_program_repeat1] = {.visible = false, .named = false}, - [aux_sym_var_declaration_repeat1] = {.visible = false, .named = false}, - [aux_sym_switch_statement_repeat1] = {.visible = false, .named = false}, - [aux_sym_object_repeat1] = {.visible = false, .named = false}, - [aux_sym_array_repeat1] = {.visible = false, .named = false}, - [aux_sym_formal_parameters_repeat1] = {.visible = false, .named = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_SEMI] = {.visible = true, .named = false}, - [anon_sym_var] = {.visible = true, .named = false}, - [anon_sym_COMMA] = {.visible = true, .named = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false}, - [anon_sym_if] = {.visible = true, .named = false}, - [anon_sym_else] = {.visible = true, .named = false}, - [anon_sym_switch] = {.visible = true, .named = false}, - [anon_sym_for] = {.visible = true, .named = false}, - [anon_sym_LPAREN] = {.visible = true, .named = false}, - [anon_sym_RPAREN] = {.visible = true, .named = false}, - [anon_sym_in] = {.visible = true, .named = false}, - [anon_sym_while] = {.visible = true, .named = false}, - [anon_sym_try] = {.visible = true, .named = false}, - [anon_sym_return] = {.visible = true, .named = false}, - [anon_sym_throw] = {.visible = true, .named = false}, - [anon_sym_break] = {.visible = true, .named = false}, - [anon_sym_delete] = {.visible = true, .named = false}, - [anon_sym_case] = {.visible = true, .named = false}, - [anon_sym_COLON] = {.visible = true, .named = false}, - [anon_sym_default] = {.visible = true, .named = false}, - [anon_sym_catch] = {.visible = true, .named = false}, - [anon_sym_finally] = {.visible = true, .named = false}, - [anon_sym_EQ] = {.visible = true, .named = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false}, - [anon_sym_function] = {.visible = true, .named = false}, - [anon_sym_new] = {.visible = true, .named = false}, - [anon_sym_DOT] = {.visible = true, .named = false}, - [anon_sym_PLUS_EQ] = {.visible = true, .named = false}, - [anon_sym_DASH_EQ] = {.visible = true, .named = false}, - [anon_sym_STAR_EQ] = {.visible = true, .named = false}, - [anon_sym_SLASH_EQ] = {.visible = true, .named = false}, - [anon_sym_QMARK] = {.visible = true, .named = false}, - [anon_sym_PIPE_PIPE] = {.visible = true, .named = false}, - [anon_sym_AMP_AMP] = {.visible = true, .named = false}, - [anon_sym_BANG] = {.visible = true, .named = false}, - [anon_sym_PLUS_PLUS] = {.visible = true, .named = false}, - [anon_sym_DASH_DASH] = {.visible = true, .named = false}, - [anon_sym_STAR] = {.visible = true, .named = false}, - [anon_sym_SLASH] = {.visible = true, .named = false}, - [anon_sym_PLUS] = {.visible = true, .named = false}, - [anon_sym_DASH] = {.visible = true, .named = false}, - [anon_sym_EQ_EQ_EQ] = {.visible = true, .named = false}, - [anon_sym_BANG_EQ_EQ] = {.visible = true, .named = false}, - [anon_sym_LT] = {.visible = true, .named = false}, - [anon_sym_GT] = {.visible = true, .named = false}, - [anon_sym_instanceof] = {.visible = true, .named = false}, - [anon_sym_typeof] = {.visible = true, .named = false}, - [sym_comment] = {.visible = true, .named = true}, - [sym_string] = {.visible = true, .named = true}, - [sym_regex] = {.visible = true, .named = true}, - [sym_number] = {.visible = true, .named = true}, - [sym_identifier] = {.visible = true, .named = true}, - [sym_null] = {.visible = true, .named = true}, - [sym_undefined] = {.visible = true, .named = true}, - [sym_true] = {.visible = true, .named = true}, - [sym_false] = {.visible = true, .named = true}, - [sym__line_break] = {.visible = false, .named = false}, + [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}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/spec/fixtures/parsers/json.c b/spec/fixtures/parsers/json.c index 18eaf998..19c46be9 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}, - [sym_object] = {.visible = true, .named = true}, - [sym_array] = {.visible = true, .named = true}, - [aux_sym_object_repeat1] = {.visible = false, .named = false}, - [aux_sym_array_repeat1] = {.visible = false, .named = false}, - [ts_builtin_sym_error] = {.visible = true, .named = true}, - [ts_builtin_sym_end] = {.visible = false, .named = false}, - [anon_sym_LBRACE] = {.visible = true, .named = false}, - [anon_sym_COLON] = {.visible = true, .named = false}, - [anon_sym_COMMA] = {.visible = true, .named = false}, - [anon_sym_RBRACE] = {.visible = true, .named = false}, - [anon_sym_LBRACK] = {.visible = true, .named = false}, - [anon_sym_RBRACK] = {.visible = true, .named = false}, - [sym_string] = {.visible = true, .named = true}, - [sym_number] = {.visible = true, .named = true}, - [sym_null] = {.visible = true, .named = true}, - [sym_true] = {.visible = true, .named = true}, - [sym_false] = {.visible = true, .named = true}, + [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}, }; static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) { diff --git a/src/compiler/build_tables/build_lex_table.cc b/src/compiler/build_tables/build_lex_table.cc index 1777700a..bdbdabc4 100644 --- a/src/compiler/build_tables/build_lex_table.cc +++ b/src/compiler/build_tables/build_lex_table.cc @@ -55,7 +55,7 @@ class LexTableBuilder { parse_state.lex_state_id = add_lex_state(item_set); } - LexItemSet error_item_set = build_lex_item_set(parse_table->symbols, true); + LexItemSet error_item_set = build_lex_item_set(parse_table->all_symbols(), true); populate_lex_state(error_item_set, LexTable::ERROR_STATE_ID); return lex_table; diff --git a/src/compiler/build_tables/build_parse_table.cc b/src/compiler/build_tables/build_parse_table.cc index 83a0ceed..a4989abc 100644 --- a/src/compiler/build_tables/build_parse_table.cc +++ b/src/compiler/build_tables/build_parse_table.cc @@ -36,6 +36,7 @@ class ParseTableBuilder { vector> item_sets_to_process; ParseTable parse_table; std::set conflicts; + ParseItemSet null_item_set; public: ParseTableBuilder(const SyntaxGrammar &grammar, @@ -65,7 +66,6 @@ class ParseTableBuilder { add_reduce_actions(item_set, state_id); add_shift_actions(item_set, state_id); - add_shift_extra_actions(item_set, state_id); if (!conflicts.empty()) return { parse_table, new GrammarError(GrammarErrorTypeParseConflict, @@ -73,10 +73,12 @@ class ParseTableBuilder { *conflicts.begin()) }; } - for (ParseStateId state = 0; state < parse_table.states.size(); state++) + for (ParseStateId state = 0; state < parse_table.states.size(); state++) { + add_shift_extra_actions(state); add_reduce_extra_actions(state); + } - parse_table.symbols.insert(rules::ERROR()); + parse_table.symbols.insert({ rules::ERROR(), {} }); return { parse_table, nullptr }; } @@ -127,16 +129,14 @@ class ParseTableBuilder { } } - void add_shift_extra_actions(const ParseItemSet &item_set, - ParseStateId state_id) { + void add_shift_extra_actions(ParseStateId state_id) { for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens) add_action(state_id, ubiquitous_symbol, ParseAction::ShiftExtra(), - item_set); + null_item_set); } void add_reduce_extra_actions(ParseStateId state_id) { const ParseState &state = parse_table.states[state_id]; - const ParseItemSet item_set; for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens) { const auto &actions_for_symbol = state.actions.find(ubiquitous_symbol); @@ -148,7 +148,7 @@ class ParseTableBuilder { size_t dest_state_id = action.state_index; ParseAction reduce_extra = ParseAction::ReduceExtra(ubiquitous_symbol); for (const auto &pair : state.actions) - add_action(dest_state_id, pair.first, reduce_extra, item_set); + add_action(dest_state_id, pair.first, reduce_extra, null_item_set); } } } diff --git a/src/compiler/generate_code/c_code.cc b/src/compiler/generate_code/c_code.cc index 96aae2eb..63d76665 100644 --- a/src/compiler/generate_code/c_code.cc +++ b/src/compiler/generate_code/c_code.cc @@ -117,7 +117,8 @@ class CCodeGenerator { line("enum {"); indent([&]() { bool at_start = true; - for (const auto &symbol : parse_table.symbols) + for (const auto &entry : parse_table.symbols) { + const rules::Symbol &symbol = entry.first; if (!symbol.is_built_in()) { if (at_start) line(symbol_id(symbol) + " = ts_builtin_sym_start,"); @@ -125,6 +126,7 @@ class CCodeGenerator { line(symbol_id(symbol) + ","); at_start = false; } + } }); line("};"); line(); @@ -133,9 +135,9 @@ class CCodeGenerator { void add_symbol_names_list() { line("static const char *ts_symbol_names[] = {"); indent([&]() { - for (const auto &symbol : parse_table.symbols) - line("[" + symbol_id(symbol) + "] = \"" + - sanitize_name_for_string(symbol_name(symbol)) + "\","); + for (const auto &entry : parse_table.symbols) + line("[" + symbol_id(entry.first) + "] = \"" + + sanitize_name_for_string(symbol_name(entry.first)) + "\","); }); line("};"); line(); @@ -144,7 +146,8 @@ class CCodeGenerator { void add_symbol_node_types_list() { line("static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {"); indent([&]() { - for (const auto &symbol : parse_table.symbols) { + for (const auto &entry : parse_table.symbols) { + const rules::Symbol &symbol = entry.first; line("[" + symbol_id(symbol) + "] = {"); switch (symbol_type(symbol)) { @@ -160,6 +163,13 @@ class CCodeGenerator { break; } + add(", "); + + if (entry.second.structural) + add(".extra = false"); + else + add(".extra = true"); + add("},"); } }); diff --git a/src/compiler/parse_table.cc b/src/compiler/parse_table.cc index 3042dbd7..f8a90e59 100644 --- a/src/compiler/parse_table.cc +++ b/src/compiler/parse_table.cc @@ -104,6 +104,13 @@ set ParseState::expected_inputs() const { return result; } +set ParseTable::all_symbols() const { + set result; + for (auto &pair : symbols) + result.insert(pair.first); + return result; +} + ParseStateId ParseTable::add_state() { states.push_back(ParseState()); return states.size() - 1; @@ -111,14 +118,16 @@ ParseStateId ParseTable::add_state() { ParseAction &ParseTable::set_action(ParseStateId id, Symbol symbol, ParseAction action) { - symbols.insert(symbol); + bool structural = action.type != ParseActionTypeShiftExtra; + symbols[symbol].structural += structural; states[id].actions[symbol] = vector({ action }); return *states[id].actions[symbol].begin(); } ParseAction &ParseTable::add_action(ParseStateId id, Symbol symbol, ParseAction action) { - symbols.insert(symbol); + bool structural = action.type != ParseActionTypeShiftExtra; + symbols[symbol].structural += structural; states[id].actions[symbol].push_back(action); return *states[id].actions[symbol].rbegin(); } diff --git a/src/compiler/parse_table.h b/src/compiler/parse_table.h index 6a6e4442..28af3e0a 100644 --- a/src/compiler/parse_table.h +++ b/src/compiler/parse_table.h @@ -82,8 +82,13 @@ class ParseState { LexStateId lex_state_id; }; +struct ParseTableSymbolMetadata { + bool structural; +}; + class ParseTable { public: + std::set all_symbols() const; ParseStateId add_state(); ParseAction &set_action(ParseStateId state_id, rules::Symbol symbol, ParseAction action); @@ -91,7 +96,7 @@ class ParseTable { ParseAction action); std::vector states; - std::set symbols; + std::map symbols; std::set fragile_productions; };