]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.2088: Vim9: still allows abstract static methods v9.0.2088
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 4 Nov 2023 08:42:46 +0000 (09:42 +0100)
committerChristian Brabandt <cb@256bit.org>
Sat, 4 Nov 2023 08:42:46 +0000 (09:42 +0100)
Problem:  Vim9: still allows abstract static methods
          (after v9.0.2084, v9.0.2085 and v9.0.2087)
Solution: Disallow abstract static methods

closes: #13479

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/testdir/test_vim9_class.vim
src/version.c
src/vim9class.c

index 65fa977d86df6b691538adadcf01eba08ab6b2a0..1f639e2b3f17de7de320076c1f81d96e6982e83f 100644 (file)
@@ -5607,15 +5607,13 @@ def Test_abstract_method()
   v9.CheckSourceFailure(lines, 'E1371: Abstract must be followed by "def"', 3)
 
   # Use a static abstract method
-  # TODO: this does not fail, so skip it for now
-
-  # lines =<< trim END
-  #   vim9script
-  #   abstract class A
-  #     abstract static def Foo(): number
-  #   endclass
-  # END
-  # v9.CheckSourceFailure(lines, 'E1371: Abstract must be followed by "def"', 3)
+  lines =<< trim END
+    vim9script
+    abstract class A
+      abstract static def Foo(): number
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1371: Abstract must be followed by "def"', 3)
 
   # Type mismatch between abstract method and concrete method
   lines =<< trim END
index a47536170fec3da3872400dc2229d183d69cc448..e45df160bd301779421629c7339103b26e976394 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2088,
 /**/
     2087,
 /**/
index f709c1f04db3e3f066c837f621344c056e3b5fe2..e9131fe3ba86f1bd8c2d817c0287cb8fb354f936 100644 (file)
@@ -1557,13 +1557,6 @@ early_ret:
                break;
            }
 
-           p = skipwhite(pa + 8);
-           if (STRNCMP(p, "def", 3) != 0 && STRNCMP(p, "static", 6) != 0)
-           {
-               emsg(_(e_abstract_must_be_followed_by_def));
-               break;
-           }
-
            if (!is_class)
            {
                // "abstract" not supported in an interface
@@ -1577,6 +1570,13 @@ early_ret:
                break;
            }
 
+           p = skipwhite(pa + 8);
+           if (STRNCMP(p, "def", 3) != 0)
+           {
+               emsg(_(e_abstract_must_be_followed_by_def));
+               break;
+           }
+
            abstract_method = TRUE;
        }