diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/errors.h | 4 | ||||
-rw-r--r-- | src/testdir/test_vim9_class.vim | 21 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9class.c | 33 |
4 files changed, 42 insertions, 18 deletions
diff --git a/src/errors.h b/src/errors.h index 26ecf09404..85439ba925 100644 --- a/src/errors.h +++ b/src/errors.h @@ -3560,8 +3560,10 @@ EXTERN char e_using_typealias_as_string[] INIT(= N_("E1402: Using type alias \"%s\" as a String")); EXTERN char e_using_typealias_as_value[] INIT(= N_("E1403: Type alias \"%s\" cannot be used as a value")); +EXTERN char e_abstract_cannot_be_used_in_interface[] + INIT(= N_("E1404: Abstract cannot be used in an interface")); #endif -// E1404 - E1499 unused (reserved for Vim9 class support) +// E1405 - E1499 unused (reserved for Vim9 class support) EXTERN char e_cannot_mix_positional_and_non_positional_str[] INIT(= N_("E1500: Cannot mix positional and non-positional arguments: %s")); EXTERN char e_fmt_arg_nr_unused_str[] diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index b3d9841247..1f639e2b3f 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -5567,7 +5567,26 @@ def Test_abstract_method() enddef endclass END - v9.CheckSourceSuccess(lines) + v9.CheckSourceFailure(lines, 'E1404: Abstract cannot be used in an interface', 3) + + # Use abstract static method in an interface + lines =<< trim END + vim9script + interface A + abstract static def Foo() + enddef + endinterface + END + v9.CheckSourceFailure(lines, 'E1404: Abstract cannot be used in an interface', 3) + + # Use abstract static variable in an interface + lines =<< trim END + vim9script + interface A + abstract static foo: number = 10 + endinterface + END + v9.CheckSourceFailure(lines, 'E1404: Abstract cannot be used in an interface', 3) # Abbreviate the "abstract" keyword lines =<< trim END diff --git a/src/version.c b/src/version.c index 7511e5c189..e136a671ec 100644 --- 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 */ /**/ + 2085, +/**/ 2084, /**/ 2083, diff --git a/src/vim9class.c b/src/vim9class.c index ede310b457..08c371389c 100644 --- a/src/vim9class.c +++ b/src/vim9class.c @@ -1557,26 +1557,27 @@ 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_or_static)); + break; + } + if (!is_class) - // ignore "abstract" in an interface (as all the methods in an - // interface are abstract. - p = skipwhite(pa + 8); - else { - if (!is_abstract) - { - semsg(_(e_abstract_method_in_concrete_class), pa); - break; - } + // "abstract" not supported in an interface + emsg(_(e_abstract_cannot_be_used_in_interface)); + break; + } - abstract_method = TRUE; - p = skipwhite(pa + 8); - if (STRNCMP(p, "def", 3) != 0) - { - emsg(_(e_abstract_must_be_followed_by_def)); - break; - } + if (!is_abstract) + { + semsg(_(e_abstract_method_in_concrete_class), pa); + break; } + + abstract_method = TRUE; } int has_static = FALSE; |