Browse Source

Merge pull request #71197 from adamscott/add-default-virtual-path-gdscript

Add default virtual `gdscript://` path to `GDScript` instances
Rémi Verschelde 2 years ago
parent
commit
40b9c246b6

+ 3 - 1
modules/gdscript/gdscript.cpp

@@ -1037,7 +1037,7 @@ String GDScript::get_script_path() const {
 }
 
 Error GDScript::load_source_code(const String &p_path) {
-	if (p_path.is_empty() || ResourceLoader::get_resource_type(p_path.get_slice("::", 0)) == "PackedScene") {
+	if (p_path.is_empty() || p_path.begins_with("gdscript://") || ResourceLoader::get_resource_type(p_path.get_slice("::", 0)) == "PackedScene") {
 		return OK;
 	}
 
@@ -1363,6 +1363,8 @@ GDScript::GDScript() :
 
 		GDScriptLanguage::get_singleton()->script_list.add(&script_list);
 	}
+
+	path = vformat("gdscript://%d.gd", get_instance_id());
 }
 
 void GDScript::_save_orphaned_subclasses(GDScript::ClearData *p_clear_data) {

+ 20 - 0
modules/gdscript/tests/scripts/runtime/features/gdscript.gd

@@ -0,0 +1,20 @@
+func test():
+	var gdscr: = GDScript.new()
+	gdscr.source_code = '''
+extends Resource
+
+func test() -> void:
+	prints("Outer")
+	var inner = InnerClass.new()
+
+class InnerClass:
+	func _init() -> void:
+		prints("Inner")
+'''
+	@warning_ignore(return_value_discarded)
+	gdscr.reload()
+
+	var inst = gdscr.new()
+
+	@warning_ignore(unsafe_method_access)
+	inst.test()

+ 3 - 0
modules/gdscript/tests/scripts/runtime/features/gdscript.out

@@ -0,0 +1,3 @@
+GDTEST_OK
+Outer
+Inner