diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 12e71004db..d5112fa308 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1060,8 +1060,8 @@ void GDScriptParser::parse_class_body(bool p_is_multiline) { default: // Display a completion with identifiers. make_completion_context(COMPLETION_IDENTIFIER, nullptr); - push_error(vformat(R"(Unexpected "%s" in class body.)", current.get_name())); advance(); + push_error(vformat(R"(Unexpected %s in class body.)", previous.get_debug_name())); break; } if (token.type != GDScriptTokenizer::Token::STATIC) { diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 404b61fb40..dd936cbe7e 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -164,6 +164,15 @@ const char *GDScriptTokenizer::Token::get_name() const { return token_names[type]; } +String GDScriptTokenizer::Token::get_debug_name() const { + switch (type) { + case IDENTIFIER: + return vformat(R"(identifier "%s")", source); + default: + return vformat(R"("%s")", get_name()); + } +} + bool GDScriptTokenizer::Token::can_precede_bin_op() const { switch (type) { case IDENTIFIER: diff --git a/modules/gdscript/gdscript_tokenizer.h b/modules/gdscript/gdscript_tokenizer.h index 5d76375173..08e7417922 100644 --- a/modules/gdscript/gdscript_tokenizer.h +++ b/modules/gdscript/gdscript_tokenizer.h @@ -178,6 +178,7 @@ public: String source; const char *get_name() const; + String get_debug_name() const; bool can_precede_bin_op() const; bool is_identifier() const; bool is_node_name() const; diff --git a/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.gd b/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.gd new file mode 100644 index 0000000000..b036799d91 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.gd @@ -0,0 +1,7 @@ +# GH-96792 + +var error +error = true + +func test(): + pass diff --git a/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.out b/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.out new file mode 100644 index 0000000000..f6eed886d1 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/unexpected_token_in_class_body.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Unexpected identifier "error" in class body.