]> granicus.if.org Git - vim/commitdiff
patch 8.2.1840: Vim9: error message is not clear about compilation error v8.2.1840
authorBram Moolenaar <Bram@vim.org>
Mon, 12 Oct 2020 20:07:13 +0000 (22:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 12 Oct 2020 20:07:13 +0000 (22:07 +0200)
Problem:    Vim9: error message is not clear about compilation error.
Solution:   Say "compiling" instead of "processing".

src/globals.h
src/message.c
src/testdir/test_vim9_func.vim
src/version.c
src/vim9compile.c

index 4ca3092e9d7c18ee5fcd6c85a5ca23fe7a333dbe..5495eac13b04debc9a3ef3f1d7f384ceb2ddb7fa 100644 (file)
@@ -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
index 059835af0daaa5f480b5c715cbfba092daae2c10..c52795286b322cb0e3dfced2c2374ebcbafdead6 100644 (file)
@@ -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);
index 371b9efbcbec99b6cc807b0e648c402076e891a6..4329754c390b11a0c75e536529211de1d9304500 100644 (file)
@@ -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
index f972cbd641bb4dcd0f0df71c562432a96b6fcd82..2b3657b8fed6889d1e2c97d4a8234c7edb609cca 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1840,
 /**/
     1839,
 /**/
index 74be262a521bce15a4d7eb2a809397e85c7ed653..1dbea9280d2681f424dfbb9bc95b001a36c804a4 100644 (file)
@@ -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();