diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index fa3871e9ef1..75a7e713b53 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -4437,6 +4437,7 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident case GDScriptParser::IdentifierNode::UNDEFINED_SOURCE: case GDScriptParser::IdentifierNode::MEMBER_FUNCTION: case GDScriptParser::IdentifierNode::MEMBER_CLASS: + case GDScriptParser::IdentifierNode::NATIVE_CLASS: break; } @@ -4507,6 +4508,7 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident case GDScriptParser::IdentifierNode::MEMBER_CLASS: case GDScriptParser::IdentifierNode::INHERITED_VARIABLE: case GDScriptParser::IdentifierNode::STATIC_VARIABLE: + case GDScriptParser::IdentifierNode::NATIVE_CLASS: return; // No need to capture. } @@ -4539,6 +4541,7 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident } if (class_exists(name)) { + p_identifier->source = GDScriptParser::IdentifierNode::NATIVE_CLASS; p_identifier->set_datatype(make_native_meta_type(name)); return; } @@ -5990,7 +5993,7 @@ void GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_identifier if (Variant::has_utility_function(name)) { parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "built-in function"); return; - } else if (ClassDB::class_exists(name)) { + } else if (class_exists(name)) { parser->push_warning(p_identifier, GDScriptWarning::SHADOWED_GLOBAL_IDENTIFIER, p_context, name, "native class"); return; } else if (ScriptServer::is_global_class(name)) { diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 612540b5f26..e813fb46133 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -413,6 +413,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code } break; // GLOBALS. + case GDScriptParser::IdentifierNode::NATIVE_CLASS: case GDScriptParser::IdentifierNode::UNDEFINED_SOURCE: { // Try globals. if (GDScriptLanguage::get_singleton()->get_global_map().has(identifier)) { @@ -673,7 +674,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code if (!call->is_super && subscript->base->type == GDScriptParser::Node::IDENTIFIER && GDScriptParser::get_builtin_type(static_cast(subscript->base)->name) < Variant::VARIANT_MAX) { gen->write_call_builtin_type_static(result, GDScriptParser::get_builtin_type(static_cast(subscript->base)->name), subscript->attribute->name, arguments); } else if (!call->is_super && subscript->base->type == GDScriptParser::Node::IDENTIFIER && call->function_name != SNAME("new") && - ClassDB::class_exists(static_cast(subscript->base)->name) && !Engine::get_singleton()->has_singleton(static_cast(subscript->base)->name)) { + static_cast(subscript->base)->source == GDScriptParser::IdentifierNode::NATIVE_CLASS && !Engine::get_singleton()->has_singleton(static_cast(subscript->base)->name)) { // It's a static native method call. StringName class_name = static_cast(subscript->base)->name; MethodBind *method = ClassDB::get_method(class_name, subscript->attribute->name); diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 0f69314d8cb..45c03618e78 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -2287,6 +2287,7 @@ static bool _guess_identifier_type(GDScriptParser::CompletionContext &p_context, case GDScriptParser::IdentifierNode::MEMBER_CLASS: case GDScriptParser::IdentifierNode::INHERITED_VARIABLE: case GDScriptParser::IdentifierNode::STATIC_VARIABLE: + case GDScriptParser::IdentifierNode::NATIVE_CLASS: can_be_local = false; break; default: diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index c4bbb08dc1c..8a8ab5af458 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -904,6 +904,7 @@ public: MEMBER_CLASS, INHERITED_VARIABLE, STATIC_VARIABLE, + NATIVE_CLASS, }; Source source = UNDEFINED_SOURCE;