comparison src/evalfunc.c @ 24998:3b1770226f85 v8.2.3036

patch 8.2.3036: Vim9: builtin function arguments not checked at compile time Commit: https://github.com/vim/vim/commit/7237cab8f1d1a4391372cafdb57f2d97f3b32d05 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Jun 22 19:52:27 2021 +0200 patch 8.2.3036: Vim9: builtin function arguments not checked at compile time Problem: Vim9: builtin function arguments not checked at compile time. Solution: Add more argument type specs. Check arguments to test_setmouse() and test_gui_mouse_event(). (Yegappan Lakshmanan, closes #8425)
author Bram Moolenaar <Bram@vim.org>
date Tue, 22 Jun 2021 20:00:05 +0200
parents 4cb423b9250d
children 496221916885
comparison
equal deleted inserted replaced
24997:6cd844668030 24998:3b1770226f85
401 401
402 /* 402 /*
403 * Lists of functions that check the argument types of a builtin function. 403 * Lists of functions that check the argument types of a builtin function.
404 */ 404 */
405 argcheck_T arg1_string[] = {arg_string}; 405 argcheck_T arg1_string[] = {arg_string};
406 argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool}; 406 argcheck_T arg1_number[] = {arg_number};
407 argcheck_T arg1_float_or_nr[] = {arg_float_or_nr}; 407 argcheck_T arg1_float_or_nr[] = {arg_float_or_nr};
408 argcheck_T arg2_float_or_nr[] = {arg_float_or_nr, arg_float_or_nr};
409 argcheck_T arg2_number[] = {arg_number, arg_number};
408 argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev}; 410 argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev};
409 argcheck_T arg2_execute[] = {arg_string_or_list, arg_string}; 411 argcheck_T arg2_execute[] = {arg_string_or_list, arg_string};
410 argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3}; 412 argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3};
411 argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, arg_extend3}; 413 argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, arg_extend3};
414 argcheck_T arg3_string[] = {arg_string, arg_string, arg_string};
415 argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool};
412 argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number}; 416 argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number};
413 417
414 /* 418 /*
415 * Functions that return the return type of a builtin function. 419 * Functions that return the return type of a builtin function.
416 * Note that "argtypes" is NULL if "argcount" is zero. 420 * Note that "argtypes" is NULL if "argcount" is zero.
668 672
669 static funcentry_T global_functions[] = 673 static funcentry_T global_functions[] =
670 { 674 {
671 {"abs", 1, 1, FEARG_1, arg1_float_or_nr, 675 {"abs", 1, 1, FEARG_1, arg1_float_or_nr,
672 ret_any, FLOAT_FUNC(f_abs)}, 676 ret_any, FLOAT_FUNC(f_abs)},
673 {"acos", 1, 1, FEARG_1, NULL, 677 {"acos", 1, 1, FEARG_1, arg1_float_or_nr,
674 ret_float, FLOAT_FUNC(f_acos)}, 678 ret_float, FLOAT_FUNC(f_acos)},
675 {"add", 2, 2, FEARG_1, NULL /* arg2_listblob_item */, 679 {"add", 2, 2, FEARG_1, NULL /* arg2_listblob_item */,
676 ret_first_arg, f_add}, 680 ret_first_arg, f_add},
677 {"and", 2, 2, FEARG_1, NULL, 681 {"and", 2, 2, FEARG_1, arg2_number,
678 ret_number, f_and}, 682 ret_number, f_and},
679 {"append", 2, 2, FEARG_2, NULL, 683 {"append", 2, 2, FEARG_2, NULL,
680 ret_number_bool, f_append}, 684 ret_number_bool, f_append},
681 {"appendbufline", 3, 3, FEARG_3, NULL, 685 {"appendbufline", 3, 3, FEARG_3, NULL,
682 ret_number_bool, f_appendbufline}, 686 ret_number_bool, f_appendbufline},
683 {"argc", 0, 1, 0, NULL, 687 {"argc", 0, 1, 0, arg1_number,
684 ret_number, f_argc}, 688 ret_number, f_argc},
685 {"argidx", 0, 0, 0, NULL, 689 {"argidx", 0, 0, 0, NULL,
686 ret_number, f_argidx}, 690 ret_number, f_argidx},
687 {"arglistid", 0, 2, 0, NULL, 691 {"arglistid", 0, 2, 0, arg2_number,
688 ret_number, f_arglistid}, 692 ret_number, f_arglistid},
689 {"argv", 0, 2, 0, NULL, 693 {"argv", 0, 2, 0, arg2_number,
690 ret_argv, f_argv}, 694 ret_argv, f_argv},
691 {"asin", 1, 1, FEARG_1, NULL, 695 {"asin", 1, 1, FEARG_1, arg1_float_or_nr,
692 ret_float, FLOAT_FUNC(f_asin)}, 696 ret_float, FLOAT_FUNC(f_asin)},
693 {"assert_beeps", 1, 2, FEARG_1, NULL, 697 {"assert_beeps", 1, 2, FEARG_1, NULL,
694 ret_number_bool, f_assert_beeps}, 698 ret_number_bool, f_assert_beeps},
695 {"assert_equal", 2, 3, FEARG_2, NULL, 699 {"assert_equal", 2, 3, FEARG_2, NULL,
696 ret_number_bool, f_assert_equal}, 700 ret_number_bool, f_assert_equal},
714 ret_number_bool, f_assert_notmatch}, 718 ret_number_bool, f_assert_notmatch},
715 {"assert_report", 1, 1, FEARG_1, NULL, 719 {"assert_report", 1, 1, FEARG_1, NULL,
716 ret_number_bool, f_assert_report}, 720 ret_number_bool, f_assert_report},
717 {"assert_true", 1, 2, FEARG_1, NULL, 721 {"assert_true", 1, 2, FEARG_1, NULL,
718 ret_number_bool, f_assert_true}, 722 ret_number_bool, f_assert_true},
719 {"atan", 1, 1, FEARG_1, NULL, 723 {"atan", 1, 1, FEARG_1, arg1_float_or_nr,
720 ret_float, FLOAT_FUNC(f_atan)}, 724 ret_float, FLOAT_FUNC(f_atan)},
721 {"atan2", 2, 2, FEARG_1, NULL, 725 {"atan2", 2, 2, FEARG_1, arg2_float_or_nr,
722 ret_float, FLOAT_FUNC(f_atan2)}, 726 ret_float, FLOAT_FUNC(f_atan2)},
723 {"balloon_gettext", 0, 0, 0, NULL, 727 {"balloon_gettext", 0, 0, 0, NULL,
724 ret_string, 728 ret_string,
725 #ifdef FEAT_BEVAL 729 #ifdef FEAT_BEVAL
726 f_balloon_gettext 730 f_balloon_gettext
778 ret_number, f_byteidx}, 782 ret_number, f_byteidx},
779 {"byteidxcomp", 2, 2, FEARG_1, NULL, 783 {"byteidxcomp", 2, 2, FEARG_1, NULL,
780 ret_number, f_byteidxcomp}, 784 ret_number, f_byteidxcomp},
781 {"call", 2, 3, FEARG_1, NULL, 785 {"call", 2, 3, FEARG_1, NULL,
782 ret_any, f_call}, 786 ret_any, f_call},
783 {"ceil", 1, 1, FEARG_1, NULL, 787 {"ceil", 1, 1, FEARG_1, arg1_float_or_nr,
784 ret_float, FLOAT_FUNC(f_ceil)}, 788 ret_float, FLOAT_FUNC(f_ceil)},
785 {"ch_canread", 1, 1, FEARG_1, NULL, 789 {"ch_canread", 1, 1, FEARG_1, NULL,
786 ret_number_bool, JOB_FUNC(f_ch_canread)}, 790 ret_number_bool, JOB_FUNC(f_ch_canread)},
787 {"ch_close", 1, 1, FEARG_1, NULL, 791 {"ch_close", 1, 1, FEARG_1, NULL,
788 ret_void, JOB_FUNC(f_ch_close)}, 792 ret_void, JOB_FUNC(f_ch_close)},
830 ret_number, f_charidx}, 834 ret_number, f_charidx},
831 {"chdir", 1, 1, FEARG_1, NULL, 835 {"chdir", 1, 1, FEARG_1, NULL,
832 ret_string, f_chdir}, 836 ret_string, f_chdir},
833 {"cindent", 1, 1, FEARG_1, NULL, 837 {"cindent", 1, 1, FEARG_1, NULL,
834 ret_number, f_cindent}, 838 ret_number, f_cindent},
835 {"clearmatches", 0, 1, FEARG_1, NULL, 839 {"clearmatches", 0, 1, FEARG_1, arg1_number,
836 ret_void, f_clearmatches}, 840 ret_void, f_clearmatches},
837 {"col", 1, 1, FEARG_1, NULL, 841 {"col", 1, 1, FEARG_1, NULL,
838 ret_number, f_col}, 842 ret_number, f_col},
839 {"complete", 2, 2, FEARG_2, NULL, 843 {"complete", 2, 2, FEARG_2, NULL,
840 ret_void, f_complete}, 844 ret_void, f_complete},
846 ret_dict_any, f_complete_info}, 850 ret_dict_any, f_complete_info},
847 {"confirm", 1, 4, FEARG_1, NULL, 851 {"confirm", 1, 4, FEARG_1, NULL,
848 ret_number, f_confirm}, 852 ret_number, f_confirm},
849 {"copy", 1, 1, FEARG_1, NULL, 853 {"copy", 1, 1, FEARG_1, NULL,
850 ret_first_arg, f_copy}, 854 ret_first_arg, f_copy},
851 {"cos", 1, 1, FEARG_1, NULL, 855 {"cos", 1, 1, FEARG_1, arg1_float_or_nr,
852 ret_float, FLOAT_FUNC(f_cos)}, 856 ret_float, FLOAT_FUNC(f_cos)},
853 {"cosh", 1, 1, FEARG_1, NULL, 857 {"cosh", 1, 1, FEARG_1, arg1_float_or_nr,
854 ret_float, FLOAT_FUNC(f_cosh)}, 858 ret_float, FLOAT_FUNC(f_cosh)},
855 {"count", 2, 4, FEARG_1, NULL, 859 {"count", 2, 4, FEARG_1, NULL,
856 ret_number, f_count}, 860 ret_number, f_count},
857 {"cscope_connection",0,3, 0, NULL, 861 {"cscope_connection",0,3, 0, NULL,
858 ret_number, f_cscope_connection}, 862 ret_number, f_cscope_connection},
859 {"cursor", 1, 3, FEARG_1, NULL, 863 {"cursor", 1, 3, FEARG_1, NULL,
860 ret_number, f_cursor}, 864 ret_number, f_cursor},
861 {"debugbreak", 1, 1, FEARG_1, NULL, 865 {"debugbreak", 1, 1, FEARG_1, arg1_number,
862 ret_number, 866 ret_number,
863 #ifdef MSWIN 867 #ifdef MSWIN
864 f_debugbreak 868 f_debugbreak
865 #else 869 #else
866 NULL 870 NULL
896 ret_string, f_execute}, 900 ret_string, f_execute},
897 {"exepath", 1, 1, FEARG_1, NULL, 901 {"exepath", 1, 1, FEARG_1, NULL,
898 ret_string, f_exepath}, 902 ret_string, f_exepath},
899 {"exists", 1, 1, FEARG_1, NULL, 903 {"exists", 1, 1, FEARG_1, NULL,
900 ret_number_bool, f_exists}, 904 ret_number_bool, f_exists},
901 {"exp", 1, 1, FEARG_1, NULL, 905 {"exp", 1, 1, FEARG_1, arg1_float_or_nr,
902 ret_float, FLOAT_FUNC(f_exp)}, 906 ret_float, FLOAT_FUNC(f_exp)},
903 {"expand", 1, 3, FEARG_1, NULL, 907 {"expand", 1, 3, FEARG_1, NULL,
904 ret_any, f_expand}, 908 ret_any, f_expand},
905 {"expandcmd", 1, 1, FEARG_1, NULL, 909 {"expandcmd", 1, 1, FEARG_1, NULL,
906 ret_string, f_expandcmd}, 910 ret_string, f_expandcmd},
924 ret_string, f_findfile}, 928 ret_string, f_findfile},
925 {"flatten", 1, 2, FEARG_1, NULL, 929 {"flatten", 1, 2, FEARG_1, NULL,
926 ret_list_any, f_flatten}, 930 ret_list_any, f_flatten},
927 {"flattennew", 1, 2, FEARG_1, NULL, 931 {"flattennew", 1, 2, FEARG_1, NULL,
928 ret_list_any, f_flattennew}, 932 ret_list_any, f_flattennew},
929 {"float2nr", 1, 1, FEARG_1, NULL, 933 {"float2nr", 1, 1, FEARG_1, arg1_float_or_nr,
930 ret_number, FLOAT_FUNC(f_float2nr)}, 934 ret_number, FLOAT_FUNC(f_float2nr)},
931 {"floor", 1, 1, FEARG_1, NULL, 935 {"floor", 1, 1, FEARG_1, arg1_float_or_nr,
932 ret_float, FLOAT_FUNC(f_floor)}, 936 ret_float, FLOAT_FUNC(f_floor)},
933 {"fmod", 2, 2, FEARG_1, NULL, 937 {"fmod", 2, 2, FEARG_1, arg2_float_or_nr,
934 ret_float, FLOAT_FUNC(f_fmod)}, 938 ret_float, FLOAT_FUNC(f_fmod)},
935 {"fnameescape", 1, 1, FEARG_1, NULL, 939 {"fnameescape", 1, 1, FEARG_1, NULL,
936 ret_string, f_fnameescape}, 940 ret_string, f_fnameescape},
937 {"fnamemodify", 2, 2, FEARG_1, NULL, 941 {"fnamemodify", 2, 2, FEARG_1, NULL,
938 ret_string, f_fnamemodify}, 942 ret_string, f_fnamemodify},
984 ret_string, f_getcmdtype}, 988 ret_string, f_getcmdtype},
985 {"getcmdwintype", 0, 0, 0, NULL, 989 {"getcmdwintype", 0, 0, 0, NULL,
986 ret_string, f_getcmdwintype}, 990 ret_string, f_getcmdwintype},
987 {"getcompletion", 2, 3, FEARG_1, NULL, 991 {"getcompletion", 2, 3, FEARG_1, NULL,
988 ret_list_string, f_getcompletion}, 992 ret_list_string, f_getcompletion},
989 {"getcurpos", 0, 1, FEARG_1, NULL, 993 {"getcurpos", 0, 1, FEARG_1, arg1_number,
990 ret_list_number, f_getcurpos}, 994 ret_list_number, f_getcurpos},
991 {"getcursorcharpos", 0, 1, FEARG_1, NULL, 995 {"getcursorcharpos", 0, 1, FEARG_1, arg1_number,
992 ret_list_number, f_getcursorcharpos}, 996 ret_list_number, f_getcursorcharpos},
993 {"getcwd", 0, 2, FEARG_1, NULL, 997 {"getcwd", 0, 2, FEARG_1, arg2_number,
994 ret_string, f_getcwd}, 998 ret_string, f_getcwd},
995 {"getenv", 1, 1, FEARG_1, NULL, 999 {"getenv", 1, 1, FEARG_1, NULL,
996 ret_any, f_getenv}, 1000 ret_any, f_getenv},
997 {"getfontname", 0, 1, 0, NULL, 1001 {"getfontname", 0, 1, 0, NULL,
998 ret_string, f_getfontname}, 1002 ret_string, f_getfontname},
1004 ret_number, f_getftime}, 1008 ret_number, f_getftime},
1005 {"getftype", 1, 1, FEARG_1, NULL, 1009 {"getftype", 1, 1, FEARG_1, NULL,
1006 ret_string, f_getftype}, 1010 ret_string, f_getftype},
1007 {"getimstatus", 0, 0, 0, NULL, 1011 {"getimstatus", 0, 0, 0, NULL,
1008 ret_number_bool, f_getimstatus}, 1012 ret_number_bool, f_getimstatus},
1009 {"getjumplist", 0, 2, FEARG_1, NULL, 1013 {"getjumplist", 0, 2, FEARG_1, arg2_number,
1010 ret_list_any, f_getjumplist}, 1014 ret_list_any, f_getjumplist},
1011 {"getline", 1, 2, FEARG_1, NULL, 1015 {"getline", 1, 2, FEARG_1, NULL,
1012 ret_f_getline, f_getline}, 1016 ret_f_getline, f_getline},
1013 {"getloclist", 1, 2, 0, NULL, 1017 {"getloclist", 1, 2, 0, NULL,
1014 ret_list_or_dict_1, f_getloclist}, 1018 ret_list_or_dict_1, f_getloclist},
1015 {"getmarklist", 0, 1, FEARG_1, NULL, 1019 {"getmarklist", 0, 1, FEARG_1, NULL,
1016 ret_list_dict_any, f_getmarklist}, 1020 ret_list_dict_any, f_getmarklist},
1017 {"getmatches", 0, 1, 0, NULL, 1021 {"getmatches", 0, 1, 0, arg1_number,
1018 ret_list_dict_any, f_getmatches}, 1022 ret_list_dict_any, f_getmatches},
1019 {"getmousepos", 0, 0, 0, NULL, 1023 {"getmousepos", 0, 0, 0, NULL,
1020 ret_dict_number, f_getmousepos}, 1024 ret_dict_number, f_getmousepos},
1021 {"getpid", 0, 0, 0, NULL, 1025 {"getpid", 0, 0, 0, NULL,
1022 ret_number, f_getpid}, 1026 ret_number, f_getpid},
1028 ret_getreg, f_getreg}, 1032 ret_getreg, f_getreg},
1029 {"getreginfo", 0, 1, FEARG_1, NULL, 1033 {"getreginfo", 0, 1, FEARG_1, NULL,
1030 ret_dict_any, f_getreginfo}, 1034 ret_dict_any, f_getreginfo},
1031 {"getregtype", 0, 1, FEARG_1, NULL, 1035 {"getregtype", 0, 1, FEARG_1, NULL,
1032 ret_string, f_getregtype}, 1036 ret_string, f_getregtype},
1033 {"gettabinfo", 0, 1, FEARG_1, NULL, 1037 {"gettabinfo", 0, 1, FEARG_1, arg1_number,
1034 ret_list_dict_any, f_gettabinfo}, 1038 ret_list_dict_any, f_gettabinfo},
1035 {"gettabvar", 2, 3, FEARG_1, NULL, 1039 {"gettabvar", 2, 3, FEARG_1, NULL,
1036 ret_any, f_gettabvar}, 1040 ret_any, f_gettabvar},
1037 {"gettabwinvar", 3, 4, FEARG_1, NULL, 1041 {"gettabwinvar", 3, 4, FEARG_1, NULL,
1038 ret_any, f_gettabwinvar}, 1042 ret_any, f_gettabwinvar},
1039 {"gettagstack", 0, 1, FEARG_1, NULL, 1043 {"gettagstack", 0, 1, FEARG_1, arg1_number,
1040 ret_dict_any, f_gettagstack}, 1044 ret_dict_any, f_gettagstack},
1041 {"gettext", 1, 1, FEARG_1, NULL, 1045 {"gettext", 1, 1, FEARG_1, NULL,
1042 ret_string, f_gettext}, 1046 ret_string, f_gettext},
1043 {"getwininfo", 0, 1, FEARG_1, NULL, 1047 {"getwininfo", 0, 1, FEARG_1, arg1_number,
1044 ret_list_dict_any, f_getwininfo}, 1048 ret_list_dict_any, f_getwininfo},
1045 {"getwinpos", 0, 1, FEARG_1, NULL, 1049 {"getwinpos", 0, 1, FEARG_1, arg1_number,
1046 ret_list_number, f_getwinpos}, 1050 ret_list_number, f_getwinpos},
1047 {"getwinposx", 0, 0, 0, NULL, 1051 {"getwinposx", 0, 0, 0, NULL,
1048 ret_number, f_getwinposx}, 1052 ret_number, f_getwinposx},
1049 {"getwinposy", 0, 0, 0, NULL, 1053 {"getwinposy", 0, 0, 0, NULL,
1050 ret_number, f_getwinposy}, 1054 ret_number, f_getwinposy},
1058 ret_any, f_globpath}, 1062 ret_any, f_globpath},
1059 {"has", 1, 2, 0, NULL, 1063 {"has", 1, 2, 0, NULL,
1060 ret_number_bool, f_has}, 1064 ret_number_bool, f_has},
1061 {"has_key", 2, 2, FEARG_1, NULL, 1065 {"has_key", 2, 2, FEARG_1, NULL,
1062 ret_number_bool, f_has_key}, 1066 ret_number_bool, f_has_key},
1063 {"haslocaldir", 0, 2, FEARG_1, NULL, 1067 {"haslocaldir", 0, 2, FEARG_1, arg2_number,
1064 ret_number, f_haslocaldir}, 1068 ret_number, f_haslocaldir},
1065 {"hasmapto", 1, 3, FEARG_1, NULL, 1069 {"hasmapto", 1, 3, FEARG_1, NULL,
1066 ret_number_bool, f_hasmapto}, 1070 ret_number_bool, f_hasmapto},
1067 {"highlightID", 1, 1, FEARG_1, NULL, // obsolete 1071 {"highlightID", 1, 1, FEARG_1, NULL, // obsolete
1068 ret_number, f_hlID}, 1072 ret_number, f_hlID},
1102 ret_string, f_inputsecret}, 1106 ret_string, f_inputsecret},
1103 {"insert", 2, 3, FEARG_1, arg3_insert, 1107 {"insert", 2, 3, FEARG_1, arg3_insert,
1104 ret_first_arg, f_insert}, 1108 ret_first_arg, f_insert},
1105 {"interrupt", 0, 0, 0, NULL, 1109 {"interrupt", 0, 0, 0, NULL,
1106 ret_void, f_interrupt}, 1110 ret_void, f_interrupt},
1107 {"invert", 1, 1, FEARG_1, NULL, 1111 {"invert", 1, 1, FEARG_1, arg1_number,
1108 ret_number, f_invert}, 1112 ret_number, f_invert},
1109 {"isdirectory", 1, 1, FEARG_1, NULL, 1113 {"isdirectory", 1, 1, FEARG_1, NULL,
1110 ret_number_bool, f_isdirectory}, 1114 ret_number_bool, f_isdirectory},
1111 {"isinf", 1, 1, FEARG_1, NULL, 1115 {"isinf", 1, 1, FEARG_1, arg1_float_or_nr,
1112 ret_number, MATH_FUNC(f_isinf)}, 1116 ret_number, MATH_FUNC(f_isinf)},
1113 {"islocked", 1, 1, FEARG_1, NULL, 1117 {"islocked", 1, 1, FEARG_1, NULL,
1114 ret_number_bool, f_islocked}, 1118 ret_number_bool, f_islocked},
1115 {"isnan", 1, 1, FEARG_1, NULL, 1119 {"isnan", 1, 1, FEARG_1, arg1_float_or_nr,
1116 ret_number_bool, MATH_FUNC(f_isnan)}, 1120 ret_number_bool, MATH_FUNC(f_isnan)},
1117 {"items", 1, 1, FEARG_1, NULL, 1121 {"items", 1, 1, FEARG_1, NULL,
1118 ret_list_any, f_items}, 1122 ret_list_any, f_items},
1119 {"job_getchannel", 1, 1, FEARG_1, NULL, 1123 {"job_getchannel", 1, 1, FEARG_1, NULL,
1120 ret_channel, JOB_FUNC(f_job_getchannel)}, 1124 ret_channel, JOB_FUNC(f_job_getchannel)},
1158 ret_string, f_list2str}, 1162 ret_string, f_list2str},
1159 {"listener_add", 1, 2, FEARG_2, NULL, 1163 {"listener_add", 1, 2, FEARG_2, NULL,
1160 ret_number, f_listener_add}, 1164 ret_number, f_listener_add},
1161 {"listener_flush", 0, 1, FEARG_1, NULL, 1165 {"listener_flush", 0, 1, FEARG_1, NULL,
1162 ret_void, f_listener_flush}, 1166 ret_void, f_listener_flush},
1163 {"listener_remove", 1, 1, FEARG_1, NULL, 1167 {"listener_remove", 1, 1, FEARG_1, arg1_number,
1164 ret_number_bool, f_listener_remove}, 1168 ret_number_bool, f_listener_remove},
1165 {"localtime", 0, 0, 0, NULL, 1169 {"localtime", 0, 0, 0, NULL,
1166 ret_number, f_localtime}, 1170 ret_number, f_localtime},
1167 {"log", 1, 1, FEARG_1, NULL, 1171 {"log", 1, 1, FEARG_1, arg1_float_or_nr,
1168 ret_float, FLOAT_FUNC(f_log)}, 1172 ret_float, FLOAT_FUNC(f_log)},
1169 {"log10", 1, 1, FEARG_1, NULL, 1173 {"log10", 1, 1, FEARG_1, arg1_float_or_nr,
1170 ret_float, FLOAT_FUNC(f_log10)}, 1174 ret_float, FLOAT_FUNC(f_log10)},
1171 {"luaeval", 1, 2, FEARG_1, NULL, 1175 {"luaeval", 1, 2, FEARG_1, NULL,
1172 ret_any, 1176 ret_any,
1173 #ifdef FEAT_LUA 1177 #ifdef FEAT_LUA
1174 f_luaeval 1178 f_luaeval
1190 ret_any, f_match}, 1194 ret_any, f_match},
1191 {"matchadd", 2, 5, FEARG_1, NULL, 1195 {"matchadd", 2, 5, FEARG_1, NULL,
1192 ret_number, f_matchadd}, 1196 ret_number, f_matchadd},
1193 {"matchaddpos", 2, 5, FEARG_1, NULL, 1197 {"matchaddpos", 2, 5, FEARG_1, NULL,
1194 ret_number, f_matchaddpos}, 1198 ret_number, f_matchaddpos},
1195 {"matcharg", 1, 1, FEARG_1, NULL, 1199 {"matcharg", 1, 1, FEARG_1, arg1_number,
1196 ret_list_string, f_matcharg}, 1200 ret_list_string, f_matcharg},
1197 {"matchdelete", 1, 2, FEARG_1, NULL, 1201 {"matchdelete", 1, 2, FEARG_1, arg2_number,
1198 ret_number_bool, f_matchdelete}, 1202 ret_number_bool, f_matchdelete},
1199 {"matchend", 2, 4, FEARG_1, NULL, 1203 {"matchend", 2, 4, FEARG_1, NULL,
1200 ret_number, f_matchend}, 1204 ret_number, f_matchend},
1201 {"matchfuzzy", 2, 3, FEARG_1, NULL, 1205 {"matchfuzzy", 2, 3, FEARG_1, NULL,
1202 ret_list_string, f_matchfuzzy}, 1206 ret_list_string, f_matchfuzzy},
1234 }, 1238 },
1235 {"nextnonblank", 1, 1, FEARG_1, NULL, 1239 {"nextnonblank", 1, 1, FEARG_1, NULL,
1236 ret_number, f_nextnonblank}, 1240 ret_number, f_nextnonblank},
1237 {"nr2char", 1, 2, FEARG_1, NULL, 1241 {"nr2char", 1, 2, FEARG_1, NULL,
1238 ret_string, f_nr2char}, 1242 ret_string, f_nr2char},
1239 {"or", 2, 2, FEARG_1, NULL, 1243 {"or", 2, 2, FEARG_1, arg2_number,
1240 ret_number, f_or}, 1244 ret_number, f_or},
1241 {"pathshorten", 1, 2, FEARG_1, NULL, 1245 {"pathshorten", 1, 2, FEARG_1, NULL,
1242 ret_string, f_pathshorten}, 1246 ret_string, f_pathshorten},
1243 {"perleval", 1, 1, FEARG_1, NULL, 1247 {"perleval", 1, 1, FEARG_1, NULL,
1244 ret_any, 1248 ret_any,
1288 ret_void, PROP_FUNC(f_popup_setoptions)}, 1292 ret_void, PROP_FUNC(f_popup_setoptions)},
1289 {"popup_settext", 2, 2, FEARG_1, NULL, 1293 {"popup_settext", 2, 2, FEARG_1, NULL,
1290 ret_void, PROP_FUNC(f_popup_settext)}, 1294 ret_void, PROP_FUNC(f_popup_settext)},
1291 {"popup_show", 1, 1, FEARG_1, NULL, 1295 {"popup_show", 1, 1, FEARG_1, NULL,
1292 ret_void, PROP_FUNC(f_popup_show)}, 1296 ret_void, PROP_FUNC(f_popup_show)},
1293 {"pow", 2, 2, FEARG_1, NULL, 1297 {"pow", 2, 2, FEARG_1, arg2_float_or_nr,
1294 ret_float, FLOAT_FUNC(f_pow)}, 1298 ret_float, FLOAT_FUNC(f_pow)},
1295 {"prevnonblank", 1, 1, FEARG_1, NULL, 1299 {"prevnonblank", 1, 1, FEARG_1, NULL,
1296 ret_number, f_prevnonblank}, 1300 ret_number, f_prevnonblank},
1297 {"printf", 1, 19, FEARG_2, NULL, 1301 {"printf", 1, 19, FEARG_2, NULL,
1298 ret_string, f_printf}, 1302 ret_string, f_printf},
1396 ret_first_arg, f_repeat}, 1400 ret_first_arg, f_repeat},
1397 {"resolve", 1, 1, FEARG_1, NULL, 1401 {"resolve", 1, 1, FEARG_1, NULL,
1398 ret_string, f_resolve}, 1402 ret_string, f_resolve},
1399 {"reverse", 1, 1, FEARG_1, NULL, 1403 {"reverse", 1, 1, FEARG_1, NULL,
1400 ret_first_arg, f_reverse}, 1404 ret_first_arg, f_reverse},
1401 {"round", 1, 1, FEARG_1, NULL, 1405 {"round", 1, 1, FEARG_1, arg1_float_or_nr,
1402 ret_float, FLOAT_FUNC(f_round)}, 1406 ret_float, FLOAT_FUNC(f_round)},
1403 {"rubyeval", 1, 1, FEARG_1, NULL, 1407 {"rubyeval", 1, 1, FEARG_1, NULL,
1404 ret_any, 1408 ret_any,
1405 #ifdef FEAT_RUBY 1409 #ifdef FEAT_RUBY
1406 f_rubyeval 1410 f_rubyeval
1407 #else 1411 #else
1408 NULL 1412 NULL
1409 #endif 1413 #endif
1410 }, 1414 },
1411 {"screenattr", 2, 2, FEARG_1, NULL, 1415 {"screenattr", 2, 2, FEARG_1, arg2_number,
1412 ret_number, f_screenattr}, 1416 ret_number, f_screenattr},
1413 {"screenchar", 2, 2, FEARG_1, NULL, 1417 {"screenchar", 2, 2, FEARG_1, arg2_number,
1414 ret_number, f_screenchar}, 1418 ret_number, f_screenchar},
1415 {"screenchars", 2, 2, FEARG_1, NULL, 1419 {"screenchars", 2, 2, FEARG_1, arg2_number,
1416 ret_list_number, f_screenchars}, 1420 ret_list_number, f_screenchars},
1417 {"screencol", 0, 0, 0, NULL, 1421 {"screencol", 0, 0, 0, NULL,
1418 ret_number, f_screencol}, 1422 ret_number, f_screencol},
1419 {"screenpos", 3, 3, FEARG_1, NULL, 1423 {"screenpos", 3, 3, FEARG_1, NULL,
1420 ret_dict_number, f_screenpos}, 1424 ret_dict_number, f_screenpos},
1421 {"screenrow", 0, 0, 0, NULL, 1425 {"screenrow", 0, 0, 0, NULL,
1422 ret_number, f_screenrow}, 1426 ret_number, f_screenrow},
1423 {"screenstring", 2, 2, FEARG_1, NULL, 1427 {"screenstring", 2, 2, FEARG_1, arg2_number,
1424 ret_string, f_screenstring}, 1428 ret_string, f_screenstring},
1425 {"search", 1, 5, FEARG_1, NULL, 1429 {"search", 1, 5, FEARG_1, NULL,
1426 ret_number, f_search}, 1430 ret_number, f_search},
1427 {"searchcount", 0, 1, FEARG_1, NULL, 1431 {"searchcount", 0, 1, FEARG_1, NULL,
1428 ret_dict_any, f_searchcount}, 1432 ret_dict_any, f_searchcount},
1446 ret_void, f_setcellwidths}, 1450 ret_void, f_setcellwidths},
1447 {"setcharpos", 2, 2, FEARG_2, NULL, 1451 {"setcharpos", 2, 2, FEARG_2, NULL,
1448 ret_number_bool, f_setcharpos}, 1452 ret_number_bool, f_setcharpos},
1449 {"setcharsearch", 1, 1, FEARG_1, NULL, 1453 {"setcharsearch", 1, 1, FEARG_1, NULL,
1450 ret_void, f_setcharsearch}, 1454 ret_void, f_setcharsearch},
1451 {"setcmdpos", 1, 1, FEARG_1, NULL, 1455 {"setcmdpos", 1, 1, FEARG_1, arg1_number,
1452 ret_number_bool, f_setcmdpos}, 1456 ret_number_bool, f_setcmdpos},
1453 {"setcursorcharpos", 1, 3, FEARG_1, NULL, 1457 {"setcursorcharpos", 1, 3, FEARG_1, NULL,
1454 ret_number_bool, f_setcursorcharpos}, 1458 ret_number_bool, f_setcursorcharpos},
1455 {"setenv", 2, 2, FEARG_2, NULL, 1459 {"setenv", 2, 2, FEARG_2, NULL,
1456 ret_void, f_setenv}, 1460 ret_void, f_setenv},
1484 NULL 1488 NULL
1485 #endif 1489 #endif
1486 }, 1490 },
1487 {"shellescape", 1, 2, FEARG_1, NULL, 1491 {"shellescape", 1, 2, FEARG_1, NULL,
1488 ret_string, f_shellescape}, 1492 ret_string, f_shellescape},
1489 {"shiftwidth", 0, 1, FEARG_1, NULL, 1493 {"shiftwidth", 0, 1, FEARG_1, arg1_number,
1490 ret_number, f_shiftwidth}, 1494 ret_number, f_shiftwidth},
1491 {"sign_define", 1, 2, FEARG_1, NULL, 1495 {"sign_define", 1, 2, FEARG_1, NULL,
1492 ret_any, SIGN_FUNC(f_sign_define)}, 1496 ret_any, SIGN_FUNC(f_sign_define)},
1493 {"sign_getdefined", 0, 1, FEARG_1, NULL, 1497 {"sign_getdefined", 0, 1, FEARG_1, NULL,
1494 ret_list_dict_any, SIGN_FUNC(f_sign_getdefined)}, 1498 ret_list_dict_any, SIGN_FUNC(f_sign_getdefined)},
1506 ret_number_bool, SIGN_FUNC(f_sign_unplace)}, 1510 ret_number_bool, SIGN_FUNC(f_sign_unplace)},
1507 {"sign_unplacelist", 1, 2, FEARG_1, NULL, 1511 {"sign_unplacelist", 1, 2, FEARG_1, NULL,
1508 ret_list_number, SIGN_FUNC(f_sign_unplacelist)}, 1512 ret_list_number, SIGN_FUNC(f_sign_unplacelist)},
1509 {"simplify", 1, 1, FEARG_1, NULL, 1513 {"simplify", 1, 1, FEARG_1, NULL,
1510 ret_string, f_simplify}, 1514 ret_string, f_simplify},
1511 {"sin", 1, 1, FEARG_1, NULL, 1515 {"sin", 1, 1, FEARG_1, arg1_float_or_nr,
1512 ret_float, FLOAT_FUNC(f_sin)}, 1516 ret_float, FLOAT_FUNC(f_sin)},
1513 {"sinh", 1, 1, FEARG_1, NULL, 1517 {"sinh", 1, 1, FEARG_1, arg1_float_or_nr,
1514 ret_float, FLOAT_FUNC(f_sinh)}, 1518 ret_float, FLOAT_FUNC(f_sinh)},
1515 {"slice", 2, 3, FEARG_1, NULL, 1519 {"slice", 2, 3, FEARG_1, NULL,
1516 ret_first_arg, f_slice}, 1520 ret_first_arg, f_slice},
1517 {"sort", 1, 3, FEARG_1, NULL, 1521 {"sort", 1, 3, FEARG_1, NULL,
1518 ret_first_arg, f_sort}, 1522 ret_first_arg, f_sort},
1530 ret_list_string, f_spellbadword}, 1534 ret_list_string, f_spellbadword},
1531 {"spellsuggest", 1, 3, FEARG_1, NULL, 1535 {"spellsuggest", 1, 3, FEARG_1, NULL,
1532 ret_list_string, f_spellsuggest}, 1536 ret_list_string, f_spellsuggest},
1533 {"split", 1, 3, FEARG_1, NULL, 1537 {"split", 1, 3, FEARG_1, NULL,
1534 ret_list_string, f_split}, 1538 ret_list_string, f_split},
1535 {"sqrt", 1, 1, FEARG_1, NULL, 1539 {"sqrt", 1, 1, FEARG_1, arg1_float_or_nr,
1536 ret_float, FLOAT_FUNC(f_sqrt)}, 1540 ret_float, FLOAT_FUNC(f_sqrt)},
1537 {"srand", 0, 1, FEARG_1, NULL, 1541 {"srand", 0, 1, FEARG_1, NULL,
1538 ret_list_number, f_srand}, 1542 ret_list_number, f_srand},
1539 {"state", 0, 1, FEARG_1, NULL, 1543 {"state", 0, 1, FEARG_1, NULL,
1540 ret_string, f_state}, 1544 ret_string, f_state},
1614 ret_number, f_tabpagewinnr}, 1618 ret_number, f_tabpagewinnr},
1615 {"tagfiles", 0, 0, 0, NULL, 1619 {"tagfiles", 0, 0, 0, NULL,
1616 ret_list_string, f_tagfiles}, 1620 ret_list_string, f_tagfiles},
1617 {"taglist", 1, 2, FEARG_1, NULL, 1621 {"taglist", 1, 2, FEARG_1, NULL,
1618 ret_list_dict_any, f_taglist}, 1622 ret_list_dict_any, f_taglist},
1619 {"tan", 1, 1, FEARG_1, NULL, 1623 {"tan", 1, 1, FEARG_1, arg1_float_or_nr,
1620 ret_float, FLOAT_FUNC(f_tan)}, 1624 ret_float, FLOAT_FUNC(f_tan)},
1621 {"tanh", 1, 1, FEARG_1, NULL, 1625 {"tanh", 1, 1, FEARG_1, arg1_float_or_nr,
1622 ret_float, FLOAT_FUNC(f_tanh)}, 1626 ret_float, FLOAT_FUNC(f_tanh)},
1623 {"tempname", 0, 0, 0, NULL, 1627 {"tempname", 0, 0, 0, NULL,
1624 ret_string, f_tempname}, 1628 ret_string, f_tempname},
1625 {"term_dumpdiff", 2, 3, FEARG_1, NULL, 1629 {"term_dumpdiff", 2, 3, FEARG_1, NULL,
1626 ret_number, TERM_FUNC(f_term_dumpdiff)}, 1630 ret_number, TERM_FUNC(f_term_dumpdiff)},
1748 ret_number, TIMER_FUNC(f_timer_start)}, 1752 ret_number, TIMER_FUNC(f_timer_start)},
1749 {"timer_stop", 1, 1, FEARG_1, NULL, 1753 {"timer_stop", 1, 1, FEARG_1, NULL,
1750 ret_void, TIMER_FUNC(f_timer_stop)}, 1754 ret_void, TIMER_FUNC(f_timer_stop)},
1751 {"timer_stopall", 0, 0, 0, NULL, 1755 {"timer_stopall", 0, 0, 0, NULL,
1752 ret_void, TIMER_FUNC(f_timer_stopall)}, 1756 ret_void, TIMER_FUNC(f_timer_stopall)},
1753 {"tolower", 1, 1, FEARG_1, NULL, 1757 {"tolower", 1, 1, FEARG_1, arg1_string,
1754 ret_string, f_tolower}, 1758 ret_string, f_tolower},
1755 {"toupper", 1, 1, FEARG_1, NULL, 1759 {"toupper", 1, 1, FEARG_1, arg1_string,
1756 ret_string, f_toupper}, 1760 ret_string, f_toupper},
1757 {"tr", 3, 3, FEARG_1, NULL, 1761 {"tr", 3, 3, FEARG_1, arg3_string,
1758 ret_string, f_tr}, 1762 ret_string, f_tr},
1759 {"trim", 1, 3, FEARG_1, NULL, 1763 {"trim", 1, 3, FEARG_1, NULL,
1760 ret_string, f_trim}, 1764 ret_string, f_trim},
1761 {"trunc", 1, 1, FEARG_1, NULL, 1765 {"trunc", 1, 1, FEARG_1, arg1_float_or_nr,
1762 ret_float, FLOAT_FUNC(f_trunc)}, 1766 ret_float, FLOAT_FUNC(f_trunc)},
1763 {"type", 1, 1, FEARG_1, NULL, 1767 {"type", 1, 1, FEARG_1, NULL,
1764 ret_number, f_type}, 1768 ret_number, f_type},
1765 {"typename", 1, 1, FEARG_1, NULL, 1769 {"typename", 1, 1, FEARG_1, NULL,
1766 ret_string, f_typename}, 1770 ret_string, f_typename},
1782 ret_string, f_win_execute}, 1786 ret_string, f_win_execute},
1783 {"win_findbuf", 1, 1, FEARG_1, NULL, 1787 {"win_findbuf", 1, 1, FEARG_1, NULL,
1784 ret_list_number, f_win_findbuf}, 1788 ret_list_number, f_win_findbuf},
1785 {"win_getid", 0, 2, FEARG_1, NULL, 1789 {"win_getid", 0, 2, FEARG_1, NULL,
1786 ret_number, f_win_getid}, 1790 ret_number, f_win_getid},
1787 {"win_gettype", 0, 1, FEARG_1, NULL, 1791 {"win_gettype", 0, 1, FEARG_1, arg1_number,
1788 ret_string, f_win_gettype}, 1792 ret_string, f_win_gettype},
1789 {"win_gotoid", 1, 1, FEARG_1, NULL, 1793 {"win_gotoid", 1, 1, FEARG_1, arg1_number,
1790 ret_number_bool, f_win_gotoid}, 1794 ret_number_bool, f_win_gotoid},
1791 {"win_id2tabwin", 1, 1, FEARG_1, NULL, 1795 {"win_id2tabwin", 1, 1, FEARG_1, arg1_number,
1792 ret_list_number, f_win_id2tabwin}, 1796 ret_list_number, f_win_id2tabwin},
1793 {"win_id2win", 1, 1, FEARG_1, NULL, 1797 {"win_id2win", 1, 1, FEARG_1, arg1_number,
1794 ret_number, f_win_id2win}, 1798 ret_number, f_win_id2win},
1795 {"win_screenpos", 1, 1, FEARG_1, NULL, 1799 {"win_screenpos", 1, 1, FEARG_1, arg1_number,
1796 ret_list_number, f_win_screenpos}, 1800 ret_list_number, f_win_screenpos},
1797 {"win_splitmove", 2, 3, FEARG_1, NULL, 1801 {"win_splitmove", 2, 3, FEARG_1, NULL,
1798 ret_number_bool, f_win_splitmove}, 1802 ret_number_bool, f_win_splitmove},
1799 {"winbufnr", 1, 1, FEARG_1, NULL, 1803 {"winbufnr", 1, 1, FEARG_1, arg1_number,
1800 ret_number, f_winbufnr}, 1804 ret_number, f_winbufnr},
1801 {"wincol", 0, 0, 0, NULL, 1805 {"wincol", 0, 0, 0, NULL,
1802 ret_number, f_wincol}, 1806 ret_number, f_wincol},
1803 {"windowsversion", 0, 0, 0, NULL, 1807 {"windowsversion", 0, 0, 0, NULL,
1804 ret_string, f_windowsversion}, 1808 ret_string, f_windowsversion},
1805 {"winheight", 1, 1, FEARG_1, NULL, 1809 {"winheight", 1, 1, FEARG_1, arg1_number,
1806 ret_number, f_winheight}, 1810 ret_number, f_winheight},
1807 {"winlayout", 0, 1, FEARG_1, NULL, 1811 {"winlayout", 0, 1, FEARG_1, arg1_number,
1808 ret_list_any, f_winlayout}, 1812 ret_list_any, f_winlayout},
1809 {"winline", 0, 0, 0, NULL, 1813 {"winline", 0, 0, 0, NULL,
1810 ret_number, f_winline}, 1814 ret_number, f_winline},
1811 {"winnr", 0, 1, FEARG_1, NULL, 1815 {"winnr", 0, 1, FEARG_1, NULL,
1812 ret_number, f_winnr}, 1816 ret_number, f_winnr},
1814 ret_string, f_winrestcmd}, 1818 ret_string, f_winrestcmd},
1815 {"winrestview", 1, 1, FEARG_1, NULL, 1819 {"winrestview", 1, 1, FEARG_1, NULL,
1816 ret_void, f_winrestview}, 1820 ret_void, f_winrestview},
1817 {"winsaveview", 0, 0, 0, NULL, 1821 {"winsaveview", 0, 0, 0, NULL,
1818 ret_dict_number, f_winsaveview}, 1822 ret_dict_number, f_winsaveview},
1819 {"winwidth", 1, 1, FEARG_1, NULL, 1823 {"winwidth", 1, 1, FEARG_1, arg1_number,
1820 ret_number, f_winwidth}, 1824 ret_number, f_winwidth},
1821 {"wordcount", 0, 0, 0, NULL, 1825 {"wordcount", 0, 0, 0, NULL,
1822 ret_dict_number, f_wordcount}, 1826 ret_dict_number, f_wordcount},
1823 {"writefile", 2, 3, FEARG_1, NULL, 1827 {"writefile", 2, 3, FEARG_1, NULL,
1824 ret_number_bool, f_writefile}, 1828 ret_number_bool, f_writefile},
1825 {"xor", 2, 2, FEARG_1, NULL, 1829 {"xor", 2, 2, FEARG_1, arg2_number,
1826 ret_number, f_xor}, 1830 ret_number, f_xor},
1827 }; 1831 };
1828 1832
1829 #if defined(EBCDIC) || defined(PROTO) 1833 #if defined(EBCDIC) || defined(PROTO)
1830 /* 1834 /*