comparison src/evalfunc.c @ 25252:acda780ffc3e v8.2.3162

patch 8.2.3162: Vim9: argument types are not checked at compile time Commit: https://github.com/vim/vim/commit/1a71d31bf34b0b2b08517903826004ec6fd440e5 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Thu Jul 15 12:49:58 2021 +0200 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 https://github.com/vim/vim/issues/8560)
author Bram Moolenaar <Bram@vim.org>
date Thu, 15 Jul 2021 13:00:06 +0200
parents 11ed1f0adb01
children 712e867f9721
comparison
equal deleted inserted replaced
25251:6024f64e0d2b 25252:acda780ffc3e
253 { 253 {
254 return check_arg_type(&t_dict_any, type, context); 254 return check_arg_type(&t_dict_any, type, context);
255 } 255 }
256 256
257 /* 257 /*
258 * Check "type" is a list of 'any'.
259 */
260 static int
261 arg_list_any(type_T *type, argcontext_T *context)
262 {
263 return check_arg_type(&t_list_any, type, context);
264 }
265
266 /*
258 * Check "type" is a list of numbers. 267 * Check "type" is a list of numbers.
259 */ 268 */
260 static int 269 static int
261 arg_list_number(type_T *type, argcontext_T *context) 270 arg_list_number(type_T *type, argcontext_T *context)
262 { 271 {
285 * Check "type" is a bool or number 0 or 1. 294 * Check "type" is a bool or number 0 or 1.
286 */ 295 */
287 static int 296 static int
288 arg_bool(type_T *type, argcontext_T *context) 297 arg_bool(type_T *type, argcontext_T *context)
289 { 298 {
290 if (type->tt_type == VAR_ANY
291 || type->tt_type == VAR_NUMBER || type->tt_type == VAR_BOOL)
292 return OK;
293 return check_arg_type(&t_bool, type, context); 299 return check_arg_type(&t_bool, type, context);
294 } 300 }
295 301
296 /* 302 /*
297 * Check "type" is a list or a blob. 303 * Check "type" is a list or a blob.
351 arg_type_mismatch(&t_string, type, context->arg_idx + 1); 357 arg_type_mismatch(&t_string, type, context->arg_idx + 1);
352 return FAIL; 358 return FAIL;
353 } 359 }
354 360
355 /* 361 /*
356 * Check "type" is a list or a dict. 362 * Check "type" is a list of 'any' or a dict of 'any'.
357 */ 363 */
358 static int 364 static int
359 arg_list_or_dict(type_T *type, argcontext_T *context) 365 arg_list_or_dict(type_T *type, argcontext_T *context)
360 { 366 {
361 if (type->tt_type == VAR_ANY 367 if (type->tt_type == VAR_ANY
364 arg_type_mismatch(&t_list_any, type, context->arg_idx + 1); 370 arg_type_mismatch(&t_list_any, type, context->arg_idx + 1);
365 return FAIL; 371 return FAIL;
366 } 372 }
367 373
368 /* 374 /*
375 * Check "type" is a job.
376 */
377 static int
378 arg_job(type_T *type, argcontext_T *context)
379 {
380 return check_arg_type(&t_job, type, context);
381 }
382
383 /*
369 * Check "type" is a channel or a job. 384 * Check "type" is a channel or a job.
370 */ 385 */
371 static int 386 static int
372 arg_chan_or_job(type_T *type, argcontext_T *context) 387 arg_chan_or_job(type_T *type, argcontext_T *context)
373 { 388 {
374 if (type->tt_type == VAR_CHANNEL || type->tt_type == VAR_JOB) 389 if (type->tt_type == VAR_ANY ||
390 type->tt_type == VAR_CHANNEL || type->tt_type == VAR_JOB)
375 return OK; 391 return OK;
376 arg_type_mismatch(&t_channel, type, context->arg_idx + 1); 392 arg_type_mismatch(&t_channel, type, context->arg_idx + 1);
377 return FAIL; 393 return FAIL;
378 } 394 }
379 395
457 473
458 474
459 /* 475 /*
460 * Lists of functions that check the argument types of a builtin function. 476 * Lists of functions that check the argument types of a builtin function.
461 */ 477 */
462 argcheck_T arg1_string[] = {arg_string}; 478 static argcheck_T arg1_string[] = {arg_string};
463 argcheck_T arg1_number[] = {arg_number}; 479 static argcheck_T arg1_number[] = {arg_number};
464 argcheck_T arg1_dict[] = {arg_dict_any}; 480 static argcheck_T arg1_bool[] = {arg_bool};
465 argcheck_T arg1_list_nr[] = {arg_list_number}; 481 static argcheck_T arg1_dict_any[] = {arg_dict_any};
466 argcheck_T arg1_list_string[] = {arg_list_string}; 482 static argcheck_T arg1_job[] = {arg_job};
467 argcheck_T arg1_float_or_nr[] = {arg_float_or_nr}; 483 static argcheck_T arg1_list_any[] = {arg_list_any};
468 argcheck_T arg1_string_or_nr[] = {arg_string_or_nr}; 484 static argcheck_T arg1_list_nr[] = {arg_list_number};
469 argcheck_T arg1_string_or_list_any[] = {arg_string_or_list_any}; 485 static argcheck_T arg1_list_string[] = {arg_list_string};
470 argcheck_T arg1_string_or_list_string[] = {arg_string_or_list_string}; 486 static argcheck_T arg1_float_or_nr[] = {arg_float_or_nr};
471 argcheck_T arg1_list_or_blob[] = {arg_list_or_blob}; 487 static argcheck_T arg1_string_or_nr[] = {arg_string_or_nr};
472 argcheck_T arg1_chan_or_job[] = {arg_chan_or_job}; 488 static argcheck_T arg1_string_or_list_any[] = {arg_string_or_list_any};
473 argcheck_T arg2_float_or_nr[] = {arg_float_or_nr, arg_float_or_nr}; 489 static argcheck_T arg1_string_or_list_string[] = {arg_string_or_list_string};
474 argcheck_T arg2_number[] = {arg_number, arg_number}; 490 static argcheck_T arg1_list_or_blob[] = {arg_list_or_blob};
475 argcheck_T arg2_string[] = {arg_string, arg_string}; 491 static argcheck_T arg1_list_or_dict[] = {arg_list_or_dict};
476 argcheck_T arg2_list_nr[] = {arg_list_number, arg_list_number}; 492 static argcheck_T arg1_chan_or_job[] = {arg_chan_or_job};
477 argcheck_T arg2_dict_string[] = {arg_dict_any, arg_string}; 493 static argcheck_T arg2_float_or_nr[] = {arg_float_or_nr, arg_float_or_nr};
478 argcheck_T arg2_dict_string_or_nr[] = {arg_dict_any, arg_string_or_nr}; 494 static argcheck_T arg2_number[] = {arg_number, arg_number};
479 argcheck_T arg2_string_dict[] = {arg_string, arg_dict_any}; 495 static argcheck_T arg2_string[] = {arg_string, arg_string};
480 argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev}; 496 static argcheck_T arg2_list_nr[] = {arg_list_number, arg_list_number};
481 argcheck_T arg2_str_or_nr_or_list_dict[] = {arg_str_or_nr_or_list, arg_dict_any}; 497 static argcheck_T arg2_nr_string[] = {arg_number, arg_string};
482 argcheck_T arg2_string_or_list_dict[] = {arg_string_or_list_any, arg_dict_any}; 498 static argcheck_T arg2_dict_string[] = {arg_dict_any, arg_string};
483 argcheck_T arg3_string[] = {arg_string, arg_string, arg_string}; 499 static argcheck_T arg2_dict_string_or_nr[] = {arg_dict_any, arg_string_or_nr};
484 argcheck_T arg3_number[] = {arg_number, arg_number, arg_number}; 500 static argcheck_T arg2_string_dict[] = {arg_string, arg_dict_any};
485 argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool}; 501 static argcheck_T arg2_string_nr[] = {arg_string, arg_number};
486 argcheck_T arg3_string_string_nr[] = {arg_string, arg_string, arg_number}; 502 //static argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev};
487 argcheck_T arg2_execute[] = {arg_string_or_list_string, arg_string}; 503 static argcheck_T arg2_str_or_nr_or_list_dict[] = {arg_str_or_nr_or_list, arg_dict_any};
488 argcheck_T arg23_win_execute[] = {arg_number, arg_string_or_list_string, arg_string}; 504 static argcheck_T arg2_string_or_list_dict[] = {arg_string_or_list_any, arg_dict_any};
489 argcheck_T arg2_setline[] = {arg_string_or_nr, arg_string_or_list_any}; 505 static argcheck_T arg2_chan_or_job_dict[] = {arg_chan_or_job, arg_dict_any};
490 argcheck_T arg3_setbufline[] = {arg_string_or_nr, arg_string_or_nr, arg_string_or_list_any}; 506 static argcheck_T arg2_nr_dict_any[] = {arg_number, arg_dict_any};
491 argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3}; 507 //static argcheck_T arg2_string_number[] = {arg_string, arg_number};
492 argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, arg_extend3}; 508 static argcheck_T arg3_string[] = {arg_string, arg_string, arg_string};
493 argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number}; 509 static argcheck_T arg3_number[] = {arg_number, arg_number, arg_number};
510 static argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool};
511 static argcheck_T arg3_string_string_nr[] = {arg_string, arg_string, arg_number};
512 static argcheck_T arg2_execute[] = {arg_string_or_list_string, arg_string};
513 static argcheck_T arg23_win_execute[] = {arg_number, arg_string_or_list_string, arg_string};
514 static argcheck_T arg2_setline[] = {arg_string_or_nr, NULL};
515 static argcheck_T arg3_setbufline[] = {arg_string_or_nr, arg_string_or_nr, arg_str_or_nr_or_list};
516 static argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3};
517 static argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, arg_extend3};
518 static argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number};
494 519
495 /* 520 /*
496 * Functions that return the return type of a builtin function. 521 * Functions that return the return type of a builtin function.
497 * Note that "argtypes" is NULL if "argcount" is zero. 522 * Note that "argtypes" is NULL if "argcount" is zero.
498 */ 523 */
760 ret_float, FLOAT_FUNC(f_acos)}, 785 ret_float, FLOAT_FUNC(f_acos)},
761 {"add", 2, 2, FEARG_1, NULL /* arg2_listblob_item */, 786 {"add", 2, 2, FEARG_1, NULL /* arg2_listblob_item */,
762 ret_first_arg, f_add}, 787 ret_first_arg, f_add},
763 {"and", 2, 2, FEARG_1, arg2_number, 788 {"and", 2, 2, FEARG_1, arg2_number,
764 ret_number, f_and}, 789 ret_number, f_and},
765 {"append", 2, 2, FEARG_2, NULL, 790 {"append", 2, 2, FEARG_2, arg2_setline,
766 ret_number_bool, f_append}, 791 ret_number_bool, f_append},
767 {"appendbufline", 3, 3, FEARG_3, NULL, 792 {"appendbufline", 3, 3, FEARG_3, arg3_setbufline,
768 ret_number_bool, f_appendbufline}, 793 ret_number_bool, f_appendbufline},
769 {"argc", 0, 1, 0, arg1_number, 794 {"argc", 0, 1, 0, arg1_number,
770 ret_number, f_argc}, 795 ret_number, f_argc},
771 {"argidx", 0, 0, 0, NULL, 796 {"argidx", 0, 0, 0, NULL,
772 ret_number, f_argidx}, 797 ret_number, f_argidx},
774 ret_number, f_arglistid}, 799 ret_number, f_arglistid},
775 {"argv", 0, 2, 0, arg2_number, 800 {"argv", 0, 2, 0, arg2_number,
776 ret_argv, f_argv}, 801 ret_argv, f_argv},
777 {"asin", 1, 1, FEARG_1, arg1_float_or_nr, 802 {"asin", 1, 1, FEARG_1, arg1_float_or_nr,
778 ret_float, FLOAT_FUNC(f_asin)}, 803 ret_float, FLOAT_FUNC(f_asin)},
779 {"assert_beeps", 1, 2, FEARG_1, NULL, 804 {"assert_beeps", 1, 1, FEARG_1, arg1_string,
780 ret_number_bool, f_assert_beeps}, 805 ret_number_bool, f_assert_beeps},
781 {"assert_equal", 2, 3, FEARG_2, NULL, 806 {"assert_equal", 2, 3, FEARG_2, NULL,
782 ret_number_bool, f_assert_equal}, 807 ret_number_bool, f_assert_equal},
783 {"assert_equalfile", 2, 3, FEARG_1, arg3_string, 808 {"assert_equalfile", 2, 3, FEARG_1, arg3_string,
784 ret_number_bool, f_assert_equalfile}, 809 ret_number_bool, f_assert_equalfile},
790 ret_number_bool, f_assert_false}, 815 ret_number_bool, f_assert_false},
791 {"assert_inrange", 3, 4, FEARG_3, NULL, 816 {"assert_inrange", 3, 4, FEARG_3, NULL,
792 ret_number_bool, f_assert_inrange}, 817 ret_number_bool, f_assert_inrange},
793 {"assert_match", 2, 3, FEARG_2, arg3_string, 818 {"assert_match", 2, 3, FEARG_2, arg3_string,
794 ret_number_bool, f_assert_match}, 819 ret_number_bool, f_assert_match},
795 {"assert_nobeep", 1, 2, FEARG_1, NULL, 820 {"assert_nobeep", 1, 1, FEARG_1, arg1_string,
796 ret_number_bool, f_assert_nobeep}, 821 ret_number_bool, f_assert_nobeep},
797 {"assert_notequal", 2, 3, FEARG_2, NULL, 822 {"assert_notequal", 2, 3, FEARG_2, NULL,
798 ret_number_bool, f_assert_notequal}, 823 ret_number_bool, f_assert_notequal},
799 {"assert_notmatch", 2, 3, FEARG_2, arg3_string, 824 {"assert_notmatch", 2, 3, FEARG_2, arg3_string,
800 ret_number_bool, f_assert_notmatch}, 825 ret_number_bool, f_assert_notmatch},
858 ret_number, f_bufwinid}, 883 ret_number, f_bufwinid},
859 {"bufwinnr", 1, 1, FEARG_1, arg1_string_or_nr, 884 {"bufwinnr", 1, 1, FEARG_1, arg1_string_or_nr,
860 ret_number, f_bufwinnr}, 885 ret_number, f_bufwinnr},
861 {"byte2line", 1, 1, FEARG_1, arg1_number, 886 {"byte2line", 1, 1, FEARG_1, arg1_number,
862 ret_number, f_byte2line}, 887 ret_number, f_byte2line},
863 {"byteidx", 2, 2, FEARG_1, NULL, 888 {"byteidx", 2, 2, FEARG_1, arg2_string_nr,
864 ret_number, f_byteidx}, 889 ret_number, f_byteidx},
865 {"byteidxcomp", 2, 2, FEARG_1, NULL, 890 {"byteidxcomp", 2, 2, FEARG_1, arg2_string_nr,
866 ret_number, f_byteidxcomp}, 891 ret_number, f_byteidxcomp},
867 {"call", 2, 3, FEARG_1, NULL, 892 {"call", 2, 3, FEARG_1, NULL,
868 ret_any, f_call}, 893 ret_any, f_call},
869 {"ceil", 1, 1, FEARG_1, arg1_float_or_nr, 894 {"ceil", 1, 1, FEARG_1, arg1_float_or_nr,
870 ret_float, FLOAT_FUNC(f_ceil)}, 895 ret_float, FLOAT_FUNC(f_ceil)},
878 ret_any, JOB_FUNC(f_ch_evalexpr)}, 903 ret_any, JOB_FUNC(f_ch_evalexpr)},
879 {"ch_evalraw", 2, 3, FEARG_1, NULL, 904 {"ch_evalraw", 2, 3, FEARG_1, NULL,
880 ret_any, JOB_FUNC(f_ch_evalraw)}, 905 ret_any, JOB_FUNC(f_ch_evalraw)},
881 {"ch_getbufnr", 2, 2, FEARG_1, NULL, 906 {"ch_getbufnr", 2, 2, FEARG_1, NULL,
882 ret_number, JOB_FUNC(f_ch_getbufnr)}, 907 ret_number, JOB_FUNC(f_ch_getbufnr)},
883 {"ch_getjob", 1, 1, FEARG_1, NULL, 908 {"ch_getjob", 1, 1, FEARG_1, arg1_chan_or_job,
884 ret_job, JOB_FUNC(f_ch_getjob)}, 909 ret_job, JOB_FUNC(f_ch_getjob)},
885 {"ch_info", 1, 1, FEARG_1, arg1_chan_or_job, 910 {"ch_info", 1, 1, FEARG_1, arg1_chan_or_job,
886 ret_dict_any, JOB_FUNC(f_ch_info)}, 911 ret_dict_any, JOB_FUNC(f_ch_info)},
887 {"ch_log", 1, 2, FEARG_1, NULL, 912 {"ch_log", 1, 2, FEARG_1, NULL,
888 ret_void, JOB_FUNC(f_ch_log)}, 913 ret_void, JOB_FUNC(f_ch_log)},
889 {"ch_logfile", 1, 2, FEARG_1, arg2_string, 914 {"ch_logfile", 1, 2, FEARG_1, arg2_string,
890 ret_void, JOB_FUNC(f_ch_logfile)}, 915 ret_void, JOB_FUNC(f_ch_logfile)},
891 {"ch_open", 1, 2, FEARG_1, arg2_string_dict, 916 {"ch_open", 1, 2, FEARG_1, arg2_string_dict,
892 ret_channel, JOB_FUNC(f_ch_open)}, 917 ret_channel, JOB_FUNC(f_ch_open)},
893 {"ch_read", 1, 2, FEARG_1, NULL, 918 {"ch_read", 1, 2, FEARG_1, arg2_chan_or_job_dict,
894 ret_string, JOB_FUNC(f_ch_read)}, 919 ret_string, JOB_FUNC(f_ch_read)},
895 {"ch_readblob", 1, 2, FEARG_1, NULL, 920 {"ch_readblob", 1, 2, FEARG_1, arg2_chan_or_job_dict,
896 ret_blob, JOB_FUNC(f_ch_readblob)}, 921 ret_blob, JOB_FUNC(f_ch_readblob)},
897 {"ch_readraw", 1, 2, FEARG_1, NULL, 922 {"ch_readraw", 1, 2, FEARG_1, arg2_chan_or_job_dict,
898 ret_string, JOB_FUNC(f_ch_readraw)}, 923 ret_string, JOB_FUNC(f_ch_readraw)},
899 {"ch_sendexpr", 2, 3, FEARG_1, NULL, 924 {"ch_sendexpr", 2, 3, FEARG_1, NULL,
900 ret_void, JOB_FUNC(f_ch_sendexpr)}, 925 ret_void, JOB_FUNC(f_ch_sendexpr)},
901 {"ch_sendraw", 2, 3, FEARG_1, NULL, 926 {"ch_sendraw", 2, 3, FEARG_1, NULL,
902 ret_void, JOB_FUNC(f_ch_sendraw)}, 927 ret_void, JOB_FUNC(f_ch_sendraw)},
903 {"ch_setoptions", 2, 2, FEARG_1, NULL, 928 {"ch_setoptions", 2, 2, FEARG_1, arg2_chan_or_job_dict,
904 ret_void, JOB_FUNC(f_ch_setoptions)}, 929 ret_void, JOB_FUNC(f_ch_setoptions)},
905 {"ch_status", 1, 2, FEARG_1, NULL, 930 {"ch_status", 1, 2, FEARG_1, arg2_chan_or_job_dict,
906 ret_string, JOB_FUNC(f_ch_status)}, 931 ret_string, JOB_FUNC(f_ch_status)},
907 {"changenr", 0, 0, 0, NULL, 932 {"changenr", 0, 0, 0, NULL,
908 ret_number, f_changenr}, 933 ret_number, f_changenr},
909 {"char2nr", 1, 2, FEARG_1, NULL, 934 {"char2nr", 1, 2, FEARG_1, NULL,
910 ret_number, f_char2nr}, 935 ret_number, f_char2nr},
962 ret_number_bool, f_did_filetype}, 987 ret_number_bool, f_did_filetype},
963 {"diff_filler", 1, 1, FEARG_1, arg1_string_or_nr, 988 {"diff_filler", 1, 1, FEARG_1, arg1_string_or_nr,
964 ret_number, f_diff_filler}, 989 ret_number, f_diff_filler},
965 {"diff_hlID", 2, 2, FEARG_1, NULL, 990 {"diff_hlID", 2, 2, FEARG_1, NULL,
966 ret_number, f_diff_hlID}, 991 ret_number, f_diff_hlID},
967 {"echoraw", 1, 1, FEARG_1, NULL, 992 {"echoraw", 1, 1, FEARG_1, arg1_string,
968 ret_void, f_echoraw}, 993 ret_void, f_echoraw},
969 {"empty", 1, 1, FEARG_1, NULL, 994 {"empty", 1, 1, FEARG_1, NULL,
970 ret_number_bool, f_empty}, 995 ret_number_bool, f_empty},
971 {"environ", 0, 0, 0, NULL, 996 {"environ", 0, 0, 0, NULL,
972 ret_dict_string, f_environ}, 997 ret_dict_string, f_environ},
1038 ret_string, f_fullcommand}, 1063 ret_string, f_fullcommand},
1039 {"funcref", 1, 3, FEARG_1, NULL, 1064 {"funcref", 1, 3, FEARG_1, NULL,
1040 ret_func_any, f_funcref}, 1065 ret_func_any, f_funcref},
1041 {"function", 1, 3, FEARG_1, NULL, 1066 {"function", 1, 3, FEARG_1, NULL,
1042 ret_f_function, f_function}, 1067 ret_f_function, f_function},
1043 {"garbagecollect", 0, 1, 0, NULL, 1068 {"garbagecollect", 0, 1, 0, arg1_bool,
1044 ret_void, f_garbagecollect}, 1069 ret_void, f_garbagecollect},
1045 {"get", 2, 3, FEARG_1, NULL, 1070 {"get", 2, 3, FEARG_1, NULL,
1046 ret_any, f_get}, 1071 ret_any, f_get},
1047 {"getbufinfo", 0, 1, FEARG_1, NULL, 1072 {"getbufinfo", 0, 1, FEARG_1, NULL,
1048 ret_list_dict_any, f_getbufinfo}, 1073 ret_list_dict_any, f_getbufinfo},
1050 ret_list_string, f_getbufline}, 1075 ret_list_string, f_getbufline},
1051 {"getbufvar", 2, 3, FEARG_1, NULL, 1076 {"getbufvar", 2, 3, FEARG_1, NULL,
1052 ret_any, f_getbufvar}, 1077 ret_any, f_getbufvar},
1053 {"getchangelist", 0, 1, FEARG_1, arg1_string_or_nr, 1078 {"getchangelist", 0, 1, FEARG_1, arg1_string_or_nr,
1054 ret_list_any, f_getchangelist}, 1079 ret_list_any, f_getchangelist},
1055 {"getchar", 0, 1, 0, NULL, 1080 {"getchar", 0, 1, 0, arg1_bool,
1056 ret_any, f_getchar}, 1081 ret_any, f_getchar},
1057 {"getcharmod", 0, 0, 0, NULL, 1082 {"getcharmod", 0, 0, 0, NULL,
1058 ret_number, f_getcharmod}, 1083 ret_number, f_getcharmod},
1059 {"getcharpos", 1, 1, FEARG_1, NULL, 1084 {"getcharpos", 1, 1, FEARG_1, arg1_string,
1060 ret_list_number, f_getcharpos}, 1085 ret_list_number, f_getcharpos},
1061 {"getcharsearch", 0, 0, 0, NULL, 1086 {"getcharsearch", 0, 0, 0, NULL,
1062 ret_dict_any, f_getcharsearch}, 1087 ret_dict_any, f_getcharsearch},
1063 {"getcharstr", 0, 1, 0, NULL, 1088 {"getcharstr", 0, 1, 0, arg1_bool,
1064 ret_string, f_getcharstr}, 1089 ret_string, f_getcharstr},
1065 {"getcmdline", 0, 0, 0, NULL, 1090 {"getcmdline", 0, 0, 0, NULL,
1066 ret_string, f_getcmdline}, 1091 ret_string, f_getcmdline},
1067 {"getcmdpos", 0, 0, 0, NULL, 1092 {"getcmdpos", 0, 0, 0, NULL,
1068 ret_number, f_getcmdpos}, 1093 ret_number, f_getcmdpos},
1094 ret_number_bool, f_getimstatus}, 1119 ret_number_bool, f_getimstatus},
1095 {"getjumplist", 0, 2, FEARG_1, arg2_number, 1120 {"getjumplist", 0, 2, FEARG_1, arg2_number,
1096 ret_list_any, f_getjumplist}, 1121 ret_list_any, f_getjumplist},
1097 {"getline", 1, 2, FEARG_1, NULL, 1122 {"getline", 1, 2, FEARG_1, NULL,
1098 ret_f_getline, f_getline}, 1123 ret_f_getline, f_getline},
1099 {"getloclist", 1, 2, 0, NULL, 1124 {"getloclist", 1, 2, 0, arg2_nr_dict_any,
1100 ret_list_or_dict_1, f_getloclist}, 1125 ret_list_or_dict_1, f_getloclist},
1101 {"getmarklist", 0, 1, FEARG_1, arg1_string_or_nr, 1126 {"getmarklist", 0, 1, FEARG_1, arg1_string_or_nr,
1102 ret_list_dict_any, f_getmarklist}, 1127 ret_list_dict_any, f_getmarklist},
1103 {"getmatches", 0, 1, 0, arg1_number, 1128 {"getmatches", 0, 1, 0, arg1_number,
1104 ret_list_dict_any, f_getmatches}, 1129 ret_list_dict_any, f_getmatches},
1106 ret_dict_number, f_getmousepos}, 1131 ret_dict_number, f_getmousepos},
1107 {"getpid", 0, 0, 0, NULL, 1132 {"getpid", 0, 0, 0, NULL,
1108 ret_number, f_getpid}, 1133 ret_number, f_getpid},
1109 {"getpos", 1, 1, FEARG_1, arg1_string, 1134 {"getpos", 1, 1, FEARG_1, arg1_string,
1110 ret_list_number, f_getpos}, 1135 ret_list_number, f_getpos},
1111 {"getqflist", 0, 1, 0, arg1_dict, 1136 {"getqflist", 0, 1, 0, arg1_dict_any,
1112 ret_list_or_dict_0, f_getqflist}, 1137 ret_list_or_dict_0, f_getqflist},
1113 {"getreg", 0, 3, FEARG_1, NULL, 1138 {"getreg", 0, 3, FEARG_1, NULL,
1114 ret_getreg, f_getreg}, 1139 ret_getreg, f_getreg},
1115 {"getreginfo", 0, 1, FEARG_1, arg1_string, 1140 {"getreginfo", 0, 1, FEARG_1, arg1_string,
1116 ret_dict_any, f_getreginfo}, 1141 ret_dict_any, f_getreginfo},
1156 ret_number_bool, f_hlexists}, 1181 ret_number_bool, f_hlexists},
1157 {"histadd", 2, 2, FEARG_2, arg2_string, 1182 {"histadd", 2, 2, FEARG_2, arg2_string,
1158 ret_number_bool, f_histadd}, 1183 ret_number_bool, f_histadd},
1159 {"histdel", 1, 2, FEARG_1, NULL, 1184 {"histdel", 1, 2, FEARG_1, NULL,
1160 ret_number_bool, f_histdel}, 1185 ret_number_bool, f_histdel},
1161 {"histget", 1, 2, FEARG_1, NULL, 1186 {"histget", 1, 2, FEARG_1, arg2_string_nr,
1162 ret_string, f_histget}, 1187 ret_string, f_histget},
1163 {"histnr", 1, 1, FEARG_1, arg1_string, 1188 {"histnr", 1, 1, FEARG_1, arg1_string,
1164 ret_number, f_histnr}, 1189 ret_number, f_histnr},
1165 {"hlID", 1, 1, FEARG_1, arg1_string, 1190 {"hlID", 1, 1, FEARG_1, arg1_string,
1166 ret_number, f_hlID}, 1191 ret_number, f_hlID},
1194 ret_number, f_invert}, 1219 ret_number, f_invert},
1195 {"isdirectory", 1, 1, FEARG_1, arg1_string, 1220 {"isdirectory", 1, 1, FEARG_1, arg1_string,
1196 ret_number_bool, f_isdirectory}, 1221 ret_number_bool, f_isdirectory},
1197 {"isinf", 1, 1, FEARG_1, arg1_float_or_nr, 1222 {"isinf", 1, 1, FEARG_1, arg1_float_or_nr,
1198 ret_number, MATH_FUNC(f_isinf)}, 1223 ret_number, MATH_FUNC(f_isinf)},
1199 {"islocked", 1, 1, FEARG_1, NULL, 1224 {"islocked", 1, 1, FEARG_1, arg1_string,
1200 ret_number_bool, f_islocked}, 1225 ret_number_bool, f_islocked},
1201 {"isnan", 1, 1, FEARG_1, arg1_float_or_nr, 1226 {"isnan", 1, 1, FEARG_1, arg1_float_or_nr,
1202 ret_number_bool, MATH_FUNC(f_isnan)}, 1227 ret_number_bool, MATH_FUNC(f_isnan)},
1203 {"items", 1, 1, FEARG_1, arg1_dict, 1228 {"items", 1, 1, FEARG_1, arg1_dict_any,
1204 ret_list_items, f_items}, 1229 ret_list_items, f_items},
1205 {"job_getchannel", 1, 1, FEARG_1, NULL, 1230 {"job_getchannel", 1, 1, FEARG_1, arg1_job,
1206 ret_channel, JOB_FUNC(f_job_getchannel)}, 1231 ret_channel, JOB_FUNC(f_job_getchannel)},
1207 {"job_info", 0, 1, FEARG_1, NULL, 1232 {"job_info", 0, 1, FEARG_1, arg1_job,
1208 ret_job_info, JOB_FUNC(f_job_info)}, 1233 ret_job_info, JOB_FUNC(f_job_info)},
1209 {"job_setoptions", 2, 2, FEARG_1, NULL, 1234 {"job_setoptions", 2, 2, FEARG_1, NULL,
1210 ret_void, JOB_FUNC(f_job_setoptions)}, 1235 ret_void, JOB_FUNC(f_job_setoptions)},
1211 {"job_start", 1, 2, FEARG_1, NULL, 1236 {"job_start", 1, 2, FEARG_1, NULL,
1212 ret_job, JOB_FUNC(f_job_start)}, 1237 ret_job, JOB_FUNC(f_job_start)},
1213 {"job_status", 1, 1, FEARG_1, NULL, 1238 {"job_status", 1, 1, FEARG_1, arg1_job,
1214 ret_string, JOB_FUNC(f_job_status)}, 1239 ret_string, JOB_FUNC(f_job_status)},
1215 {"job_stop", 1, 2, FEARG_1, NULL, 1240 {"job_stop", 1, 2, FEARG_1, NULL,
1216 ret_number_bool, JOB_FUNC(f_job_stop)}, 1241 ret_number_bool, JOB_FUNC(f_job_stop)},
1217 {"join", 1, 2, FEARG_1, NULL, 1242 {"join", 1, 2, FEARG_1, NULL,
1218 ret_string, f_join}, 1243 ret_string, f_join},
1222 ret_string, f_js_encode}, 1247 ret_string, f_js_encode},
1223 {"json_decode", 1, 1, FEARG_1, arg1_string, 1248 {"json_decode", 1, 1, FEARG_1, arg1_string,
1224 ret_any, f_json_decode}, 1249 ret_any, f_json_decode},
1225 {"json_encode", 1, 1, FEARG_1, NULL, 1250 {"json_encode", 1, 1, FEARG_1, NULL,
1226 ret_string, f_json_encode}, 1251 ret_string, f_json_encode},
1227 {"keys", 1, 1, FEARG_1, arg1_dict, 1252 {"keys", 1, 1, FEARG_1, arg1_dict_any,
1228 ret_list_string, f_keys}, 1253 ret_list_string, f_keys},
1229 {"last_buffer_nr", 0, 0, 0, arg1_string_or_nr, // obsolete 1254 {"last_buffer_nr", 0, 0, 0, arg1_string_or_nr, // obsolete
1230 ret_number, f_last_buffer_nr}, 1255 ret_number, f_last_buffer_nr},
1231 {"len", 1, 1, FEARG_1, NULL, 1256 {"len", 1, 1, FEARG_1, NULL,
1232 ret_number, f_len}, 1257 ret_number, f_len},
1233 {"libcall", 3, 3, FEARG_3, NULL, 1258 {"libcall", 3, 3, FEARG_3, NULL,
1234 ret_string, f_libcall}, 1259 ret_string, f_libcall},
1235 {"libcallnr", 3, 3, FEARG_3, NULL, 1260 {"libcallnr", 3, 3, FEARG_3, NULL,
1236 ret_number, f_libcallnr}, 1261 ret_number, f_libcallnr},
1237 {"line", 1, 2, FEARG_1, NULL, 1262 {"line", 1, 2, FEARG_1, arg2_string_nr,
1238 ret_number, f_line}, 1263 ret_number, f_line},
1239 {"line2byte", 1, 1, FEARG_1, arg1_string_or_nr, 1264 {"line2byte", 1, 1, FEARG_1, arg1_string_or_nr,
1240 ret_number, f_line2byte}, 1265 ret_number, f_line2byte},
1241 {"lispindent", 1, 1, FEARG_1, arg1_string_or_nr, 1266 {"lispindent", 1, 1, FEARG_1, arg1_string_or_nr,
1242 ret_number, f_lispindent}, 1267 ret_number, f_lispindent},
1292 ret_list_string, f_matchlist}, 1317 ret_list_string, f_matchlist},
1293 {"matchstr", 2, 4, FEARG_1, NULL, 1318 {"matchstr", 2, 4, FEARG_1, NULL,
1294 ret_string, f_matchstr}, 1319 ret_string, f_matchstr},
1295 {"matchstrpos", 2, 4, FEARG_1, NULL, 1320 {"matchstrpos", 2, 4, FEARG_1, NULL,
1296 ret_list_any, f_matchstrpos}, 1321 ret_list_any, f_matchstrpos},
1297 {"max", 1, 1, FEARG_1, NULL, 1322 {"max", 1, 1, FEARG_1, arg1_list_or_dict,
1298 ret_number, f_max}, 1323 ret_number, f_max},
1299 {"menu_info", 1, 2, FEARG_1, arg2_string, 1324 {"menu_info", 1, 2, FEARG_1, arg2_string,
1300 ret_dict_any, 1325 ret_dict_any,
1301 #ifdef FEAT_MENU 1326 #ifdef FEAT_MENU
1302 f_menu_info 1327 f_menu_info
1303 #else 1328 #else
1304 NULL 1329 NULL
1305 #endif 1330 #endif
1306 }, 1331 },
1307 {"min", 1, 1, FEARG_1, NULL, 1332 {"min", 1, 1, FEARG_1, arg1_list_or_dict,
1308 ret_number, f_min}, 1333 ret_number, f_min},
1309 {"mkdir", 1, 3, FEARG_1, arg3_string_string_nr, 1334 {"mkdir", 1, 3, FEARG_1, arg3_string_string_nr,
1310 ret_number_bool, f_mkdir}, 1335 ret_number_bool, f_mkdir},
1311 {"mode", 0, 1, FEARG_1, NULL, 1336 {"mode", 0, 1, FEARG_1, arg1_bool,
1312 ret_string, f_mode}, 1337 ret_string, f_mode},
1313 {"mzeval", 1, 1, FEARG_1, NULL, 1338 {"mzeval", 1, 1, FEARG_1, arg1_string,
1314 ret_any, 1339 ret_any,
1315 #ifdef FEAT_MZSCHEME 1340 #ifdef FEAT_MZSCHEME
1316 f_mzeval 1341 f_mzeval
1317 #else 1342 #else
1318 NULL 1343 NULL
1322 ret_number, f_nextnonblank}, 1347 ret_number, f_nextnonblank},
1323 {"nr2char", 1, 2, FEARG_1, NULL, 1348 {"nr2char", 1, 2, FEARG_1, NULL,
1324 ret_string, f_nr2char}, 1349 ret_string, f_nr2char},
1325 {"or", 2, 2, FEARG_1, arg2_number, 1350 {"or", 2, 2, FEARG_1, arg2_number,
1326 ret_number, f_or}, 1351 ret_number, f_or},
1327 {"pathshorten", 1, 2, FEARG_1, NULL, 1352 {"pathshorten", 1, 2, FEARG_1, arg2_string_nr,
1328 ret_string, f_pathshorten}, 1353 ret_string, f_pathshorten},
1329 {"perleval", 1, 1, FEARG_1, NULL, 1354 {"perleval", 1, 1, FEARG_1, arg1_string,
1330 ret_any, 1355 ret_any,
1331 #ifdef FEAT_PERL 1356 #ifdef FEAT_PERL
1332 f_perleval 1357 f_perleval
1333 #else 1358 #else
1334 NULL 1359 NULL
1336 }, 1361 },
1337 {"popup_atcursor", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1362 {"popup_atcursor", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1338 ret_number, PROP_FUNC(f_popup_atcursor)}, 1363 ret_number, PROP_FUNC(f_popup_atcursor)},
1339 {"popup_beval", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1364 {"popup_beval", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1340 ret_number, PROP_FUNC(f_popup_beval)}, 1365 ret_number, PROP_FUNC(f_popup_beval)},
1341 {"popup_clear", 0, 1, 0, NULL, 1366 {"popup_clear", 0, 1, 0, arg1_bool,
1342 ret_void, PROP_FUNC(f_popup_clear)}, 1367 ret_void, PROP_FUNC(f_popup_clear)},
1343 {"popup_close", 1, 2, FEARG_1, NULL, 1368 {"popup_close", 1, 2, FEARG_1, NULL,
1344 ret_void, PROP_FUNC(f_popup_close)}, 1369 ret_void, PROP_FUNC(f_popup_close)},
1345 {"popup_create", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1370 {"popup_create", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1346 ret_number, PROP_FUNC(f_popup_create)}, 1371 ret_number, PROP_FUNC(f_popup_create)},
1347 {"popup_dialog", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1372 {"popup_dialog", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1348 ret_number, PROP_FUNC(f_popup_dialog)}, 1373 ret_number, PROP_FUNC(f_popup_dialog)},
1349 {"popup_filter_menu", 2, 2, 0, NULL, 1374 {"popup_filter_menu", 2, 2, 0, arg2_nr_string,
1350 ret_bool, PROP_FUNC(f_popup_filter_menu)}, 1375 ret_bool, PROP_FUNC(f_popup_filter_menu)},
1351 {"popup_filter_yesno", 2, 2, 0, NULL, 1376 {"popup_filter_yesno", 2, 2, 0, arg2_nr_string,
1352 ret_bool, PROP_FUNC(f_popup_filter_yesno)}, 1377 ret_bool, PROP_FUNC(f_popup_filter_yesno)},
1353 {"popup_findinfo", 0, 0, 0, NULL, 1378 {"popup_findinfo", 0, 0, 0, NULL,
1354 ret_number, PROP_FUNC(f_popup_findinfo)}, 1379 ret_number, PROP_FUNC(f_popup_findinfo)},
1355 {"popup_findpreview", 0, 0, 0, NULL, 1380 {"popup_findpreview", 0, 0, 0, NULL,
1356 ret_number, PROP_FUNC(f_popup_findpreview)}, 1381 ret_number, PROP_FUNC(f_popup_findpreview)},
1357 {"popup_getoptions", 1, 1, FEARG_1, NULL, 1382 {"popup_getoptions", 1, 1, FEARG_1, arg1_number,
1358 ret_dict_any, PROP_FUNC(f_popup_getoptions)}, 1383 ret_dict_any, PROP_FUNC(f_popup_getoptions)},
1359 {"popup_getpos", 1, 1, FEARG_1, NULL, 1384 {"popup_getpos", 1, 1, FEARG_1, arg1_number,
1360 ret_dict_any, PROP_FUNC(f_popup_getpos)}, 1385 ret_dict_any, PROP_FUNC(f_popup_getpos)},
1361 {"popup_hide", 1, 1, FEARG_1, NULL, 1386 {"popup_hide", 1, 1, FEARG_1, arg1_number,
1362 ret_void, PROP_FUNC(f_popup_hide)}, 1387 ret_void, PROP_FUNC(f_popup_hide)},
1363 {"popup_list", 0, 0, 0, NULL, 1388 {"popup_list", 0, 0, 0, NULL,
1364 ret_list_number, PROP_FUNC(f_popup_list)}, 1389 ret_list_number, PROP_FUNC(f_popup_list)},
1365 {"popup_locate", 2, 2, 0, arg2_number, 1390 {"popup_locate", 2, 2, 0, arg2_number,
1366 ret_number, PROP_FUNC(f_popup_locate)}, 1391 ret_number, PROP_FUNC(f_popup_locate)},
1367 {"popup_menu", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1392 {"popup_menu", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1368 ret_number, PROP_FUNC(f_popup_menu)}, 1393 ret_number, PROP_FUNC(f_popup_menu)},
1369 {"popup_move", 2, 2, FEARG_1, NULL, 1394 {"popup_move", 2, 2, FEARG_1, arg2_nr_dict_any,
1370 ret_void, PROP_FUNC(f_popup_move)}, 1395 ret_void, PROP_FUNC(f_popup_move)},
1371 {"popup_notification", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict, 1396 {"popup_notification", 2, 2, FEARG_1, arg2_str_or_nr_or_list_dict,
1372 ret_number, PROP_FUNC(f_popup_notification)}, 1397 ret_number, PROP_FUNC(f_popup_notification)},
1373 {"popup_setoptions", 2, 2, FEARG_1, NULL, 1398 {"popup_setoptions", 2, 2, FEARG_1, arg2_nr_dict_any,
1374 ret_void, PROP_FUNC(f_popup_setoptions)}, 1399 ret_void, PROP_FUNC(f_popup_setoptions)},
1375 {"popup_settext", 2, 2, FEARG_1, NULL, 1400 {"popup_settext", 2, 2, FEARG_1, NULL,
1376 ret_void, PROP_FUNC(f_popup_settext)}, 1401 ret_void, PROP_FUNC(f_popup_settext)},
1377 {"popup_show", 1, 1, FEARG_1, NULL, 1402 {"popup_show", 1, 1, FEARG_1, arg1_number,
1378 ret_void, PROP_FUNC(f_popup_show)}, 1403 ret_void, PROP_FUNC(f_popup_show)},
1379 {"pow", 2, 2, FEARG_1, arg2_float_or_nr, 1404 {"pow", 2, 2, FEARG_1, arg2_float_or_nr,
1380 ret_float, FLOAT_FUNC(f_pow)}, 1405 ret_float, FLOAT_FUNC(f_pow)},
1381 {"prevnonblank", 1, 1, FEARG_1, arg1_string_or_nr, 1406 {"prevnonblank", 1, 1, FEARG_1, arg1_string_or_nr,
1382 ret_number, f_prevnonblank}, 1407 ret_number, f_prevnonblank},
1394 ret_void, PROP_FUNC(f_prop_add)}, 1419 ret_void, PROP_FUNC(f_prop_add)},
1395 {"prop_clear", 1, 3, FEARG_1, NULL, 1420 {"prop_clear", 1, 3, FEARG_1, NULL,
1396 ret_void, PROP_FUNC(f_prop_clear)}, 1421 ret_void, PROP_FUNC(f_prop_clear)},
1397 {"prop_find", 1, 2, FEARG_1, arg2_dict_string, 1422 {"prop_find", 1, 2, FEARG_1, arg2_dict_string,
1398 ret_dict_any, PROP_FUNC(f_prop_find)}, 1423 ret_dict_any, PROP_FUNC(f_prop_find)},
1399 {"prop_list", 1, 2, FEARG_1, NULL, 1424 {"prop_list", 1, 2, FEARG_1, arg2_nr_dict_any,
1400 ret_list_dict_any, PROP_FUNC(f_prop_list)}, 1425 ret_list_dict_any, PROP_FUNC(f_prop_list)},
1401 {"prop_remove", 1, 3, FEARG_1, NULL, 1426 {"prop_remove", 1, 3, FEARG_1, NULL,
1402 ret_number, PROP_FUNC(f_prop_remove)}, 1427 ret_number, PROP_FUNC(f_prop_remove)},
1403 {"prop_type_add", 2, 2, FEARG_1, arg2_string_dict, 1428 {"prop_type_add", 2, 2, FEARG_1, arg2_string_dict,
1404 ret_void, PROP_FUNC(f_prop_type_add)}, 1429 ret_void, PROP_FUNC(f_prop_type_add)},
1406 ret_void, PROP_FUNC(f_prop_type_change)}, 1431 ret_void, PROP_FUNC(f_prop_type_change)},
1407 {"prop_type_delete", 1, 2, FEARG_1, arg2_string_dict, 1432 {"prop_type_delete", 1, 2, FEARG_1, arg2_string_dict,
1408 ret_void, PROP_FUNC(f_prop_type_delete)}, 1433 ret_void, PROP_FUNC(f_prop_type_delete)},
1409 {"prop_type_get", 1, 2, FEARG_1, arg2_string_dict, 1434 {"prop_type_get", 1, 2, FEARG_1, arg2_string_dict,
1410 ret_dict_any, PROP_FUNC(f_prop_type_get)}, 1435 ret_dict_any, PROP_FUNC(f_prop_type_get)},
1411 {"prop_type_list", 0, 1, FEARG_1, NULL, 1436 {"prop_type_list", 0, 1, FEARG_1, arg1_dict_any,
1412 ret_list_string, PROP_FUNC(f_prop_type_list)}, 1437 ret_list_string, PROP_FUNC(f_prop_type_list)},
1413 {"pum_getpos", 0, 0, 0, NULL, 1438 {"pum_getpos", 0, 0, 0, NULL,
1414 ret_dict_number, f_pum_getpos}, 1439 ret_dict_number, f_pum_getpos},
1415 {"pumvisible", 0, 0, 0, NULL, 1440 {"pumvisible", 0, 0, 0, NULL,
1416 ret_number_bool, f_pumvisible}, 1441 ret_number_bool, f_pumvisible},
1417 {"py3eval", 1, 1, FEARG_1, NULL, 1442 {"py3eval", 1, 1, FEARG_1, arg1_string,
1418 ret_any, 1443 ret_any,
1419 #ifdef FEAT_PYTHON3 1444 #ifdef FEAT_PYTHON3
1420 f_py3eval 1445 f_py3eval
1421 #else 1446 #else
1422 NULL 1447 NULL
1423 #endif 1448 #endif
1424 }, 1449 },
1425 {"pyeval", 1, 1, FEARG_1, NULL, 1450 {"pyeval", 1, 1, FEARG_1, arg1_string,
1426 ret_any, 1451 ret_any,
1427 #ifdef FEAT_PYTHON 1452 #ifdef FEAT_PYTHON
1428 f_pyeval 1453 f_pyeval
1429 #else 1454 #else
1430 NULL 1455 NULL
1431 #endif 1456 #endif
1432 }, 1457 },
1433 {"pyxeval", 1, 1, FEARG_1, NULL, 1458 {"pyxeval", 1, 1, FEARG_1, arg1_string,
1434 ret_any, 1459 ret_any,
1435 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) 1460 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
1436 f_pyxeval 1461 f_pyxeval
1437 #else 1462 #else
1438 NULL 1463 NULL
1466 ret_string, f_remote_expr}, 1491 ret_string, f_remote_expr},
1467 {"remote_foreground", 1, 1, FEARG_1, arg1_string, 1492 {"remote_foreground", 1, 1, FEARG_1, arg1_string,
1468 ret_string, f_remote_foreground}, 1493 ret_string, f_remote_foreground},
1469 {"remote_peek", 1, 2, FEARG_1, arg2_string, 1494 {"remote_peek", 1, 2, FEARG_1, arg2_string,
1470 ret_number, f_remote_peek}, 1495 ret_number, f_remote_peek},
1471 {"remote_read", 1, 2, FEARG_1, NULL, 1496 {"remote_read", 1, 2, FEARG_1, arg2_string_nr,
1472 ret_string, f_remote_read}, 1497 ret_string, f_remote_read},
1473 {"remote_send", 2, 3, FEARG_1, NULL, 1498 {"remote_send", 2, 3, FEARG_1, NULL,
1474 ret_string, f_remote_send}, 1499 ret_string, f_remote_send},
1475 {"remote_startserver", 1, 1, FEARG_1, arg1_string, 1500 {"remote_startserver", 1, 1, FEARG_1, arg1_string,
1476 ret_void, f_remote_startserver}, 1501 ret_void, f_remote_startserver},
1484 ret_string, f_resolve}, 1509 ret_string, f_resolve},
1485 {"reverse", 1, 1, FEARG_1, arg1_list_or_blob, 1510 {"reverse", 1, 1, FEARG_1, arg1_list_or_blob,
1486 ret_first_arg, f_reverse}, 1511 ret_first_arg, f_reverse},
1487 {"round", 1, 1, FEARG_1, arg1_float_or_nr, 1512 {"round", 1, 1, FEARG_1, arg1_float_or_nr,
1488 ret_float, FLOAT_FUNC(f_round)}, 1513 ret_float, FLOAT_FUNC(f_round)},
1489 {"rubyeval", 1, 1, FEARG_1, NULL, 1514 {"rubyeval", 1, 1, FEARG_1, arg1_string,
1490 ret_any, 1515 ret_any,
1491 #ifdef FEAT_RUBY 1516 #ifdef FEAT_RUBY
1492 f_rubyeval 1517 f_rubyeval
1493 #else 1518 #else
1494 NULL 1519 NULL
1508 ret_number, f_screenrow}, 1533 ret_number, f_screenrow},
1509 {"screenstring", 2, 2, FEARG_1, arg2_number, 1534 {"screenstring", 2, 2, FEARG_1, arg2_number,
1510 ret_string, f_screenstring}, 1535 ret_string, f_screenstring},
1511 {"search", 1, 5, FEARG_1, NULL, 1536 {"search", 1, 5, FEARG_1, NULL,
1512 ret_number, f_search}, 1537 ret_number, f_search},
1513 {"searchcount", 0, 1, FEARG_1, arg1_dict, 1538 {"searchcount", 0, 1, FEARG_1, arg1_dict_any,
1514 ret_dict_any, f_searchcount}, 1539 ret_dict_any, f_searchcount},
1515 {"searchdecl", 1, 3, FEARG_1, NULL, 1540 {"searchdecl", 1, 3, FEARG_1, NULL,
1516 ret_number_bool, f_searchdecl}, 1541 ret_number_bool, f_searchdecl},
1517 {"searchpair", 3, 7, 0, NULL, 1542 {"searchpair", 3, 7, 0, NULL,
1518 ret_number, f_searchpair}, 1543 ret_number, f_searchpair},
1522 ret_list_number, f_searchpos}, 1547 ret_list_number, f_searchpos},
1523 {"server2client", 2, 2, FEARG_1, arg2_string, 1548 {"server2client", 2, 2, FEARG_1, arg2_string,
1524 ret_number_bool, f_server2client}, 1549 ret_number_bool, f_server2client},
1525 {"serverlist", 0, 0, 0, NULL, 1550 {"serverlist", 0, 0, 0, NULL,
1526 ret_string, f_serverlist}, 1551 ret_string, f_serverlist},
1527 {"setbufline", 3, 3, FEARG_3, NULL, 1552 {"setbufline", 3, 3, FEARG_3, arg3_setbufline,
1528 ret_number_bool, f_setbufline}, 1553 ret_number_bool, f_setbufline},
1529 {"setbufvar", 3, 3, FEARG_3, NULL, 1554 {"setbufvar", 3, 3, FEARG_3, NULL,
1530 ret_void, f_setbufvar}, 1555 ret_void, f_setbufvar},
1531 {"setcellwidths", 1, 1, FEARG_1, NULL, 1556 {"setcellwidths", 1, 1, FEARG_1, arg1_list_any,
1532 ret_void, f_setcellwidths}, 1557 ret_void, f_setcellwidths},
1533 {"setcharpos", 2, 2, FEARG_2, NULL, 1558 {"setcharpos", 2, 2, FEARG_2, NULL,
1534 ret_number_bool, f_setcharpos}, 1559 ret_number_bool, f_setcharpos},
1535 {"setcharsearch", 1, 1, FEARG_1, arg1_dict, 1560 {"setcharsearch", 1, 1, FEARG_1, arg1_dict_any,
1536 ret_void, f_setcharsearch}, 1561 ret_void, f_setcharsearch},
1537 {"setcmdpos", 1, 1, FEARG_1, arg1_number, 1562 {"setcmdpos", 1, 1, FEARG_1, arg1_number,
1538 ret_number_bool, f_setcmdpos}, 1563 ret_number_bool, f_setcmdpos},
1539 {"setcursorcharpos", 1, 3, FEARG_1, NULL, 1564 {"setcursorcharpos", 1, 3, FEARG_1, NULL,
1540 ret_number_bool, f_setcursorcharpos}, 1565 ret_number_bool, f_setcursorcharpos},
1541 {"setenv", 2, 2, FEARG_2, NULL, 1566 {"setenv", 2, 2, FEARG_2, NULL,
1542 ret_void, f_setenv}, 1567 ret_void, f_setenv},
1543 {"setfperm", 2, 2, FEARG_1, arg2_string, 1568 {"setfperm", 2, 2, FEARG_1, arg2_string,
1544 ret_number_bool, f_setfperm}, 1569 ret_number_bool, f_setfperm},
1545 {"setline", 2, 2, FEARG_2, NULL, 1570 {"setline", 2, 2, FEARG_2, arg2_setline,
1546 ret_number_bool, f_setline}, 1571 ret_number_bool, f_setline},
1547 {"setloclist", 2, 4, FEARG_2, NULL, 1572 {"setloclist", 2, 4, FEARG_2, NULL,
1548 ret_number_bool, f_setloclist}, 1573 ret_number_bool, f_setloclist},
1549 {"setmatches", 1, 2, FEARG_1, NULL, 1574 {"setmatches", 1, 2, FEARG_1, NULL,
1550 ret_number_bool, f_setmatches}, 1575 ret_number_bool, f_setmatches},
1574 ret_string, f_shellescape}, 1599 ret_string, f_shellescape},
1575 {"shiftwidth", 0, 1, FEARG_1, arg1_number, 1600 {"shiftwidth", 0, 1, FEARG_1, arg1_number,
1576 ret_number, f_shiftwidth}, 1601 ret_number, f_shiftwidth},
1577 {"sign_define", 1, 2, FEARG_1, arg2_string_or_list_dict, 1602 {"sign_define", 1, 2, FEARG_1, arg2_string_or_list_dict,
1578 ret_any, SIGN_FUNC(f_sign_define)}, 1603 ret_any, SIGN_FUNC(f_sign_define)},
1579 {"sign_getdefined", 0, 1, FEARG_1, NULL, 1604 {"sign_getdefined", 0, 1, FEARG_1, arg1_string,
1580 ret_list_dict_any, SIGN_FUNC(f_sign_getdefined)}, 1605 ret_list_dict_any, SIGN_FUNC(f_sign_getdefined)},
1581 {"sign_getplaced", 0, 2, FEARG_1, NULL, 1606 {"sign_getplaced", 0, 2, FEARG_1, NULL,
1582 ret_list_dict_any, SIGN_FUNC(f_sign_getplaced)}, 1607 ret_list_dict_any, SIGN_FUNC(f_sign_getplaced)},
1583 {"sign_jump", 3, 3, FEARG_1, NULL, 1608 {"sign_jump", 3, 3, FEARG_1, NULL,
1584 ret_number, SIGN_FUNC(f_sign_jump)}, 1609 ret_number, SIGN_FUNC(f_sign_jump)},
1585 {"sign_place", 4, 5, FEARG_1, NULL, 1610 {"sign_place", 4, 5, FEARG_1, NULL,
1586 ret_number, SIGN_FUNC(f_sign_place)}, 1611 ret_number, SIGN_FUNC(f_sign_place)},
1587 {"sign_placelist", 1, 1, FEARG_1, NULL, 1612 {"sign_placelist", 1, 1, FEARG_1, arg1_list_any,
1588 ret_list_number, SIGN_FUNC(f_sign_placelist)}, 1613 ret_list_number, SIGN_FUNC(f_sign_placelist)},
1589 {"sign_undefine", 0, 1, FEARG_1, arg1_string_or_list_string, 1614 {"sign_undefine", 0, 1, FEARG_1, arg1_string_or_list_string,
1590 ret_number_bool, SIGN_FUNC(f_sign_undefine)}, 1615 ret_number_bool, SIGN_FUNC(f_sign_undefine)},
1591 {"sign_unplace", 1, 2, FEARG_1, arg2_string_dict, 1616 {"sign_unplace", 1, 2, FEARG_1, arg2_string_dict,
1592 ret_number_bool, SIGN_FUNC(f_sign_unplace)}, 1617 ret_number_bool, SIGN_FUNC(f_sign_unplace)},
1593 {"sign_unplacelist", 1, 2, FEARG_1, NULL, 1618 {"sign_unplacelist", 1, 2, FEARG_1, arg1_list_any,
1594 ret_list_number, SIGN_FUNC(f_sign_unplacelist)}, 1619 ret_list_number, SIGN_FUNC(f_sign_unplacelist)},
1595 {"simplify", 1, 1, FEARG_1, arg1_string, 1620 {"simplify", 1, 1, FEARG_1, arg1_string,
1596 ret_string, f_simplify}, 1621 ret_string, f_simplify},
1597 {"sin", 1, 1, FEARG_1, arg1_float_or_nr, 1622 {"sin", 1, 1, FEARG_1, arg1_float_or_nr,
1598 ret_float, FLOAT_FUNC(f_sin)}, 1623 ret_float, FLOAT_FUNC(f_sin)},
1628 ret_float, FLOAT_FUNC(f_str2float)}, 1653 ret_float, FLOAT_FUNC(f_str2float)},
1629 {"str2list", 1, 2, FEARG_1, NULL, 1654 {"str2list", 1, 2, FEARG_1, NULL,
1630 ret_list_number, f_str2list}, 1655 ret_list_number, f_str2list},
1631 {"str2nr", 1, 3, FEARG_1, arg3_string_nr_bool, 1656 {"str2nr", 1, 3, FEARG_1, arg3_string_nr_bool,
1632 ret_number, f_str2nr}, 1657 ret_number, f_str2nr},
1633 {"strcharlen", 1, 1, FEARG_1, NULL, 1658 {"strcharlen", 1, 1, FEARG_1, arg1_string_or_nr,
1634 ret_number, f_strcharlen}, 1659 ret_number, f_strcharlen},
1635 {"strcharpart", 2, 4, FEARG_1, NULL, 1660 {"strcharpart", 2, 4, FEARG_1, NULL,
1636 ret_string, f_strcharpart}, 1661 ret_string, f_strcharpart},
1637 {"strchars", 1, 2, FEARG_1, NULL, 1662 {"strchars", 1, 2, FEARG_1, NULL,
1638 ret_number, f_strchars}, 1663 ret_number, f_strchars},
1639 {"strdisplaywidth", 1, 2, FEARG_1, NULL, 1664 {"strdisplaywidth", 1, 2, FEARG_1, arg2_string_nr,
1640 ret_number, f_strdisplaywidth}, 1665 ret_number, f_strdisplaywidth},
1641 {"strftime", 1, 2, FEARG_1, NULL, 1666 {"strftime", 1, 2, FEARG_1, arg2_string_nr,
1642 ret_string, 1667 ret_string,
1643 #ifdef HAVE_STRFTIME 1668 #ifdef HAVE_STRFTIME
1644 f_strftime 1669 f_strftime
1645 #else 1670 #else
1646 NULL 1671 NULL
1647 #endif 1672 #endif
1648 }, 1673 },
1649 {"strgetchar", 2, 2, FEARG_1, NULL, 1674 {"strgetchar", 2, 2, FEARG_1, arg2_string_nr,
1650 ret_number, f_strgetchar}, 1675 ret_number, f_strgetchar},
1651 {"stridx", 2, 3, FEARG_1, arg3_string_string_nr, 1676 {"stridx", 2, 3, FEARG_1, arg3_string_string_nr,
1652 ret_number, f_stridx}, 1677 ret_number, f_stridx},
1653 {"string", 1, 1, FEARG_1, NULL, 1678 {"string", 1, 1, FEARG_1, NULL,
1654 ret_string, f_string}, 1679 ret_string, f_string},
1694 ret_list_string, f_systemlist}, 1719 ret_list_string, f_systemlist},
1695 {"tabpagebuflist", 0, 1, FEARG_1, arg1_number, 1720 {"tabpagebuflist", 0, 1, FEARG_1, arg1_number,
1696 ret_list_number, f_tabpagebuflist}, 1721 ret_list_number, f_tabpagebuflist},
1697 {"tabpagenr", 0, 1, 0, arg1_string, 1722 {"tabpagenr", 0, 1, 0, arg1_string,
1698 ret_number, f_tabpagenr}, 1723 ret_number, f_tabpagenr},
1699 {"tabpagewinnr", 1, 2, FEARG_1, NULL, 1724 {"tabpagewinnr", 1, 2, FEARG_1, arg2_nr_string,
1700 ret_number, f_tabpagewinnr}, 1725 ret_number, f_tabpagewinnr},
1701 {"tagfiles", 0, 0, 0, NULL, 1726 {"tagfiles", 0, 0, 0, NULL,
1702 ret_list_string, f_tagfiles}, 1727 ret_list_string, f_tagfiles},
1703 {"taglist", 1, 2, FEARG_1, arg2_string, 1728 {"taglist", 1, 2, FEARG_1, arg2_string,
1704 ret_list_dict_any, f_taglist}, 1729 ret_list_dict_any, f_taglist},
1722 f_term_getansicolors 1747 f_term_getansicolors
1723 #else 1748 #else
1724 NULL 1749 NULL
1725 #endif 1750 #endif
1726 }, 1751 },
1727 {"term_getattr", 2, 2, FEARG_1, NULL, 1752 {"term_getattr", 2, 2, FEARG_1, arg2_nr_string,
1728 ret_number, TERM_FUNC(f_term_getattr)}, 1753 ret_number, TERM_FUNC(f_term_getattr)},
1729 {"term_getcursor", 1, 1, FEARG_1, arg1_string_or_nr, 1754 {"term_getcursor", 1, 1, FEARG_1, arg1_string_or_nr,
1730 ret_list_any, TERM_FUNC(f_term_getcursor)}, 1755 ret_list_any, TERM_FUNC(f_term_getcursor)},
1731 {"term_getjob", 1, 1, FEARG_1, arg1_string_or_nr, 1756 {"term_getjob", 1, 1, FEARG_1, arg1_string_or_nr,
1732 ret_job, TERM_FUNC(f_term_getjob)}, 1757 ret_job, TERM_FUNC(f_term_getjob)},
1804 ret_func_any, f_test_null_partial}, 1829 ret_func_any, f_test_null_partial},
1805 {"test_null_string", 0, 0, 0, NULL, 1830 {"test_null_string", 0, 0, 0, NULL,
1806 ret_string, f_test_null_string}, 1831 ret_string, f_test_null_string},
1807 {"test_option_not_set", 1, 1, FEARG_1, arg1_string, 1832 {"test_option_not_set", 1, 1, FEARG_1, arg1_string,
1808 ret_void, f_test_option_not_set}, 1833 ret_void, f_test_option_not_set},
1809 {"test_override", 2, 2, FEARG_2, NULL, 1834 {"test_override", 2, 2, FEARG_2, arg2_string_nr,
1810 ret_void, f_test_override}, 1835 ret_void, f_test_override},
1811 {"test_refcount", 1, 1, FEARG_1, NULL, 1836 {"test_refcount", 1, 1, FEARG_1, NULL,
1812 ret_number, f_test_refcount}, 1837 ret_number, f_test_refcount},
1813 {"test_scrollbar", 3, 3, FEARG_2, NULL, 1838 {"test_scrollbar", 3, 3, FEARG_2, NULL,
1814 ret_void, 1839 ret_void,
1856 ret_string, f_undofile}, 1881 ret_string, f_undofile},
1857 {"undotree", 0, 0, 0, NULL, 1882 {"undotree", 0, 0, 0, NULL,
1858 ret_dict_any, f_undotree}, 1883 ret_dict_any, f_undotree},
1859 {"uniq", 1, 3, FEARG_1, NULL, 1884 {"uniq", 1, 3, FEARG_1, NULL,
1860 ret_list_any, f_uniq}, 1885 ret_list_any, f_uniq},
1861 {"values", 1, 1, FEARG_1, arg1_dict, 1886 {"values", 1, 1, FEARG_1, arg1_dict_any,
1862 ret_list_any, f_values}, 1887 ret_list_any, f_values},
1863 {"virtcol", 1, 1, FEARG_1, arg1_string_or_list_any, 1888 {"virtcol", 1, 1, FEARG_1, arg1_string_or_list_any,
1864 ret_number, f_virtcol}, 1889 ret_number, f_virtcol},
1865 {"visualmode", 0, 1, 0, NULL, 1890 {"visualmode", 0, 1, 0, arg1_bool,
1866 ret_string, f_visualmode}, 1891 ret_string, f_visualmode},
1867 {"wildmenumode", 0, 0, 0, NULL, 1892 {"wildmenumode", 0, 0, 0, NULL,
1868 ret_number, f_wildmenumode}, 1893 ret_number, f_wildmenumode},
1869 {"win_execute", 2, 3, FEARG_2, arg23_win_execute, 1894 {"win_execute", 2, 3, FEARG_2, arg23_win_execute,
1870 ret_string, f_win_execute}, 1895 ret_string, f_win_execute},
1898 ret_number, f_winline}, 1923 ret_number, f_winline},
1899 {"winnr", 0, 1, FEARG_1, arg1_string, 1924 {"winnr", 0, 1, FEARG_1, arg1_string,
1900 ret_number, f_winnr}, 1925 ret_number, f_winnr},
1901 {"winrestcmd", 0, 0, 0, NULL, 1926 {"winrestcmd", 0, 0, 0, NULL,
1902 ret_string, f_winrestcmd}, 1927 ret_string, f_winrestcmd},
1903 {"winrestview", 1, 1, FEARG_1, arg1_dict, 1928 {"winrestview", 1, 1, FEARG_1, arg1_dict_any,
1904 ret_void, f_winrestview}, 1929 ret_void, f_winrestview},
1905 {"winsaveview", 0, 0, 0, NULL, 1930 {"winsaveview", 0, 0, 0, NULL,
1906 ret_dict_number, f_winsaveview}, 1931 ret_dict_number, f_winsaveview},
1907 {"winwidth", 1, 1, FEARG_1, arg1_number, 1932 {"winwidth", 1, 1, FEARG_1, arg1_number,
1908 ret_number, f_winwidth}, 1933 ret_number, f_winwidth},
2761 * "echoraw({expr})" function 2786 * "echoraw({expr})" function
2762 */ 2787 */
2763 static void 2788 static void
2764 f_echoraw(typval_T *argvars, typval_T *rettv UNUSED) 2789 f_echoraw(typval_T *argvars, typval_T *rettv UNUSED)
2765 { 2790 {
2766 char_u *str = tv_get_string_chk(&argvars[0]); 2791 char_u *str;
2767 2792
2793 if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
2794 return;
2795
2796 str = tv_get_string_chk(&argvars[0]);
2768 if (str != NULL && *str != NUL) 2797 if (str != NULL && *str != NUL)
2769 { 2798 {
2770 out_str(str); 2799 out_str(str);
2771 out_flush(); 2800 out_flush();
2772 } 2801 }
5954 lval_T lv; 5983 lval_T lv;
5955 char_u *end; 5984 char_u *end;
5956 dictitem_T *di; 5985 dictitem_T *di;
5957 5986
5958 rettv->vval.v_number = -1; 5987 rettv->vval.v_number = -1;
5988
5989 if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
5990 return;
5991
5959 end = get_lval(tv_get_string(&argvars[0]), NULL, &lv, FALSE, FALSE, 5992 end = get_lval(tv_get_string(&argvars[0]), NULL, &lv, FALSE, FALSE,
5960 GLV_NO_AUTOLOAD | GLV_READ_ONLY, FNE_CHECK_START); 5993 GLV_NO_AUTOLOAD | GLV_READ_ONLY, FNE_CHECK_START);
5961 if (end != NULL && lv.ll_name != NULL) 5994 if (end != NULL && lv.ll_name != NULL)
5962 { 5995 {
5963 if (*end != NUL) 5996 if (*end != NUL)
6119 int id; 6152 int id;
6120 tabpage_T *tp; 6153 tabpage_T *tp;
6121 win_T *wp; 6154 win_T *wp;
6122 win_T *save_curwin; 6155 win_T *save_curwin;
6123 tabpage_T *save_curtab; 6156 tabpage_T *save_curtab;
6157
6158 if (in_vim9script()
6159 && (check_for_string_arg(argvars, 0) == FAIL
6160 || (argvars[1].v_type != VAR_UNKNOWN
6161 && check_for_number_arg(argvars, 1) == FAIL)))
6162 return;
6124 6163
6125 if (argvars[1].v_type != VAR_UNKNOWN) 6164 if (argvars[1].v_type != VAR_UNKNOWN)
6126 { 6165 {
6127 // use window specified in the second argument 6166 // use window specified in the second argument
6128 id = (int)tv_get_number(&argvars[1]); 6167 id = (int)tv_get_number(&argvars[1]);