From f4e8cdd3d2156ab52aea1c7a392df66b7210e5eb Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 12 Oct 2020 22:07:13 +0200 Subject: 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". --- src/globals.h | 3 +++ src/message.c | 7 ++++++- src/testdir/test_vim9_func.vim | 32 ++++++++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9compile.c | 3 +++ 5 files changed, 46 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/globals.h b/src/globals.h index 4ca3092e9d..5495eac13b 100644 --- a/src/globals.h +++ b/src/globals.h @@ -288,6 +288,9 @@ EXTERN garray_T exestack INIT5(0, 0, sizeof(estack_T), 50, NULL); #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 index 059835af0d..c52795286b 100644 --- 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 index 371b9efbcb..4329754c39 100644 --- 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 index f972cbd641..2b3657b8fe 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1840, /**/ 1839, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 74be262a52..1dbea9280d 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6715,6 +6715,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx) 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 set_return_type, cctx_T *outer_cctx) 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(); -- cgit v1.2.3