Quellcode durchsuchen

Merge pull request #63224 from Rindbee/update-GDScript-cache

Load/update GDScript from disk on load if cache mode is CACHE_MODE_IGNORE
Rémi Verschelde vor 2 Jahren
Ursprung
Commit
15ac442247

+ 1 - 1
modules/gdscript/gdscript.cpp

@@ -2390,7 +2390,7 @@ Ref<Resource> ResourceFormatLoaderGDScript::load(const String &p_path, const Str
 	}
 
 	Error err;
-	Ref<GDScript> script = GDScriptCache::get_full_script(p_path, err);
+	Ref<GDScript> script = GDScriptCache::get_full_script(p_path, err, "", p_cache_mode == CACHE_MODE_IGNORE);
 
 	// TODO: Reintroduce binary and encrypted scripts.
 

+ 10 - 4
modules/gdscript/gdscript_cache.cpp

@@ -183,20 +183,26 @@ Ref<GDScript> GDScriptCache::get_shallow_script(const String &p_path, const Stri
 	return script;
 }
 
-Ref<GDScript> GDScriptCache::get_full_script(const String &p_path, Error &r_error, const String &p_owner) {
+Ref<GDScript> GDScriptCache::get_full_script(const String &p_path, Error &r_error, const String &p_owner, bool p_update_from_disk) {
 	MutexLock lock(singleton->lock);
 
 	if (!p_owner.is_empty()) {
 		singleton->dependencies[p_owner].insert(p_path);
 	}
 
+	Ref<GDScript> script;
 	r_error = OK;
 	if (singleton->full_gdscript_cache.has(p_path)) {
-		return singleton->full_gdscript_cache[p_path];
+		script = Ref<GDScript>(singleton->full_gdscript_cache[p_path]);
+		if (!p_update_from_disk) {
+			return script;
+		}
 	}
 
-	Ref<GDScript> script = get_shallow_script(p_path);
-	ERR_FAIL_COND_V(script.is_null(), Ref<GDScript>());
+	if (script.is_null()) {
+		script = get_shallow_script(p_path);
+		ERR_FAIL_COND_V(script.is_null(), Ref<GDScript>());
+	}
 
 	r_error = script->load_source_code(p_path);
 

+ 1 - 1
modules/gdscript/gdscript_cache.h

@@ -88,7 +88,7 @@ public:
 	static Ref<GDScriptParserRef> get_parser(const String &p_path, GDScriptParserRef::Status status, Error &r_error, const String &p_owner = String());
 	static String get_source_code(const String &p_path);
 	static Ref<GDScript> get_shallow_script(const String &p_path, const String &p_owner = String());
-	static Ref<GDScript> get_full_script(const String &p_path, Error &r_error, const String &p_owner = String());
+	static Ref<GDScript> get_full_script(const String &p_path, Error &r_error, const String &p_owner = String(), bool p_update_from_disk = false);
 	static Error finish_compiling(const String &p_owner);
 
 	GDScriptCache();