comparison src/evalvars.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 90fa50a31994
children 1e6da8364a02
comparison
equal deleted inserted replaced
25301:fe178301fc04 25302:4d3c68196d05
4037 int done = FALSE; 4037 int done = FALSE;
4038 4038
4039 rettv->v_type = VAR_STRING; 4039 rettv->v_type = VAR_STRING;
4040 rettv->vval.v_string = NULL; 4040 rettv->vval.v_string = NULL;
4041 4041
4042 if (in_vim9script()
4043 && (check_for_number_arg(argvars, 0) == FAIL
4044 || check_for_string_arg(argvars, 1) == FAIL))
4045 return;
4046
4042 varname = tv_get_string_chk(&argvars[1]); 4047 varname = tv_get_string_chk(&argvars[1]);
4043 tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); 4048 tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL));
4044 if (tp != NULL && varname != NULL) 4049 if (tp != NULL && varname != NULL)
4045 { 4050 {
4046 // Set tp to be our tabpage, temporarily. Also set the window to the 4051 // Set tp to be our tabpage, temporarily. Also set the window to the
4071 * "gettabwinvar()" function 4076 * "gettabwinvar()" function
4072 */ 4077 */
4073 void 4078 void
4074 f_gettabwinvar(typval_T *argvars, typval_T *rettv) 4079 f_gettabwinvar(typval_T *argvars, typval_T *rettv)
4075 { 4080 {
4081 if (in_vim9script()
4082 && (check_for_number_arg(argvars, 0) == FAIL
4083 || check_for_number_arg(argvars, 1) == FAIL
4084 || check_for_string_arg(argvars, 2) == FAIL))
4085 return;
4086
4076 getwinvar(argvars, rettv, 1); 4087 getwinvar(argvars, rettv, 1);
4077 } 4088 }
4078 4089
4079 /* 4090 /*
4080 * "getwinvar()" function 4091 * "getwinvar()" function
4081 */ 4092 */
4082 void 4093 void
4083 f_getwinvar(typval_T *argvars, typval_T *rettv) 4094 f_getwinvar(typval_T *argvars, typval_T *rettv)
4084 { 4095 {
4096 if (in_vim9script()
4097 && (check_for_number_arg(argvars, 0) == FAIL
4098 || check_for_string_arg(argvars, 1) == FAIL))
4099 return;
4100
4085 getwinvar(argvars, rettv, 0); 4101 getwinvar(argvars, rettv, 0);
4086 } 4102 }
4087 4103
4088 /* 4104 /*
4089 * "getbufvar()" function 4105 * "getbufvar()" function
4163 typval_T *varp; 4179 typval_T *varp;
4164 4180
4165 if (check_secure()) 4181 if (check_secure())
4166 return; 4182 return;
4167 4183
4184 if (in_vim9script()
4185 && (check_for_number_arg(argvars, 0) == FAIL
4186 || check_for_string_arg(argvars, 1) == FAIL))
4187 return;
4188
4168 tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); 4189 tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL));
4169 varname = tv_get_string_chk(&argvars[1]); 4190 varname = tv_get_string_chk(&argvars[1]);
4170 varp = &argvars[2]; 4191 varp = &argvars[2];
4171 4192
4172 if (varname != NULL && varp != NULL && tp != NULL) 4193 if (varname != NULL && varp != NULL && tp != NULL)
4193 * "settabwinvar()" function 4214 * "settabwinvar()" function
4194 */ 4215 */
4195 void 4216 void
4196 f_settabwinvar(typval_T *argvars, typval_T *rettv UNUSED) 4217 f_settabwinvar(typval_T *argvars, typval_T *rettv UNUSED)
4197 { 4218 {
4219 if (in_vim9script()
4220 && (check_for_number_arg(argvars, 0) == FAIL
4221 || check_for_number_arg(argvars, 1) == FAIL
4222 || check_for_string_arg(argvars, 2) == FAIL))
4223 return;
4224
4198 setwinvar(argvars, 1); 4225 setwinvar(argvars, 1);
4199 } 4226 }
4200 4227
4201 /* 4228 /*
4202 * "setwinvar()" function 4229 * "setwinvar()" function
4203 */ 4230 */
4204 void 4231 void
4205 f_setwinvar(typval_T *argvars, typval_T *rettv UNUSED) 4232 f_setwinvar(typval_T *argvars, typval_T *rettv UNUSED)
4206 { 4233 {
4234 if (in_vim9script()
4235 && (check_for_number_arg(argvars, 0) == FAIL
4236 || check_for_string_arg(argvars, 1) == FAIL))
4237 return;
4238
4207 setwinvar(argvars, 0); 4239 setwinvar(argvars, 0);
4208 } 4240 }
4209 4241
4210 /* 4242 /*
4211 * "setbufvar()" function 4243 * "setbufvar()" function