GDScript: Fix compilation of expressions compiling other classes

This PR is part of ongoing work on fixing cyclic dependencies in the GDScript
compiler.
This commit is contained in:
ocean (they/them) 2023-09-12 11:11:09 -04:00
parent 98b50eb308
commit d330f5642e
2 changed files with 4 additions and 3 deletions

View file

@ -3465,7 +3465,7 @@ void GDScriptAnalyzer::reduce_identifier_from_base_set_class(GDScriptParser::Ide
p_identifier->set_datatype(p_identifier_datatype); p_identifier->set_datatype(p_identifier_datatype);
Error err = OK; Error err = OK;
Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_identifier_datatype.script_path, err); Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_identifier_datatype.script_path, err, parser->script_path);
if (err) { if (err) {
push_error(vformat(R"(Error while getting cache for script "%s".)", p_identifier_datatype.script_path), p_identifier); push_error(vformat(R"(Error while getting cache for script "%s".)", p_identifier_datatype.script_path), p_identifier);
return; return;
@ -4589,7 +4589,7 @@ Array GDScriptAnalyzer::make_array_from_element_datatype(const GDScriptParser::D
Ref<Script> script_type = p_element_datatype.script_type; Ref<Script> script_type = p_element_datatype.script_type;
if (p_element_datatype.kind == GDScriptParser::DataType::CLASS && script_type.is_null()) { if (p_element_datatype.kind == GDScriptParser::DataType::CLASS && script_type.is_null()) {
Error err = OK; Error err = OK;
Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_element_datatype.script_path, err); Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_element_datatype.script_path, err, parser->script_path);
if (err) { if (err) {
push_error(vformat(R"(Error while getting cache for script "%s".)", p_element_datatype.script_path), p_source_node); push_error(vformat(R"(Error while getting cache for script "%s".)", p_element_datatype.script_path), p_source_node);
return array; return array;

View file

@ -402,7 +402,8 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
String global_class_path = ScriptServer::get_global_class_path(identifier); String global_class_path = ScriptServer::get_global_class_path(identifier);
if (ResourceLoader::get_resource_type(global_class_path) == "GDScript") { if (ResourceLoader::get_resource_type(global_class_path) == "GDScript") {
Error err = OK; Error err = OK;
res = GDScriptCache::get_full_script(global_class_path, err); // Should not need to pass p_owner since analyzer will already have done it.
res = GDScriptCache::get_shallow_script(global_class_path, err);
if (err != OK) { if (err != OK) {
_set_error("Can't load global class " + String(identifier), p_expression); _set_error("Can't load global class " + String(identifier), p_expression);
r_error = ERR_COMPILATION_FAILED; r_error = ERR_COMPILATION_FAILED;