diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2023-08-16 20:14:37 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-08-16 20:14:37 +0200 |
commit | a456b12011569be91418bbf6277d844c67e05e79 (patch) | |
tree | 7b2e111a2ff9fe30820758c6a6694b7c257b5c13 | |
parent | 20b33b56ad5d92c1c11e0859dc9333166625e0ad (diff) |
patch 9.0.1720: Vim9 class using wrong index for overridden methodv9.0.1720
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 <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
-rw-r--r-- | src/testdir/test_vim9_class.vim | 38 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9class.c | 2 |
3 files changed, 41 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index e566a9e64c..e60b3b63cc 100644 --- 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 '<Foo>' + enddef + endclass + + def Stack(w1: Widget, w2: Widget): list<Widget> + 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 index bea47fefc1..ae9bc87a20 100644 --- 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 index 562db25b5d..b04fb0fecc 100644 --- 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; } } |