Browse Source

GDScript: Fix compilation of expressions compiling other classes

This PR is part of ongoing work on fixing cyclic dependencies in the GDScript
compiler.
ocean (they/them) 1 year ago
parent
commit
d330f5642e

+ 2 - 2
modules/gdscript/gdscript_analyzer.cpp

@@ -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;

+ 2 - 1
modules/gdscript/gdscript_compiler.cpp

@@ -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;