Patch 9.0.1265
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)
Files: src/vim9compile.c, src/testdir/test_vim9_class.vim
*** ../vim-9.0.1264/src/vim9compile.c 2023-01-26 11:58:39.606071598 +0000
--- src/vim9compile.c 2023-01-30 19:45:29.004751867 +0000
***************
*** 3181,3186 ****
--- 3181,3196 ----
}
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.
*/
***************
*** 3705,3711 ****
iemsg("Type stack underflow");
goto erret;
}
! }
if (cctx.ctx_scope != NULL)
{
--- 3715,3721 ----
iemsg("Type stack underflow");
goto erret;
}
! } // END of the loop over all the function body lines.
if (cctx.ctx_scope != NULL)
{
*** ../vim-9.0.1264/src/testdir/test_vim9_class.vim 2023-01-28
19:18:56.737720609 +0000
--- src/testdir/test_vim9_class.vim 2023-01-30 19:47:09.340691197 +0000
***************
*** 1049,1054 ****
--- 1049,1071 ----
unlet g:result
END
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
def Test_class_used_as_type()
*** ../vim-9.0.1264/src/version.c 2023-01-30 19:26:20.481324263 +0000
--- src/version.c 2023-01-30 19:41:12.608941475 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1265,
/**/
--
hundred-and-one symptoms of being an internet addict:
70. ISDN lines are added to your house on a hourly basis
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20230130202456.D613D1C03C5%40moolenaar.net.