diff options
| author | Rémi Verschelde <remi@verschelde.fr> | 2022-06-24 23:24:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-24 23:24:33 +0200 |
| commit | 56b8d579b29b083bdac75d4ea935bfeb12a5b763 (patch) | |
| tree | c730f3b52993db2bda3c96f2e65538c2de664498 /modules/gdscript/gdscript.cpp | |
| parent | 2c6b6da42d666ab7ba5137ccbed2ea6d84363d75 (diff) | |
| parent | cf015673d3556afe4f56d70235e684a398bbaf01 (diff) | |
| download | redot-engine-56b8d579b29b083bdac75d4ea935bfeb12a5b763.tar.gz | |
Merge pull request #62255 from vnen/gdscript-implicit-onready
GDScript: Use implicit method for @onready variables
Diffstat (limited to 'modules/gdscript/gdscript.cpp')
| -rw-r--r-- | modules/gdscript/gdscript.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 617db883f8..e6aeef2fd1 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -1254,6 +1254,14 @@ GDScript::~GDScript() { memdelete(E.value); } + if (implicit_initializer) { + memdelete(implicit_initializer); + } + + if (implicit_ready) { + memdelete(implicit_ready); + } + if (GDScriptCache::singleton) { // Cache may have been already destroyed at engine shutdown. GDScriptCache::remove_script(get_path()); } @@ -1541,6 +1549,18 @@ bool GDScriptInstance::has_method(const StringName &p_method) const { Variant GDScriptInstance::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) { GDScript *sptr = script.ptr(); + if (unlikely(p_method == SNAME("_ready"))) { + // Call implicit ready first, including for the super classes. + while (sptr) { + if (sptr->implicit_ready) { + sptr->implicit_ready->call(this, nullptr, 0, r_error); + } + sptr = sptr->_base; + } + + // Reset this back for the regular call. + sptr = script.ptr(); + } while (sptr) { HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(p_method); if (E) { |
