diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2020-01-16 15:49:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-16 15:49:52 +0100 |
commit | cd7b51b9434cddb5f6104ee1ec9e88d1092d57af (patch) | |
tree | e3e39cab61882d7ea6e9714e4e3984698a718088 /modules/gdscript/gdscript_compiler.cpp | |
parent | 9986f3804caf32dc092ac7f094381745dc3ae8f8 (diff) | |
parent | 86aa12e806515e68514d4e8f97342a144fd8610f (diff) | |
download | redot-engine-cd7b51b9434cddb5f6104ee1ec9e88d1092d57af.tar.gz |
Merge pull request #35102 from ChibiDenDen/reuse_orphaned_subclass
#34161: Keep a weak reference to orphan subclasses to reuse on class reload
Diffstat (limited to 'modules/gdscript/gdscript_compiler.cpp')
-rw-r--r-- | modules/gdscript/gdscript_compiler.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 711fa54d0b..fba1b992ec 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -2123,15 +2123,21 @@ void GDScriptCompiler::_make_scripts(GDScript *p_script, const GDScriptParser::C StringName name = p_class->subclasses[i]->name; Ref<GDScript> subclass; + String fully_qualified_name = p_script->fully_qualified_name + "::" + name; if (old_subclasses.has(name)) { subclass = old_subclasses[name]; } else { - subclass.instance(); + Ref<GDScript> orphan_subclass = GDScriptLanguage::get_singleton()->get_orphan_subclass(fully_qualified_name); + if (orphan_subclass.is_valid()) { + subclass = orphan_subclass; + } else { + subclass.instance(); + } } subclass->_owner = p_script; - subclass->fully_qualified_name = p_script->fully_qualified_name + "::" + name; + subclass->fully_qualified_name = fully_qualified_name; p_script->subclasses.insert(name, subclass); _make_scripts(subclass.ptr(), p_class->subclasses[i], false); |