]> granicus.if.org Git - vim/commitdiff
patch 8.2.1251: Vim9: warning for pointer usage, test failure undetected v8.2.1251
authorBram Moolenaar <Bram@vim.org>
Sun, 19 Jul 2020 18:48:59 +0000 (20:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 19 Jul 2020 18:48:59 +0000 (20:48 +0200)
Problem:    Vim9: warning for pointer usage, test failure undetected.
Solution:   Fix pointer indirection.  Give error when executing function
            failed for any reason.  Fix instruction names.

src/proto/userfunc.pro
src/userfunc.c
src/version.c
src/vim9execute.c

index 75a1562570b980f2c7a294d9c2d57051099a27c9..9c9eb2df7a832b1b9ff53b015fcab1df460d5495 100644 (file)
@@ -22,6 +22,7 @@ int get_callback_depth(void);
 int call_callback(callback_T *callback, int len, typval_T *rettv, int argcount, typval_T *argvars);
 void user_func_error(int error, char_u *name);
 int call_func(char_u *funcname, int len, typval_T *rettv, int argcount_in, typval_T *argvars_in, funcexe_T *funcexe);
+char_u *printable_func_name(ufunc_T *fp);
 char_u *trans_function_name(char_u **pp, int *is_global, int skip, int flags, funcdict_T *fdp, partial_T **partial);
 char_u *untrans_function_name(char_u *name);
 ufunc_T *def_function(exarg_T *eap, char_u *name_arg);
index b4b8ccf9106c2ec8114432bdbb5002913e20254e..eda1f242f536559a8876a8d1f13c7787aed90c82 100644 (file)
@@ -2122,7 +2122,7 @@ theend:
     return ret;
 }
 
-    static char_u *
+    char_u *
 printable_func_name(ufunc_T *fp)
 {
     return fp->uf_name_exp != NULL ? fp->uf_name_exp : fp->uf_name;
index 936e4df96f348831103a08ce682870fe43417bdf..444870e3f243685c885525830794fb83cf82cc8d 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1251,
 /**/
     1250,
 /**/
index 35419dae42b91586f9be901d0703f1664b0fd4c0..f022b5ba854ca3c45f247adf44dac7126964d620 100644 (file)
@@ -714,8 +714,7 @@ call_def_function(
     {
        if (called_emsg == called_emsg_before)
            semsg(_("E1091: Function is not compiled: %s"),
-                   ufunc->uf_name_exp == NULL
-                                       ? ufunc->uf_name : ufunc->uf_name_exp);
+                                                  printable_func_name(ufunc));
        return FAIL;
     }
 
@@ -1139,10 +1138,10 @@ call_def_function(
 
                    switch (iptr->isn_type)
                    {
-                       case ISN_LOADG: d = get_globvar_dict(); break;
-                       case ISN_LOADB: d = &curbuf->b_vars; break;
-                       case ISN_LOADW: d = &curwin->w_vars; break;
-                       case ISN_LOADT: d = &curtab->tp_vars; break;
+                       case ISN_LOADGDICT: d = get_globvar_dict(); break;
+                       case ISN_LOADBDICT: d = curbuf->b_vars; break;
+                       case ISN_LOADWDICT: d = curwin->w_vars; break;
+                       case ISN_LOADTDICT: d = curtab->tp_vars; break;
                        default:  // Cannot reach here
                            goto failed;
                    }
@@ -2497,6 +2496,10 @@ failed_early:
 
     vim_free(ectx.ec_stack.ga_data);
     vim_free(ectx.ec_trystack.ga_data);
+
+    if (ret != OK && called_emsg == called_emsg_before)
+       semsg(_("E1099: Unknown error while executing %s"),
+                                                  printable_func_name(ufunc));
     return ret;
 }