diff options
author | Juan Linietsky <reduzio@gmail.com> | 2019-01-25 10:09:44 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2019-01-25 10:09:44 -0300 |
commit | 6504b88547db63d9c39d378f535742e7b2825ca1 (patch) | |
tree | 3baea613c8dd6b327819090926b4e7e885c6c17e /modules/gdscript/gdscript.cpp | |
parent | 5b5db08a51a2240dfc8452309284152af1425185 (diff) | |
download | redot-engine-6504b88547db63d9c39d378f535742e7b2825ca1.tar.gz |
Ensure get script method list also checks base classes, fixes #23384
Diffstat (limited to 'modules/gdscript/gdscript.cpp')
-rw-r--r-- | modules/gdscript/gdscript.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index ae70525de5..6d85eb3c90 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -223,16 +223,21 @@ void GDScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) { void GDScript::get_script_method_list(List<MethodInfo> *p_list) const { - for (const Map<StringName, GDScriptFunction *>::Element *E = member_functions.front(); E; E = E->next()) { - GDScriptFunction *func = E->get(); - MethodInfo mi; - mi.name = E->key(); - for (int i = 0; i < func->get_argument_count(); i++) { - mi.arguments.push_back(func->get_argument_type(i)); + const GDScript *current = this; + while (current) { + for (const Map<StringName, GDScriptFunction *>::Element *E = member_functions.front(); E; E = E->next()) { + GDScriptFunction *func = E->get(); + MethodInfo mi; + mi.name = E->key(); + for (int i = 0; i < func->get_argument_count(); i++) { + mi.arguments.push_back(func->get_argument_type(i)); + } + + mi.return_val = func->get_return_type(); + p_list->push_back(mi); } - mi.return_val = func->get_return_type(); - p_list->push_back(mi); + current = current->_base; } } |