diff options
Diffstat (limited to 'data/vim/patches/8.1.0053')
-rw-r--r-- | data/vim/patches/8.1.0053 | 609 |
1 files changed, 0 insertions, 609 deletions
diff --git a/data/vim/patches/8.1.0053 b/data/vim/patches/8.1.0053 deleted file mode 100644 index aa3ff44b1..000000000 --- a/data/vim/patches/8.1.0053 +++ /dev/null @@ -1,609 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0053 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0053 -Problem: The first argument given to 'completefunc' can be Number or - String, depending on the value. -Solution: Avoid guessing the type of an argument, use typval_T in the - callers of call_vim_function(). (Ozaki Kiichi, closes #2993) -Files: src/edit.c, src/eval.c, src/ex_getln.c, src/mbyte.c, src/normal.c, - src/proto/eval.pro, src/testdir/test_ins_complete.vim - - -*** ../vim-8.1.0052/src/edit.c 2018-06-10 13:12:52.176496009 +0200 ---- src/edit.c 2018-06-12 21:49:32.781522896 +0200 -*************** -*** 4201,4207 **** - { - list_T *matchlist = NULL; - dict_T *matchdict = NULL; -! char_u *args[2]; - char_u *funcname; - pos_T pos; - win_T *curwin_save; ---- 4201,4207 ---- - { - list_T *matchlist = NULL; - dict_T *matchdict = NULL; -! typval_T args[3]; - char_u *funcname; - pos_T pos; - win_T *curwin_save; -*************** -*** 4213,4227 **** - return; - - /* Call 'completefunc' to obtain the list of matches. */ -! args[0] = (char_u *)"0"; -! args[1] = base; - - pos = curwin->w_cursor; - curwin_save = curwin; - curbuf_save = curbuf; - - /* Call a function, which returns a list or dict. */ -! if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK) - { - switch (rettv.v_type) - { ---- 4213,4230 ---- - return; - - /* Call 'completefunc' to obtain the list of matches. */ -! args[0].v_type = VAR_NUMBER; -! args[0].vval.v_number = 0; -! args[1].v_type = VAR_STRING; -! args[1].vval.v_string = base != NULL ? base : (char_u *)""; -! args[2].v_type = VAR_UNKNOWN; - - pos = curwin->w_cursor; - curwin_save = curwin; - curbuf_save = curbuf; - - /* Call a function, which returns a list or dict. */ -! if (call_vim_function(funcname, 2, args, &rettv, FALSE) == OK) - { - switch (rettv.v_type) - { -*************** -*** 5528,5534 **** - * Call user defined function 'completefunc' with "a:findstart" - * set to 1 to obtain the length of text to use for completion. - */ -! char_u *args[2]; - int col; - char_u *funcname; - pos_T pos; ---- 5531,5537 ---- - * Call user defined function 'completefunc' with "a:findstart" - * set to 1 to obtain the length of text to use for completion. - */ -! typval_T args[3]; - int col; - char_u *funcname; - pos_T pos; -*************** -*** 5548,5555 **** - return FAIL; - } - -! args[0] = (char_u *)"1"; -! args[1] = NULL; - pos = curwin->w_cursor; - curwin_save = curwin; - curbuf_save = curbuf; ---- 5551,5561 ---- - return FAIL; - } - -! args[0].v_type = VAR_NUMBER; -! args[0].vval.v_number = 1; -! args[1].v_type = VAR_STRING; -! args[1].vval.v_string = (char_u *)""; -! args[2].v_type = VAR_UNKNOWN; - pos = curwin->w_cursor; - curwin_save = curwin; - curbuf_save = curbuf; -*** ../vim-8.1.0052/src/eval.c 2018-05-13 15:42:40.000000000 +0200 ---- src/eval.c 2018-06-12 21:53:10.468274335 +0200 -*************** -*** 1011,1073 **** - - /* - * Call some Vim script function and return the result in "*rettv". -! * Uses argv[argc] for the function arguments. Only Number and String -! * arguments are currently supported. - * Returns OK or FAIL. - */ - int - call_vim_function( - char_u *func, - int argc, -! char_u **argv, -! int safe, /* use the sandbox */ -! int str_arg_only, /* all arguments are strings */ -! typval_T *rettv) - { -- typval_T *argvars; -- varnumber_T n; -- int len; -- int i; - int doesrange; - void *save_funccalp = NULL; - int ret; - -- argvars = (typval_T *)alloc((unsigned)((argc + 1) * sizeof(typval_T))); -- if (argvars == NULL) -- return FAIL; -- -- for (i = 0; i < argc; i++) -- { -- /* Pass a NULL or empty argument as an empty string */ -- if (argv[i] == NULL || *argv[i] == NUL) -- { -- argvars[i].v_type = VAR_STRING; -- argvars[i].vval.v_string = (char_u *)""; -- continue; -- } -- -- if (str_arg_only) -- len = 0; -- else -- { -- /* Recognize a number argument, the others must be strings. A dash -- * is a string too. */ -- vim_str2nr(argv[i], NULL, &len, STR2NR_ALL, &n, NULL, 0); -- if (len == 1 && *argv[i] == '-') -- len = 0; -- } -- if (len != 0 && len == (int)STRLEN(argv[i])) -- { -- argvars[i].v_type = VAR_NUMBER; -- argvars[i].vval.v_number = n; -- } -- else -- { -- argvars[i].v_type = VAR_STRING; -- argvars[i].vval.v_string = argv[i]; -- } -- } -- - if (safe) - { - save_funccalp = save_funccal(); ---- 1011,1032 ---- - - /* - * Call some Vim script function and return the result in "*rettv". -! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] -! * should have type VAR_UNKNOWN. - * Returns OK or FAIL. - */ - int - call_vim_function( - char_u *func, - int argc, -! typval_T *argv, -! typval_T *rettv, -! int safe) /* use the sandbox */ - { - int doesrange; - void *save_funccalp = NULL; - int ret; - - if (safe) - { - save_funccalp = save_funccal(); -*************** -*** 1075,1081 **** - } - - rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */ -! ret = call_func(func, (int)STRLEN(func), rettv, argc, argvars, NULL, - curwin->w_cursor.lnum, curwin->w_cursor.lnum, - &doesrange, TRUE, NULL, NULL); - if (safe) ---- 1034,1040 ---- - } - - rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */ -! ret = call_func(func, (int)STRLEN(func), rettv, argc, argv, NULL, - curwin->w_cursor.lnum, curwin->w_cursor.lnum, - &doesrange, TRUE, NULL, NULL); - if (safe) -*************** -*** 1083,1089 **** - --sandbox; - restore_funccal(save_funccalp); - } -- vim_free(argvars); - - if (ret == FAIL) - clear_tv(rettv); ---- 1042,1047 ---- -*************** -*** 1094,1113 **** - /* - * Call Vim script function "func" and return the result as a number. - * Returns -1 when calling the function fails. -! * Uses argv[argc] for the function arguments. - */ - varnumber_T - call_func_retnr( - char_u *func, - int argc, -! char_u **argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - varnumber_T retval; - -! /* All arguments are passed as strings, no conversion to number. */ -! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) - return -1; - - retval = get_tv_number_chk(&rettv, NULL); ---- 1052,1071 ---- - /* - * Call Vim script function "func" and return the result as a number. - * Returns -1 when calling the function fails. -! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should -! * have type VAR_UNKNOWN. - */ - varnumber_T - call_func_retnr( - char_u *func, - int argc, -! typval_T *argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - varnumber_T retval; - -! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) - return -1; - - retval = get_tv_number_chk(&rettv, NULL); -*************** -*** 1122,1141 **** - /* - * Call Vim script function "func" and return the result as a string. - * Returns NULL when calling the function fails. -! * Uses argv[argc] for the function arguments. - */ - void * - call_func_retstr( - char_u *func, - int argc, -! char_u **argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - char_u *retval; - -! /* All arguments are passed as strings, no conversion to number. */ -! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) - return NULL; - - retval = vim_strsave(get_tv_string(&rettv)); ---- 1080,1099 ---- - /* - * Call Vim script function "func" and return the result as a string. - * Returns NULL when calling the function fails. -! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should -! * have type VAR_UNKNOWN. - */ - void * - call_func_retstr( - char_u *func, - int argc, -! typval_T *argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - char_u *retval; - -! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) - return NULL; - - retval = vim_strsave(get_tv_string(&rettv)); -*************** -*** 1146,1165 **** - - /* - * Call Vim script function "func" and return the result as a List. -! * Uses argv[argc] for the function arguments. - * Returns NULL when there is something wrong. - */ - void * - call_func_retlist( - char_u *func, - int argc, -! char_u **argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - -! /* All arguments are passed as strings, no conversion to number. */ -! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) - return NULL; - - if (rettv.v_type != VAR_LIST) ---- 1104,1123 ---- - - /* - * Call Vim script function "func" and return the result as a List. -! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should -! * have type VAR_UNKNOWN. - * Returns NULL when there is something wrong. - */ - void * - call_func_retlist( - char_u *func, - int argc, -! typval_T *argv, - int safe) /* use the sandbox */ - { - typval_T rettv; - -! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) - return NULL; - - if (rettv.v_type != VAR_LIST) -*** ../vim-8.1.0052/src/ex_getln.c 2018-05-22 16:58:43.979903077 +0200 ---- src/ex_getln.c 2018-06-12 21:56:34.139120017 +0200 -*************** -*** 5266,5272 **** - - - # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) -! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, char_u **, int), expand_T *xp, int *num_file, char_u ***file); - - /* - * Call "user_expand_func()" to invoke a user defined Vim script function and ---- 5266,5272 ---- - - - # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) -! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, typval_T *, int), expand_T *xp, int *num_file, char_u ***file); - - /* - * Call "user_expand_func()" to invoke a user defined Vim script function and -*************** -*** 5274,5288 **** - */ - static void * - call_user_expand_func( -! void *(*user_expand_func)(char_u *, int, char_u **, int), - expand_T *xp, - int *num_file, - char_u ***file) - { - int keep = 0; -! char_u num[50]; -! char_u *args[3]; - int save_current_SID = current_SID; - void *ret; - struct cmdline_info save_ccline; - ---- 5274,5288 ---- - */ - static void * - call_user_expand_func( -! void *(*user_expand_func)(char_u *, int, typval_T *, int), - expand_T *xp, - int *num_file, - char_u ***file) - { - int keep = 0; -! typval_T args[4]; - int save_current_SID = current_SID; -+ char_u *pat = NULL; - void *ret; - struct cmdline_info save_ccline; - -*************** -*** 5297,5306 **** - ccline.cmdbuff[ccline.cmdlen] = 0; - } - -! args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); -! args[1] = xp->xp_line; -! sprintf((char *)num, "%d", xp->xp_col); -! args[2] = num; - - /* Save the cmdline, we don't know what the function may do. */ - save_ccline = ccline; ---- 5297,5311 ---- - ccline.cmdbuff[ccline.cmdlen] = 0; - } - -! pat = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); -! -! args[0].v_type = VAR_STRING; -! args[0].vval.v_string = pat; -! args[1].v_type = VAR_STRING; -! args[1].vval.v_string = xp->xp_line; -! args[2].v_type = VAR_NUMBER; -! args[2].vval.v_number = xp->xp_col; -! args[3].v_type = VAR_UNKNOWN; - - /* Save the cmdline, we don't know what the function may do. */ - save_ccline = ccline; -*************** -*** 5315,5321 **** - if (ccline.cmdbuff != NULL) - ccline.cmdbuff[ccline.cmdlen] = keep; - -! vim_free(args[0]); - return ret; - } - ---- 5320,5326 ---- - if (ccline.cmdbuff != NULL) - ccline.cmdbuff[ccline.cmdlen] = keep; - -! vim_free(pat); - return ret; - } - -*** ../vim-8.1.0052/src/mbyte.c 2018-05-17 13:06:28.000000000 +0200 ---- src/mbyte.c 2018-06-12 21:57:43.682728083 +0200 -*************** -*** 4795,4806 **** - static void - call_imactivatefunc(int active) - { -! char_u *argv[1]; - -! if (active) -! argv[0] = (char_u *)"1"; -! else -! argv[0] = (char_u *)"0"; - (void)call_func_retnr(p_imaf, 1, argv, FALSE); - } - ---- 4795,4805 ---- - static void - call_imactivatefunc(int active) - { -! typval_T argv[2]; - -! argv[0].v_type = VAR_NUMBER; -! argv[0].vval.v_number = active ? 1 : 0; -! argv[1].v_type = VAR_NUMBER; - (void)call_func_retnr(p_imaf, 1, argv, FALSE); - } - -*** ../vim-8.1.0052/src/normal.c 2018-06-03 14:42:17.844505109 +0200 ---- src/normal.c 2018-06-12 21:57:56.386656587 +0200 -*************** -*** 2219,2225 **** - op_function(oparg_T *oap UNUSED) - { - #ifdef FEAT_EVAL -! char_u *(argv[1]); - # ifdef FEAT_VIRTUALEDIT - int save_virtual_op = virtual_op; - # endif ---- 2219,2225 ---- - op_function(oparg_T *oap UNUSED) - { - #ifdef FEAT_EVAL -! typval_T argv[2]; - # ifdef FEAT_VIRTUALEDIT - int save_virtual_op = virtual_op; - # endif -*************** -*** 2235,2246 **** - /* Exclude the end position. */ - decl(&curbuf->b_op_end); - - if (oap->block_mode) -! argv[0] = (char_u *)"block"; - else if (oap->motion_type == MLINE) -! argv[0] = (char_u *)"line"; - else -! argv[0] = (char_u *)"char"; - - # ifdef FEAT_VIRTUALEDIT - /* Reset virtual_op so that 'virtualedit' can be changed in the ---- 2235,2248 ---- - /* Exclude the end position. */ - decl(&curbuf->b_op_end); - -+ argv[0].v_type = VAR_STRING; - if (oap->block_mode) -! argv[0].vval.v_string = (char_u *)"block"; - else if (oap->motion_type == MLINE) -! argv[0].vval.v_string = (char_u *)"line"; - else -! argv[0].vval.v_string = (char_u *)"char"; -! argv[1].v_type = VAR_UNKNOWN; - - # ifdef FEAT_VIRTUALEDIT - /* Reset virtual_op so that 'virtualedit' can be changed in the -*** ../vim-8.1.0052/src/proto/eval.pro 2018-05-17 13:52:32.000000000 +0200 ---- src/proto/eval.pro 2018-06-12 21:45:51.398816540 +0200 -*************** -*** 19,28 **** - list_T *eval_spell_expr(char_u *badword, char_u *expr); - int get_spellword(list_T *list, char_u **pp); - typval_T *eval_expr(char_u *arg, char_u **nextcmd); -! int call_vim_function(char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv); -! varnumber_T call_func_retnr(char_u *func, int argc, char_u **argv, int safe); -! void *call_func_retstr(char_u *func, int argc, char_u **argv, int safe); -! void *call_func_retlist(char_u *func, int argc, char_u **argv, int safe); - int eval_foldexpr(char_u *arg, int *cp); - void ex_let(exarg_T *eap); - void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first); ---- 19,28 ---- - list_T *eval_spell_expr(char_u *badword, char_u *expr); - int get_spellword(list_T *list, char_u **pp); - typval_T *eval_expr(char_u *arg, char_u **nextcmd); -! int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv, int safe); -! varnumber_T call_func_retnr(char_u *func, int argc, typval_T *argv, int safe); -! void *call_func_retstr(char_u *func, int argc, typval_T *argv, int safe); -! void *call_func_retlist(char_u *func, int argc, typval_T *argv, int safe); - int eval_foldexpr(char_u *arg, int *cp); - void ex_let(exarg_T *eap); - void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first); -*** ../vim-8.1.0052/src/testdir/test_ins_complete.vim 2018-02-10 16:12:08.000000000 +0100 ---- src/testdir/test_ins_complete.vim 2018-06-12 21:45:51.398816540 +0200 -*************** -*** 117,122 **** ---- 117,147 ---- - set omnifunc= - endfunc - -+ func Test_completefunc_args() -+ let s:args = [] -+ func! CompleteFunc(findstart, base) -+ let s:args += [[a:findstart, empty(a:base)]] -+ endfunc -+ new -+ -+ set completefunc=CompleteFunc -+ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x') -+ call assert_equal(s:args[0], [1, 1]) -+ call assert_equal(s:args[1][0], 0) -+ set completefunc= -+ -+ let s:args = [] -+ set omnifunc=CompleteFunc -+ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x') -+ call assert_equal(s:args[0], [1, 1]) -+ call assert_equal(s:args[1][0], 0) -+ set omnifunc= -+ -+ bwipe! -+ unlet s:args -+ delfunc CompleteFunc -+ endfunc -+ - function! s:CompleteDone_CompleteFuncDict( findstart, base ) - if a:findstart - return 0 -*** ../vim-8.1.0052/src/version.c 2018-06-12 21:35:37.518665900 +0200 ---- src/version.c 2018-06-12 21:46:24.302622304 +0200 -*************** -*** 763,764 **** ---- 763,766 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 53, - /**/ - --- -Bumper sticker: Honk if you love peace and quiet. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |