# HG changeset patch # User Bram Moolenaar # Date 1602533704 -7200 # Node ID c271498e03b23d8bd2dbf3a4ef27dc61e6076460 # Parent 973eeeb5c6a62ba6a456c732c934ca096d303068 patch 8.2.1840: Vim9: error message is not clear about compilation error Commit: https://github.com/vim/vim/commit/f4e8cdd3d2156ab52aea1c7a392df66b7210e5eb Author: Bram Moolenaar Date: Mon Oct 12 22:07:13 2020 +0200 patch 8.2.1840: Vim9: error message is not clear about compilation error Problem: Vim9: error message is not clear about compilation error. Solution: Say "compiling" instead of "processing". diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -288,6 +288,9 @@ EXTERN garray_T exestack INIT5(0, 0, siz #define SOURCING_LNUM (((estack_T *)exestack.ga_data)[exestack.ga_len - 1].es_lnum) #ifdef FEAT_EVAL +// whether inside compile_def_function() +EXTERN int estack_compiling INIT(= FALSE); + EXTERN int ex_nesting_level INIT(= 0); // nesting level EXTERN int debug_break_level INIT(= -1); // break below this level EXTERN int debug_did_msg INIT(= FALSE); // did "debug mode" message diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -467,7 +467,12 @@ get_emsg_source(void) if (sname == NULL) sname = SOURCING_NAME; - p = (char_u *)_("Error detected while processing %s:"); +#ifdef FEAT_EVAL + if (estack_compiling) + p = (char_u *)_("Error detected while compiling %s:"); + else +#endif + p = (char_u *)_("Error detected while processing %s:"); Buf = alloc(STRLEN(sname) + STRLEN(p)); if (Buf != NULL) sprintf((char *)Buf, (char *)p, sname); diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -13,6 +13,38 @@ func Test_def_basic() call SomeFunc()->assert_equal('yes') endfunc +def Test_compiling_error() + # use a terminal to see the whole error message + CheckRunVimInTerminal + + var lines =<< trim END + vim9script + def Fails() + echo nothing + enddef + defcompile + END + call writefile(lines, 'XTest_compile_error') + var buf = RunVimInTerminal('-S XTest_compile_error', + #{rows: 10, wait_for_ruler: 0}) + var text = '' + for loop in range(100) + text = '' + for i in range(1, 9) + text ..= term_getline(buf, i) + endfor + if text =~ 'Error detected' + break + endif + sleep 20m + endfor + assert_match('Error detected while compiling command line.*Fails.*Variable not found: nothing', text) + + # clean up + call StopVimInTerminal(buf) + call delete('XTest_compile_error') +enddef + def ReturnString(): string return 'string' enddef diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1840, +/**/ 1839, /**/ 1838, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6715,6 +6715,7 @@ compile_def_function(ufunc_T *ufunc, int int called_emsg_before = called_emsg; int ret = FAIL; sctx_T save_current_sctx = current_sctx; + int save_estack_compiling = estack_compiling; int do_estack_push; int emsg_before = called_emsg; int new_def_function = FALSE; @@ -6757,6 +6758,7 @@ compile_def_function(ufunc_T *ufunc, int do_estack_push = !estack_top_is_ufunc(ufunc, 1); if (do_estack_push) estack_push_ufunc(ufunc, 1); + estack_compiling = TRUE; if (ufunc->uf_def_args.ga_len > 0) { @@ -7303,6 +7305,7 @@ erret: } current_sctx = save_current_sctx; + estack_compiling = save_estack_compiling; if (do_estack_push) estack_pop();