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)
diff --git a/src/textprop.c b/src/textprop.c
index c2000a3..fdbb14d 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -158,6 +158,12 @@
linenr_T start_lnum;
colnr_T start_col;
+ if (in_vim9script()
+ && (check_for_number_arg(argvars, 0) == FAIL
+ || check_for_number_arg(argvars, 1) == FAIL
+ || check_for_dict_arg(argvars, 2) == FAIL))
+ return;
+
start_lnum = tv_get_number(&argvars[0]);
start_col = tv_get_number(&argvars[1]);
if (start_col < 1)
@@ -532,12 +538,21 @@
void
f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED)
{
- linenr_T start = tv_get_number(&argvars[0]);
- linenr_T end = start;
+ linenr_T start;
+ linenr_T end;
linenr_T lnum;
buf_T *buf = curbuf;
int did_clear = FALSE;
+ if (in_vim9script()
+ && (check_for_number_arg(argvars, 0) == FAIL
+ || check_for_opt_number_arg(argvars, 1) == FAIL
+ || (argvars[1].v_type != VAR_UNKNOWN
+ && check_for_opt_dict_arg(argvars, 2) == FAIL)))
+ return;
+
+ start = tv_get_number(&argvars[0]);
+ end = start;
if (argvars[1].v_type != VAR_UNKNOWN)
{
end = tv_get_number(&argvars[1]);
@@ -774,8 +789,7 @@
if (in_vim9script()
&& (check_for_number_arg(argvars, 0) == FAIL
- || (argvars[1].v_type != VAR_UNKNOWN &&
- check_for_dict_arg(argvars, 1) == FAIL)))
+ || check_for_opt_dict_arg(argvars, 1) == FAIL))
return;
lnum = tv_get_number(&argvars[0]);
@@ -832,6 +846,14 @@
int both;
rettv->vval.v_number = 0;
+
+ if (in_vim9script()
+ && (check_for_dict_arg(argvars, 0) == FAIL
+ || check_for_opt_number_arg(argvars, 1) == FAIL
+ || (argvars[1].v_type != VAR_UNKNOWN
+ && check_for_opt_number_arg(argvars, 2) == FAIL)))
+ return;
+
if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
{
emsg(_(e_invarg));