Mercurial > vim
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 { |