# HG changeset patch # User Christian Brabandt # Date 1692211892 -7200 # Node ID 57282f1d9e0fed8a81b1bb78c8c4eeadb378e133 # Parent c2c84e9b90edcf0ec5fc8948f592b567d7083b44 patch 9.0.1720: Vim9 class using wrong index for overridden method Commit: https://github.com/vim/vim/commit/a456b12011569be91418bbf6277d844c67e05e79 Author: Yegappan Lakshmanan Date: Wed Aug 16 20:14:37 2023 +0200 patch 9.0.1720: Vim9 class using wrong index for overridden method Problem: Vim9 class using wrong index for overridden method Solution: Use correct index for overridden method closes: #12524 closes: #12813 Signed-off-by: Christian Brabandt Co-authored-by: Yegappan Lakshmanan diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -1948,4 +1948,42 @@ def Test_call_method_in_extended_class() v9.CheckScriptSuccess(lines) enddef +" Test for calling a method in the parent class that is extended partially. +" This used to fail with the 'E118: Too many arguments for function: Text' error +" message (Github issue #12524). +def Test_call_method_in_parent_class() + var lines =<< trim END + vim9script + + class Widget + this._lnum: number = 1 + + def SetY(lnum: number) + this._lnum = lnum + enddef + + def Text(): string + return '' + enddef + endclass + + class Foo extends Widget + def Text(): string + return '' + enddef + endclass + + def Stack(w1: Widget, w2: Widget): list + w1.SetY(1) + w2.SetY(2) + return [w1, w2] + enddef + + var foo1 = Foo.new() + var foo2 = Foo.new() + var l = Stack(foo1, foo2) + END + v9.CheckScriptSuccess(lines) +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1720, +/**/ 1719, /**/ 1718, diff --git a/src/vim9class.c b/src/vim9class.c --- a/src/vim9class.c +++ b/src/vim9class.c @@ -911,7 +911,7 @@ early_ret: == 0) { int *table = (int *)(if2cl + 1); - table[if_i] = cl_i; + table[if_i] = objmethods.ga_len + cl_i; break; } }