]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1720: Vim9 class using wrong index for overridden method v9.0.1720
authorYegappan Lakshmanan <yegappan@yahoo.com>
Wed, 16 Aug 2023 18:14:37 +0000 (20:14 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 16 Aug 2023 18:14:37 +0000 (20:14 +0200)
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>
src/testdir/test_vim9_class.vim
src/version.c
src/vim9class.c

index e566a9e64cde17d406e8eef39f659f1672100661..e60b3b63cc597c1f1f324bb05e440522f56e1236 100644 (file)
@@ -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
index bea47fefc1d9393b009391383b446624706bc45d..ae9bc87a20620d15f42c993f7380ff73b612e9ae 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1720,
 /**/
     1719,
 /**/
index 562db25b5d59c2b24ca2f18121ab18e0e92a6b1c..b04fb0feccd30bc326e9078de77fc7fa2b018413 100644 (file)
@@ -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;
                            }
                        }