GDScript: Make check for exposed classes more consistent
Some places were already checking if classes from ClassDB were exposed, while others didn't. This makes the check more consistent to avoid disparities which can lead to crashes.
This commit is contained in:
@ -31,6 +31,7 @@
|
||||
#include "gdscript_compiler.h"
|
||||
|
||||
#include "gdscript.h"
|
||||
#include "gdscript_analyzer.h"
|
||||
#include "gdscript_byte_codegen.h"
|
||||
#include "gdscript_cache.h"
|
||||
#include "gdscript_utility_functions.h"
|
||||
@ -699,7 +700,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
|
||||
} else {
|
||||
class_name = base.type.native_type == StringName() ? base.type.script_type->get_instance_base_type() : base.type.native_type;
|
||||
}
|
||||
if (ClassDB::class_exists(class_name) && ClassDB::has_method(class_name, call->function_name)) {
|
||||
if (GDScriptAnalyzer::class_exists(class_name) && ClassDB::has_method(class_name, call->function_name)) {
|
||||
MethodBind *method = ClassDB::get_method(class_name, call->function_name);
|
||||
if (_can_use_validate_call(method, arguments)) {
|
||||
// Exact arguments, use validated call.
|
||||
@ -2756,7 +2757,7 @@ Error GDScriptCompiler::_prepare_compilation(GDScript *p_script, const GDScriptP
|
||||
p_script->_is_abstract = p_class->is_abstract;
|
||||
|
||||
if (p_script->local_name != StringName()) {
|
||||
if (ClassDB::class_exists(p_script->local_name) && ClassDB::is_class_exposed(p_script->local_name)) {
|
||||
if (GDScriptAnalyzer::class_exists(p_script->local_name)) {
|
||||
_set_error(vformat(R"(The class "%s" shadows a native class)", p_script->local_name), p_class);
|
||||
return ERR_ALREADY_EXISTS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user