comparison src/arglist.c @ 25384:e8e2c4d33b9b v8.2.3229

patch 8.2.3229: Vim9: runtime and compile time type checks are not the same Commit: https://github.com/vim/vim/commit/4490ec4e839e45a2e6923c265c7e9e64c240b805 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Jul 27 22:00:44 2021 +0200 patch 8.2.3229: Vim9: runtime and compile time type checks are not the same Problem: Vim9: runtime and compile time type checks are not the same. Solution: Add more runtime type checks for builtin functions. (Yegappan Lakshmanan, closes #8646)
author Bram Moolenaar <Bram@vim.org>
date Tue, 27 Jul 2021 22:15:06 +0200
parents 8f2262c72178
children a8f526c9b172
comparison
equal deleted inserted replaced
25383:510e4fcb5363 25384:e8e2c4d33b9b
1269 void 1269 void
1270 f_argc(typval_T *argvars, typval_T *rettv) 1270 f_argc(typval_T *argvars, typval_T *rettv)
1271 { 1271 {
1272 win_T *wp; 1272 win_T *wp;
1273 1273
1274 if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
1275 return;
1276
1274 if (argvars[0].v_type == VAR_UNKNOWN) 1277 if (argvars[0].v_type == VAR_UNKNOWN)
1275 // use the current window 1278 // use the current window
1276 rettv->vval.v_number = ARGCOUNT; 1279 rettv->vval.v_number = ARGCOUNT;
1277 else if (argvars[0].v_type == VAR_NUMBER 1280 else if (argvars[0].v_type == VAR_NUMBER
1278 && tv_get_number(&argvars[0]) == -1) 1281 && tv_get_number(&argvars[0]) == -1)
1304 void 1307 void
1305 f_arglistid(typval_T *argvars, typval_T *rettv) 1308 f_arglistid(typval_T *argvars, typval_T *rettv)
1306 { 1309 {
1307 win_T *wp; 1310 win_T *wp;
1308 1311
1312 if (in_vim9script()
1313 && (check_for_opt_number_arg(argvars, 0) == FAIL
1314 || (argvars[0].v_type != VAR_UNKNOWN
1315 && check_for_opt_number_arg(argvars, 1) == FAIL)))
1316 return;
1317
1309 rettv->vval.v_number = -1; 1318 rettv->vval.v_number = -1;
1310 wp = find_tabwin(&argvars[0], &argvars[1], NULL); 1319 wp = find_tabwin(&argvars[0], &argvars[1], NULL);
1311 if (wp != NULL) 1320 if (wp != NULL)
1312 rettv->vval.v_number = wp->w_alist->id; 1321 rettv->vval.v_number = wp->w_alist->id;
1313 } 1322 }
1333 f_argv(typval_T *argvars, typval_T *rettv) 1342 f_argv(typval_T *argvars, typval_T *rettv)
1334 { 1343 {
1335 int idx; 1344 int idx;
1336 aentry_T *arglist = NULL; 1345 aentry_T *arglist = NULL;
1337 int argcount = -1; 1346 int argcount = -1;
1347
1348 if (in_vim9script()
1349 && (check_for_opt_number_arg(argvars, 0) == FAIL
1350 || (argvars[0].v_type != VAR_UNKNOWN
1351 && check_for_opt_number_arg(argvars, 1) == FAIL)))
1352 return;
1338 1353
1339 if (argvars[0].v_type != VAR_UNKNOWN) 1354 if (argvars[0].v_type != VAR_UNKNOWN)
1340 { 1355 {
1341 if (argvars[1].v_type == VAR_UNKNOWN) 1356 if (argvars[1].v_type == VAR_UNKNOWN)
1342 { 1357 {