Browse Source

Returns null and does not cache when the source code of the script fails to load

This usually means that an `ERR_FILE*` error occurred.

Previously, using `GDScriptCache::get_full_script()` would ignore errors during loading.
Now, all errors are not ignored.

Judging in which period the error occurred, it can be judged based on the return value:
1. null + err : Error during script loading (load_source_code()).
2. script + err: Error during script parsing.
Rindbee 2 years ago
parent
commit
cbce374f68
2 changed files with 7 additions and 11 deletions
  1. 2 10
      modules/gdscript/gdscript.cpp
  2. 5 1
      modules/gdscript/gdscript_cache.cpp

+ 2 - 10
modules/gdscript/gdscript.cpp

@@ -2592,20 +2592,12 @@ Ref<GDScript> GDScriptLanguage::get_script_by_fully_qualified_name(const String
 /*************** RESOURCE ***************/
 
 Ref<Resource> ResourceFormatLoaderGDScript::load(const String &p_path, const String &p_original_path, Error *r_error, bool p_use_sub_threads, float *r_progress, CacheMode p_cache_mode) {
-	if (r_error) {
-		*r_error = ERR_FILE_CANT_OPEN;
-	}
-
 	Error err;
 	Ref<GDScript> scr = GDScriptCache::get_full_script(p_path, err, "", p_cache_mode == CACHE_MODE_IGNORE);
 
-	if (scr.is_null()) {
-		// Don't fail loading because of parsing error.
-		scr.instantiate();
-	}
-
 	if (r_error) {
-		*r_error = OK;
+		// Don't fail loading because of parsing error.
+		*r_error = scr.is_valid() ? OK : err;
 	}
 
 	return scr;

+ 5 - 1
modules/gdscript/gdscript_cache.cpp

@@ -253,7 +253,11 @@ Ref<GDScript> GDScriptCache::get_shallow_script(const String &p_path, Error &r_e
 	Ref<GDScript> script;
 	script.instantiate();
 	script->set_path(p_path, true);
-	script->load_source_code(p_path);
+	r_error = script->load_source_code(p_path);
+
+	if (r_error) {
+		return Ref<GDScript>(); // Returns null and does not cache when the script fails to load.
+	}
 
 	Ref<GDScriptParserRef> parser_ref = get_parser(p_path, GDScriptParserRef::PARSED, r_error);
 	if (r_error == OK) {