changeset 21401:aa7675a4a0cd v8.2.1251

patch 8.2.1251: Vim9: warning for pointer usage, test failure undetected Commit: https://github.com/vim/vim/commit/682d0a15462f3d4f9404e98a56b340ae131cbb09 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 19 20:48:59 2020 +0200 patch 8.2.1251: Vim9: warning for pointer usage, test failure undetected 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.
author Bram Moolenaar <Bram@vim.org>
date Sun, 19 Jul 2020 21:00:03 +0200
parents 9b9005a18282
children a7733fa5dbe0
files src/proto/userfunc.pro src/userfunc.c src/version.c src/vim9execute.c
diffstat 4 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/proto/userfunc.pro
+++ b/src/proto/userfunc.pro
@@ -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);
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -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;
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1251,
+/**/
     1250,
 /**/
     1249,
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -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;
 }