Check for valid values when checking for class members

- Check if GDScript was compiled correctly before checking its functions
and properties.
- Check if native class name is actually set before looking for it in
the ClassDB.
This commit is contained in:
George Marques 2018-11-17 23:23:40 -02:00
parent 9eb4b6d91a
commit 3d2d04afd4
No known key found for this signature in database
GPG key ID: 046BD46A3201E43D

View file

@ -6432,6 +6432,10 @@ bool GDScriptParser::_get_function_signature(DataType &p_base_type, const String
StringName native;
if (p_base_type.kind == DataType::GDSCRIPT) {
base_gdscript = p_base_type.script_type;
if (base_gdscript.is_null() || !base_gdscript->is_valid()) {
// GDScript wasn't properly compíled, don't bother trying
return false;
}
} else if (p_base_type.kind == DataType::SCRIPT) {
base_script = p_base_type.script_type;
} else if (p_base_type.kind == DataType::NATIVE) {
@ -6472,6 +6476,12 @@ bool GDScriptParser::_get_function_signature(DataType &p_base_type, const String
base_script = base_script->get_base_script();
}
if (native == StringName()) {
// Empty native class, might happen in some Script implementations
// Just ignore it
return false;
}
#ifdef DEBUG_METHODS_ENABLED
// Only native remains
@ -6914,6 +6924,10 @@ bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringN
Ref<GDScript> gds;
if (base_type.kind == DataType::GDSCRIPT) {
gds = base_type.script_type;
if (gds.is_null() || !gds->is_valid()) {
// GDScript wasn't properly compíled, don't bother trying
return false;
}
}
Ref<Script> scr;
@ -6976,6 +6990,12 @@ bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringN
scr = scr->get_base_script();
}
if (native == StringName()) {
// Empty native class, might happen in some Script implementations
// Just ignore it
return false;
}
// Check ClassDB
if (!ClassDB::class_exists(native)) {
native = "_" + native.operator String();