summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-08-16 20:14:37 +0200
committerChristian Brabandt <cb@256bit.org>2023-08-16 20:14:37 +0200
commita456b12011569be91418bbf6277d844c67e05e79 (patch)
tree7b2e111a2ff9fe30820758c6a6694b7c257b5c13
parent20b33b56ad5d92c1c11e0859dc9333166625e0ad (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.vim38
-rw-r--r--src/version.c2
-rw-r--r--src/vim9class.c2
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;
}
}