diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 97aeba684e..1973bfe97d 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -4632,11 +4632,15 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident } if (GDScriptLanguage::get_singleton()->has_any_global_constant(name)) { - Variant constant = GDScriptLanguage::get_singleton()->get_any_global_constant(name); - p_identifier->set_datatype(type_from_variant(constant, p_identifier)); - p_identifier->is_constant = true; - p_identifier->reduced_value = constant; - return; + // We checked for `ClassDB` classes above. Any `ClassDB` class that reaches this point is not exposed and should not be accessible. + // TODO: Remove this check once `globals` does only contain publicly available things. + if (!ClassDB::class_exists(name)) { + Variant constant = GDScriptLanguage::get_singleton()->get_any_global_constant(name); + p_identifier->set_datatype(type_from_variant(constant, p_identifier)); + p_identifier->is_constant = true; + p_identifier->reduced_value = constant; + return; + } } if (CoreConstants::is_global_enum(name)) { diff --git a/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.gd b/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.gd new file mode 100644 index 0000000000..1ed7255708 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.gd @@ -0,0 +1,3 @@ +func test(): + print(GDScriptFunctionState) + print(GDScriptNativeClass) diff --git a/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.out b/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.out new file mode 100644 index 0000000000..a5085b931b --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/invalid_identifier.out @@ -0,0 +1,3 @@ +GDTEST_ANALYZER_ERROR +>> ERROR at line 2: Identifier "GDScriptFunctionState" not declared in the current scope. +>> ERROR at line 3: Identifier "GDScriptNativeClass" not declared in the current scope.