changeset 33708:b076a133faf9 v9.0.2088

patch 9.0.2088: Vim9: still allows abstract static methods Commit: https://github.com/vim/vim/commit/5a53925a6eea929118e5438685e9ebc16ae48aa2 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Sat Nov 4 09:42:46 2023 +0100 patch 9.0.2088: Vim9: still allows abstract static methods 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>
author Christian Brabandt <cb@256bit.org>
date Sat, 04 Nov 2023 10:00:03 +0100
parents 6e5d35187e4e
children 4285faa7a4fb
files src/testdir/test_vim9_class.vim src/version.c src/vim9class.c
diffstat 3 files changed, 16 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2088,
+/**/
     2087,
 /**/
     2086,
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -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;
 	}