comparison src/textprop.c @ 25302:4d3c68196d05 v8.2.3188

patch 8.2.3188: Vim9: argument types are not checked at compile time Commit: https://github.com/vim/vim/commit/83494b4ac61898f687d6ef9dce4bad5802fb8e51 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Jul 20 17:51:51 2021 +0200 patch 8.2.3188: Vim9: argument types are not checked at compile time Problem: Vim9: argument types are not checked at compile time. Solution: Add several more type checks, also at runtime. (Yegappan Lakshmanan, closes #8587)
author Bram Moolenaar <Bram@vim.org>
date Tue, 20 Jul 2021 18:00:06 +0200
parents acda780ffc3e
children e8e2c4d33b9b
comparison
equal deleted inserted replaced
25301:fe178301fc04 25302:4d3c68196d05
156 f_prop_add(typval_T *argvars, typval_T *rettv UNUSED) 156 f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
157 { 157 {
158 linenr_T start_lnum; 158 linenr_T start_lnum;
159 colnr_T start_col; 159 colnr_T start_col;
160 160
161 if (in_vim9script()
162 && (check_for_number_arg(argvars, 0) == FAIL
163 || check_for_number_arg(argvars, 1) == FAIL
164 || check_for_dict_arg(argvars, 2) == FAIL))
165 return;
166
161 start_lnum = tv_get_number(&argvars[0]); 167 start_lnum = tv_get_number(&argvars[0]);
162 start_col = tv_get_number(&argvars[1]); 168 start_col = tv_get_number(&argvars[1]);
163 if (start_col < 1) 169 if (start_col < 1)
164 { 170 {
165 semsg(_(e_invalid_col), (long)start_col); 171 semsg(_(e_invalid_col), (long)start_col);
530 * prop_clear({lnum} [, {lnum_end} [, {bufnr}]]) 536 * prop_clear({lnum} [, {lnum_end} [, {bufnr}]])
531 */ 537 */
532 void 538 void
533 f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED) 539 f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED)
534 { 540 {
535 linenr_T start = tv_get_number(&argvars[0]); 541 linenr_T start;
536 linenr_T end = start; 542 linenr_T end;
537 linenr_T lnum; 543 linenr_T lnum;
538 buf_T *buf = curbuf; 544 buf_T *buf = curbuf;
539 int did_clear = FALSE; 545 int did_clear = FALSE;
540 546
547 if (in_vim9script()
548 && (check_for_number_arg(argvars, 0) == FAIL
549 || check_for_opt_number_arg(argvars, 1) == FAIL
550 || (argvars[1].v_type != VAR_UNKNOWN
551 && check_for_opt_dict_arg(argvars, 2) == FAIL)))
552 return;
553
554 start = tv_get_number(&argvars[0]);
555 end = start;
541 if (argvars[1].v_type != VAR_UNKNOWN) 556 if (argvars[1].v_type != VAR_UNKNOWN)
542 { 557 {
543 end = tv_get_number(&argvars[1]); 558 end = tv_get_number(&argvars[1]);
544 if (argvars[2].v_type != VAR_UNKNOWN) 559 if (argvars[2].v_type != VAR_UNKNOWN)
545 { 560 {
772 linenr_T lnum; 787 linenr_T lnum;
773 buf_T *buf = curbuf; 788 buf_T *buf = curbuf;
774 789
775 if (in_vim9script() 790 if (in_vim9script()
776 && (check_for_number_arg(argvars, 0) == FAIL 791 && (check_for_number_arg(argvars, 0) == FAIL
777 || (argvars[1].v_type != VAR_UNKNOWN && 792 || check_for_opt_dict_arg(argvars, 1) == FAIL))
778 check_for_dict_arg(argvars, 1) == FAIL)))
779 return; 793 return;
780 794
781 lnum = tv_get_number(&argvars[0]); 795 lnum = tv_get_number(&argvars[0]);
782 if (argvars[1].v_type != VAR_UNKNOWN) 796 if (argvars[1].v_type != VAR_UNKNOWN)
783 { 797 {
830 int id = -1; 844 int id = -1;
831 int type_id = -1; 845 int type_id = -1;
832 int both; 846 int both;
833 847
834 rettv->vval.v_number = 0; 848 rettv->vval.v_number = 0;
849
850 if (in_vim9script()
851 && (check_for_dict_arg(argvars, 0) == FAIL
852 || check_for_opt_number_arg(argvars, 1) == FAIL
853 || (argvars[1].v_type != VAR_UNKNOWN
854 && check_for_opt_number_arg(argvars, 2) == FAIL)))
855 return;
856
835 if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL) 857 if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
836 { 858 {
837 emsg(_(e_invarg)); 859 emsg(_(e_invarg));
838 return; 860 return;
839 } 861 }