diff options
-rw-r--r-- | src/misc1.c | 2 | ||||
-rw-r--r-- | src/proto/typval.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_vim9_builtin.vim | 6 | ||||
-rw-r--r-- | src/typval.c | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 21 insertions, 1 deletions
diff --git a/src/misc1.c b/src/misc1.c index e66f5a85d..7d7f022f1 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -2359,7 +2359,7 @@ get_cmd_output_as_rettv( if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL - || check_for_string_or_number_or_list_arg(argvars, 1) == FAIL)) + || check_for_opt_string_or_number_or_list_arg(argvars, 1) == FAIL)) return; if (argvars[1].v_type != VAR_UNKNOWN) diff --git a/src/proto/typval.pro b/src/proto/typval.pro index 9b5af699d..e509e4d95 100644 --- a/src/proto/typval.pro +++ b/src/proto/typval.pro @@ -36,6 +36,7 @@ int check_for_string_or_list_arg(typval_T *args, int idx); int check_for_opt_string_or_list_arg(typval_T *args, int idx); int check_for_string_or_dict_arg(typval_T *args, int idx); int check_for_string_or_number_or_list_arg(typval_T *args, int idx); +int check_for_opt_string_or_number_or_list_arg(typval_T *args, int idx); int check_for_string_or_list_or_dict_arg(typval_T *args, int idx); int check_for_list_or_blob_arg(typval_T *args, int idx); int check_for_list_or_dict_arg(typval_T *args, int idx); diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index bd52f702c..20a81baac 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -3290,11 +3290,17 @@ enddef def Test_system() CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String or List required for argument 2') + assert_equal("123\n", system('echo 123')) enddef def Test_systemlist() CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String or List required for argument 2') + if has('win32') + call assert_equal(["123\r"], systemlist('echo 123')) + else + call assert_equal(['123'], systemlist('echo 123')) + endif enddef def Test_tabpagebuflist() diff --git a/src/typval.c b/src/typval.c index 34032177d..fb527e988 100644 --- a/src/typval.c +++ b/src/typval.c @@ -727,6 +727,17 @@ check_for_string_or_number_or_list_arg(typval_T *args, int idx) } /* + * Give an error and return FAIL unless "args[idx]" is an optional string + * or number or a list + */ + int +check_for_opt_string_or_number_or_list_arg(typval_T *args, int idx) +{ + return (args[idx].v_type == VAR_UNKNOWN + || check_for_string_or_number_or_list_arg(args, idx) != FAIL); +} + +/* * Give an error and return FAIL unless "args[idx]" is a string or a list * or a dict. */ diff --git a/src/version.c b/src/version.c index e6491db0f..85b8ae9f5 100644 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3232, +/**/ 3231, /**/ 3230, |