mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.0.1265: using an interface method may give a compilation error
Problem: Using an interface method may give a compilation error. Solution: Do not try to compile the body of a method of an interface. (closes #11885)
This commit is contained in:
@@ -1049,6 +1049,23 @@ def Test_call_interface_method()
|
|||||||
unlet g:result
|
unlet g:result
|
||||||
END
|
END
|
||||||
v9.CheckScriptSuccess(lines)
|
v9.CheckScriptSuccess(lines)
|
||||||
|
|
||||||
|
# No class that implements the interface.
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
|
||||||
|
interface IWithEE
|
||||||
|
def Enter(): any
|
||||||
|
def Exit(): void
|
||||||
|
endinterface
|
||||||
|
|
||||||
|
def With1(ee: IWithEE, F: func)
|
||||||
|
var r = ee.Enter()
|
||||||
|
enddef
|
||||||
|
|
||||||
|
defcompile
|
||||||
|
END
|
||||||
|
v9.CheckScriptSuccess(lines)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_class_used_as_type()
|
def Test_class_used_as_type()
|
||||||
|
@@ -695,6 +695,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 */
|
||||||
|
/**/
|
||||||
|
1265,
|
||||||
/**/
|
/**/
|
||||||
1264,
|
1264,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -3181,6 +3181,16 @@ compile_def_function(
|
|||||||
}
|
}
|
||||||
ufunc->uf_args_visible = ufunc->uf_args.ga_len;
|
ufunc->uf_args_visible = ufunc->uf_args.ga_len;
|
||||||
|
|
||||||
|
// Compiling a function in an interface is done to get the function type.
|
||||||
|
// No code is actually compiled.
|
||||||
|
if (ufunc->uf_class != NULL
|
||||||
|
&& (ufunc->uf_class->class_flags & CLASS_INTERFACE))
|
||||||
|
{
|
||||||
|
ufunc->uf_def_status = UF_NOT_COMPILED;
|
||||||
|
ret = OK;
|
||||||
|
goto erret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loop over all the lines of the function and generate instructions.
|
* Loop over all the lines of the function and generate instructions.
|
||||||
*/
|
*/
|
||||||
@@ -3705,7 +3715,7 @@ nextline:
|
|||||||
iemsg("Type stack underflow");
|
iemsg("Type stack underflow");
|
||||||
goto erret;
|
goto erret;
|
||||||
}
|
}
|
||||||
}
|
} // END of the loop over all the function body lines.
|
||||||
|
|
||||||
if (cctx.ctx_scope != NULL)
|
if (cctx.ctx_scope != NULL)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user