patch 8.2.3162: Vim9: argument types are not checked at compile time

Problem:    Vim9: argument types are not checked at compile time.
Solution:   Add more type checks. (Yegappan Lakshmanan, closes #8560)
diff --git a/src/strings.c b/src/strings.c
index 61ffd84..a87922d 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -795,9 +795,15 @@
     char_u	*str;
     varnumber_T	idx;
 
+    rettv->vval.v_number = -1;
+
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_number_arg(argvars, 1) == FAIL))
+	return;
+
     str = tv_get_string_chk(&argvars[0]);
     idx = tv_get_number_chk(&argvars[1], NULL);
-    rettv->vval.v_number = -1;
     if (str == NULL || idx < 0)
 	return;
 
@@ -981,6 +987,12 @@
     int		byteidx = 0;
 
     rettv->vval.v_number = -1;
+
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_number_arg(argvars, 1) == FAIL))
+	return;
+
     str = tv_get_string_chk(&argvars[0]);
     if (str == NULL)
 	return;
@@ -1110,9 +1122,18 @@
     void
 f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
 {
-    char_u	*s = tv_get_string(&argvars[0]);
+    char_u	*s;
     int		col = 0;
 
+    rettv->vval.v_number = -1;
+
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| (argvars[1].v_type != VAR_UNKNOWN
+		    && check_for_number_arg(argvars, 1) == FAIL)))
+	return;
+
+    s = tv_get_string(&argvars[0]);
     if (argvars[1].v_type != VAR_UNKNOWN)
 	col = (int)tv_get_number(&argvars[1]);