0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.1.0286: Vim9: E1027 with defcompile for abstract methods

Problem:  Vim9: E1027 with defcompile for abstract methods with
          non-void return types, but still compiles it
          (zzzyxwvut)
Solution: Don't compile abstract methods
          (Yegappan Lakshmanan)

fixes: #14443
closes: #14447

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yegappan Lakshmanan
2024-04-09 21:39:27 +02:00
committed by Christian Brabandt
parent 78c51500f1
commit 1af0fbf955
3 changed files with 47 additions and 1 deletions

View File

@@ -10583,4 +10583,46 @@ def Test_lambda_block_in_class()
v9.CheckScriptSuccess(lines) v9.CheckScriptSuccess(lines)
enddef enddef
" Test for defcompiling an abstract method
def Test_abstract_method_defcompile()
# Compile an abstract class with abstract object methods
var lines =<< trim END
vim9script
abstract class A
abstract def Foo(): string
abstract def Bar(): list<string>
endclass
defcompile
END
v9.CheckScriptSuccess(lines)
# Compile a concrete object method in an abstract class
lines =<< trim END
vim9script
abstract class A
abstract def Foo(): string
abstract def Bar(): list<string>
def Baz(): string
pass
enddef
endclass
defcompile
END
v9.CheckScriptFailure(lines, 'E476: Invalid command: pass', 1)
# Compile a concrete class method in an abstract class
lines =<< trim END
vim9script
abstract class A
abstract def Foo(): string
abstract def Bar(): list<string>
static def Baz(): string
pass
enddef
endclass
defcompile
END
v9.CheckScriptFailure(lines, 'E476: Invalid command: pass', 1)
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
286,
/**/ /**/
285, 285,
/**/ /**/

View File

@@ -3723,7 +3723,9 @@ defcompile_class(class_T *cl)
{ {
ufunc_T *ufunc = loop == 1 ? cl->class_class_functions[i] ufunc_T *ufunc = loop == 1 ? cl->class_class_functions[i]
: cl->class_obj_methods[i]; : cl->class_obj_methods[i];
defcompile_function(ufunc, cl); // Don't compile abstract methods
if (!IS_ABSTRACT_METHOD(ufunc))
defcompile_function(ufunc, cl);
} }
} }
} }