# HG changeset patch # User Bram Moolenaar # Date 1595185203 -7200 # Node ID aa7675a4a0cd318a3229d3009b8ac03bbd8437b0 # Parent 9b9005a18282a1b79c7b5c99ce66ed7b16518707 patch 8.2.1251: Vim9: warning for pointer usage, test failure undetected Commit: https://github.com/vim/vim/commit/682d0a15462f3d4f9404e98a56b340ae131cbb09 Author: Bram Moolenaar 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. diff --git a/src/proto/userfunc.pro b/src/proto/userfunc.pro --- 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); diff --git a/src/userfunc.c b/src/userfunc.c --- 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; diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9execute.c b/src/vim9execute.c --- 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; }