summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-12 22:07:13 +0200
committerBram Moolenaar <Bram@vim.org>2020-10-12 22:07:13 +0200
commitf4e8cdd3d2156ab52aea1c7a392df66b7210e5eb (patch)
treedc6d9acee8bb857e78d4e3d097645b3f105389d2 /src
parentfc8aa6d02d85b0df703e0a790137891c91503c9e (diff)
downloadvim-git-f4e8cdd3d2156ab52aea1c7a392df66b7210e5eb.tar.gz
patch 8.2.1840: Vim9: error message is not clear about compilation errorv8.2.1840
Problem: Vim9: error message is not clear about compilation error. Solution: Say "compiling" instead of "processing".
Diffstat (limited to 'src')
-rw-r--r--src/globals.h3
-rw-r--r--src/message.c7
-rw-r--r--src/testdir/test_vim9_func.vim32
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c3
5 files changed, 46 insertions, 1 deletions
diff --git a/src/globals.h b/src/globals.h
index 4ca3092e9..5495eac13 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 059835af0..c52795286 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 371b9efbc..4329754c3 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 f972cbd64..2b3657b8f 100644
--- 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
index 74be262a5..1dbea9280 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();