diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-10-21 14:25:07 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-10-21 14:25:07 +0200 |
commit | 94738d8fab09c5563e1512f1695e047c715ad274 (patch) | |
tree | d3d53894638221c11e7e721d7f9396e131b0a4e1 /src | |
parent | 3da855c8e28140d9f02b1572e445f8d4f977cf64 (diff) |
patch 8.2.1876: Vim9: argument types are not checked at compile timev8.2.1876
Problem: Vim9: argument types for builtin functions are not checked at
compile time.
Solution: Add an argument type checking mechanism. Implement type checks for
one function.
Diffstat (limited to 'src')
-rw-r--r-- | src/evalfunc.c | 1582 | ||||
-rw-r--r-- | src/proto/evalfunc.pro | 1 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 2 | ||||
-rw-r--r-- | src/testdir/test_vim9_builtin.vim | 554 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 537 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 17 |
7 files changed, 1644 insertions, 1051 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 7bc4f05f5f..adfc226a05 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -259,6 +259,39 @@ static void f_wordcount(typval_T *argvars, typval_T *rettv); static void f_xor(typval_T *argvars, typval_T *rettv); +/* + * Functions that check the argument type of a builtin function. + * Each function returns FAIL and gives an error message if the type is wrong. + */ + +// Context passed to an arg_ function. +typedef struct { + int arg_count; // actual argument count + int arg_idx; // current argument index (first arg is zero) +} argcontext_T; + +// A function to check one argument type. The first argument is the type to +// check. If needed, other argument types can be obtained with the context. +// E.g. if "arg_idx" is 1, then (type - 1) is the first argument type. +typedef int (*argcheck_T)(type_T *, argcontext_T *); + + static int +arg_float_or_nr(type_T *type, argcontext_T *context) +{ + if (type->tt_type == VAR_FLOAT || type->tt_type == VAR_NUMBER) + return OK; + arg_type_mismatch(&t_number, type, context->arg_idx + 1); + return FAIL; +} + +/* + * Lists of functions that check the argument types of a builtin function. + */ +argcheck_T arg1_float_or_nr[] = {arg_float_or_nr}; + +/* + * Functions that return the return type of a builtin function. + */ static type_T * ret_void(int argcount UNUSED, type_T **argtypes UNUSED) { @@ -432,6 +465,7 @@ typedef struct char f_min_argc; // minimal number of arguments char f_max_argc; // maximal number of arguments char f_argtype; // for method: FEARG_ values + argcheck_T *f_argcheck; // list of functions to check argument types type_T *(*f_retfunc)(int argcount, type_T **argtypes); // return type function void (*f_func)(typval_T *args, typval_T *rvar); @@ -488,621 +522,1128 @@ typedef struct static funcentry_T global_functions[] = { - {"abs", 1, 1, FEARG_1, ret_any, FLOAT_FUNC(f_abs)}, - {"acos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_acos)}, - {"add", 2, 2, FEARG_1, ret_first_arg, f_add}, - {"and", 2, 2, FEARG_1, ret_number, f_and}, - {"append", 2, 2, FEARG_2, ret_number, f_append}, - {"appendbufline", 3, 3, FEARG_3, ret_number, f_appendbufline}, - {"argc", 0, 1, 0, ret_number, f_argc}, - {"argidx", 0, 0, 0, ret_number, f_argidx}, - {"arglistid", 0, 2, 0, ret_number, f_arglistid}, - {"argv", 0, 2, 0, ret_argv, f_argv}, - {"asin", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_asin)}, - {"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps}, - {"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal}, - {"assert_equalfile", 2, 3, FEARG_1, ret_number, f_assert_equalfile}, - {"assert_exception", 1, 2, 0, ret_number, f_assert_exception}, - {"assert_fails", 1, 5, FEARG_1, ret_number, f_assert_fails}, - {"assert_false", 1, 2, FEARG_1, ret_number, f_assert_false}, - {"assert_inrange", 3, 4, FEARG_3, ret_number, f_assert_inrange}, - {"assert_match", 2, 3, FEARG_2, ret_number, f_assert_match}, - {"assert_notequal", 2, 3, FEARG_2, ret_number, f_assert_notequal}, - {"assert_notmatch", 2, 3, FEARG_2, ret_number, f_assert_notmatch}, - {"assert_report", 1, 1, FEARG_1, ret_number, f_assert_report}, - {"assert_true", 1, 2, FEARG_1, ret_number, f_assert_true}, - {"atan", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_atan)}, - {"atan2", 2, 2, FEARG_1, ret_float, FLOAT_FUNC(f_atan2)}, - {"balloon_gettext", 0, 0, 0, ret_string, + {"abs", 1, 1, FEARG_1, arg1_float_or_nr, + ret_any, FLOAT_FUNC(f_abs)}, + {"acos", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_acos)}, + {"add", 2, 2, FEARG_1, NULL, + ret_first_arg, f_add}, + {"and", 2, 2, FEARG_1, NULL, + ret_number, f_and}, + {"append", 2, 2, FEARG_2, NULL, + ret_number, f_append}, + {"appendbufline", 3, 3, FEARG_3, NULL, + ret_number, f_appendbufline}, + {"argc", 0, 1, 0, NULL, + ret_number, f_argc}, + {"argidx", 0, 0, 0, NULL, + ret_number, f_argidx}, + {"arglistid", 0, 2, 0, NULL, + ret_number, f_arglistid}, + {"argv", 0, 2, 0, NULL, + ret_argv, f_argv}, + {"asin", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_asin)}, + {"assert_beeps", 1, 2, FEARG_1, NULL, + ret_number, f_assert_beeps}, + {"assert_equal", 2, 3, FEARG_2, NULL, + ret_number, f_assert_equal}, + {"assert_equalfile", 2, 3, FEARG_1, NULL, + ret_number, f_assert_equalfile}, + {"assert_exception", 1, 2, 0, NULL, + ret_number, f_assert_exception}, + {"assert_fails", 1, 5, FEARG_1, NULL, + ret_number, f_assert_fails}, + {"assert_false", 1, 2, FEARG_1, NULL, + ret_number, f_assert_false}, + {"assert_inrange", 3, 4, FEARG_3, NULL, + ret_number, f_assert_inrange}, + {"assert_match", 2, 3, FEARG_2, NULL, + ret_number, f_assert_match}, + {"assert_notequal", 2, 3, FEARG_2, NULL, + ret_number, f_assert_notequal}, + {"assert_notmatch", 2, 3, FEARG_2, NULL, + ret_number, f_assert_notmatch}, + {"assert_report", 1, 1, FEARG_1, NULL, + ret_number, f_assert_report}, + {"assert_true", 1, 2, FEARG_1, NULL, + ret_number, f_assert_true}, + {"atan", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_atan)}, + {"atan2", 2, 2, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_atan2)}, + {"balloon_gettext", 0, 0, 0, NULL, + ret_string, #ifdef FEAT_BEVAL f_balloon_gettext #else NULL #endif }, - {"balloon_show", 1, 1, FEARG_1, ret_void, + {"balloon_show", 1, 1, FEARG_1, NULL, + ret_void, #ifdef FEAT_BEVAL f_balloon_show #else NULL #endif }, - {"balloon_split", 1, 1, FEARG_1, ret_list_string, + {"balloon_split", 1, 1, FEARG_1, NULL, + ret_list_string, #if defined(FEAT_BEVAL_TERM) f_balloon_split #else NULL #endif }, - {"browse", 4, 4, 0, ret_string, f_browse}, - {"browsedir", 2, 2, 0, ret_string, f_browsedir}, - {"bufadd", 1, 1, FEARG_1, ret_number, f_bufadd}, - {"bufexists", 1, 1, FEARG_1, ret_number, f_bufexists}, - {"buffer_exists", 1, 1, FEARG_1, ret_number, f_bufexists}, // obsolete - {"buffer_name", 0, 1, FEARG_1, ret_string, f_bufname}, // obsolete - {"buffer_number", 0, 1, FEARG_1, ret_number, f_bufnr}, // obsolete - {"buflisted", 1, 1, FEARG_1, ret_number, f_buflisted}, - {"bufload", 1, 1, FEARG_1, ret_void, f_bufload}, - {"bufloaded", 1, 1, FEARG_1, ret_number, f_bufloaded}, - {"bufname", 0, 1, FEARG_1, ret_string, f_bufname}, - {"bufnr", 0, 2, FEARG_1, ret_number, f_bufnr}, - {"bufwinid", 1, 1, FEARG_1, ret_number, f_bufwinid}, - {"bufwinnr", 1, 1, FEARG_1, ret_number, f_bufwinnr}, - {"byte2line", 1, 1, FEARG_1, ret_number, f_byte2line}, - {"byteidx", 2, 2, FEARG_1, ret_number, f_byteidx}, - {"byteidxcomp", 2, 2, FEARG_1, ret_number, f_byteidxcomp}, - {"call", 2, 3, FEARG_1, ret_any, f_call}, - {"ceil", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_ceil)}, - {"ch_canread", 1, 1, FEARG_1, ret_number, JOB_FUNC(f_ch_canread)}, - {"ch_close", 1, 1, FEARG_1, ret_void, JOB_FUNC(f_ch_close)}, - {"ch_close_in", 1, 1, FEARG_1, ret_void, JOB_FUNC(f_ch_close_in)}, - {"ch_evalexpr", 2, 3, FEARG_1, ret_any, JOB_FUNC(f_ch_evalexpr)}, - {"ch_evalraw", 2, 3, FEARG_1, ret_any, JOB_FUNC(f_ch_evalraw)}, - {"ch_getbufnr", 2, 2, FEARG_1, ret_number, JOB_FUNC(f_ch_getbufnr)}, - {"ch_getjob", 1, 1, FEARG_1, ret_job, JOB_FUNC(f_ch_getjob)}, - {"ch_info", 1, 1, FEARG_1, ret_dict_any, JOB_FUNC(f_ch_info)}, - {"ch_log", 1, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_log)}, - {"ch_logfile", 1, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_logfile)}, - {"ch_open", 1, 2, FEARG_1, ret_channel, JOB_FUNC(f_ch_open)}, - {"ch_read", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_read)}, - {"ch_readblob", 1, 2, FEARG_1, ret_blob, JOB_FUNC(f_ch_readblob)}, - {"ch_readraw", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_readraw)}, - {"ch_sendexpr", 2, 3, FEARG_1, ret_void, JOB_FUNC(f_ch_sendexpr)}, - {"ch_sendraw", 2, 3, FEARG_1, ret_void, JOB_FUNC(f_ch_sendraw)}, - {"ch_setoptions", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_setoptions)}, - {"ch_status", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_status)}, - {"changenr", 0, 0, 0, ret_number, f_changenr}, - {"char2nr", 1, 2, FEARG_1, ret_number, f_char2nr}, - {"charclass", 1, 1, FEARG_1, ret_number, f_charclass}, - {"chdir", 1, 1, FEARG_1, ret_string, f_chdir}, - {"cindent", 1, 1, FEARG_1, ret_number, f_cindent}, - {"clearmatches", 0, 1, FEARG_1, ret_void, f_clearmatches}, - {"col", 1, 1, FEARG_1, ret_number, f_col}, - {"complete", 2, 2, FEARG_2, ret_void, f_complete}, - {"complete_add", 1, 1, FEARG_1, ret_number, f_complete_add}, - {"complete_check", 0, 0, 0, ret_number, f_complete_check}, - {"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info}, - {"confirm", 1, 4, FEARG_1, ret_number, f_confirm}, - {"copy", 1, 1, FEARG_1, ret_first_arg, f_copy}, - {"cos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cos)}, - {"cosh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cosh)}, - {"count", 2, 4, FEARG_1, ret_number, f_count}, - {"cscope_connection",0,3, 0, ret_number, f_cscope_connection}, - {"cursor", 1, 3, FEARG_1, ret_number, f_cursor}, - {"debugbreak", 1, 1, FEARG_1, ret_number, + {"browse", 4, 4, 0, NULL, + ret_string, f_browse}, + {"browsedir", 2, 2, 0, NULL, + ret_string, f_browsedir}, + {"bufadd", 1, 1, FEARG_1, NULL, + ret_number, f_bufadd}, + {"bufexists", 1, 1, FEARG_1, NULL, + ret_number, f_bufexists}, + {"buffer_exists", 1, 1, FEARG_1, NULL, + ret_number, f_bufexists}, // obsolete + {"buffer_name", 0, 1, FEARG_1, NULL, + ret_string, f_bufname}, // obsolete + {"buffer_number", 0, 1, FEARG_1, NULL, + ret_number, f_bufnr}, // obsolete + {"buflisted", 1, 1, FEARG_1, NULL, + ret_number, f_buflisted}, + {"bufload", 1, 1, FEARG_1, NULL, + ret_void, f_bufload}, + {"bufloaded", 1, 1, FEARG_1, NULL, + ret_number, f_bufloaded}, + {"bufname", 0, 1, FEARG_1, NULL, + ret_string, f_bufname}, + {"bufnr", 0, 2, FEARG_1, NULL, + ret_number, f_bufnr}, + {"bufwinid", 1, 1, FEARG_1, NULL, + ret_number, f_bufwinid}, + {"bufwinnr", 1, 1, FEARG_1, NULL, + ret_number, f_bufwinnr}, + {"byte2line", 1, 1, FEARG_1, NULL, + ret_number, f_byte2line}, + {"byteidx", 2, 2, FEARG_1, NULL, + ret_number, f_byteidx}, + {"byteidxcomp", 2, 2, FEARG_1, NULL, + ret_number, f_byteidxcomp}, + {"call", 2, 3, FEARG_1, NULL, + ret_any, f_call}, + {"ceil", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_ceil)}, + {"ch_canread", 1, 1, FEARG_1, NULL, + ret_number, JOB_FUNC(f_ch_canread)}, + {"ch_close", 1, 1, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_close)}, + {"ch_close_in", 1, 1, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_close_in)}, + {"ch_evalexpr", 2, 3, FEARG_1, NULL, + ret_any, JOB_FUNC(f_ch_evalexpr)}, + {"ch_evalraw", 2, 3, FEARG_1, NULL, + ret_any, JOB_FUNC(f_ch_evalraw)}, + {"ch_getbufnr", 2, 2, FEARG_1, NULL, + ret_number, JOB_FUNC(f_ch_getbufnr)}, + {"ch_getjob", 1, 1, FEARG_1, NULL, + ret_job, JOB_FUNC(f_ch_getjob)}, + {"ch_info", 1, 1, FEARG_1, NULL, + ret_dict_any, JOB_FUNC(f_ch_info)}, + {"ch_log", 1, 2, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_log)}, + {"ch_logfile", 1, 2, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_logfile)}, + {"ch_open", 1, 2, FEARG_1, NULL, + ret_channel, JOB_FUNC(f_ch_open)}, + {"ch_read", 1, 2, FEARG_1, NULL, + ret_string, JOB_FUNC(f_ch_read)}, + {"ch_readblob", 1, 2, FEARG_1, NULL, + ret_blob, JOB_FUNC(f_ch_readblob)}, + {"ch_readraw", 1, 2, FEARG_1, NULL, + ret_string, JOB_FUNC(f_ch_readraw)}, + {"ch_sendexpr", 2, 3, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_sendexpr)}, + {"ch_sendraw", 2, 3, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_sendraw)}, + {"ch_setoptions", 2, 2, FEARG_1, NULL, + ret_void, JOB_FUNC(f_ch_setoptions)}, + {"ch_status", 1, 2, FEARG_1, NULL, + ret_string, JOB_FUNC(f_ch_status)}, + {"changenr", 0, 0, 0, NULL, + ret_number, f_changenr}, + {"char2nr", 1, 2, FEARG_1, NULL, + ret_number, f_char2nr}, + {"charclass", 1, 1, FEARG_1, NULL, + ret_number, f_charclass}, + {"chdir", 1, 1, FEARG_1, NULL, + ret_string, f_chdir}, + {"cindent", 1, 1, FEARG_1, NULL, + ret_number, f_cindent}, + {"clearmatches", 0, 1, FEARG_1, NULL, + ret_void, f_clearmatches}, + {"col", 1, 1, FEARG_1, NULL, + ret_number, f_col}, + {"complete", 2, 2, FEARG_2, NULL, + ret_void, f_complete}, + {"complete_add", 1, 1, FEARG_1, NULL, + ret_number, f_complete_add}, + {"complete_check", 0, 0, 0, NULL, + ret_number, f_complete_check}, + {"complete_info", 0, 1, FEARG_1, NULL, + ret_dict_any, f_complete_info}, + {"confirm", 1, 4, FEARG_1, NULL, + ret_number, f_confirm}, + {"copy", 1, 1, FEARG_1, NULL, + ret_first_arg, f_copy}, + {"cos", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_cos)}, + {"cosh", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_cosh)}, + {"count", 2, 4, FEARG_1, NULL, + ret_number, f_count}, + {"cscope_connection",0,3, 0, NULL, + ret_number, f_cscope_connection}, + {"cursor", 1, 3, FEARG_1, NULL, + ret_number, f_cursor}, + {"debugbreak", 1, 1, FEARG_1, NULL, + ret_number, #ifdef MSWIN f_debugbreak #else NULL #endif }, - {"deepcopy", 1, 2, FEARG_1, ret_first_arg, f_deepcopy}, - {"delete", 1, 2, FEARG_1, ret_number, f_delete}, - {"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline}, - {"did_filetype", 0, 0, 0, ret_number, f_did_filetype}, - {"diff_filler", 1, 1, FEARG_1, ret_number, f_diff_filler}, - {"diff_hlID", 2, 2, FEARG_1, ret_number, f_diff_hlID}, - {"echoraw", 1, 1, FEARG_1, ret_number, f_echoraw}, - {"empty", 1, 1, FEARG_1, ret_number, f_empty}, - {"environ", 0, 0, 0, ret_dict_string, f_environ}, - {"escape", 2, 2, FEARG_1, ret_string, f_escape}, - {"eval", 1, 1, FEARG_1, ret_any, f_eval}, - {"eventhandler", 0, 0, 0, ret_number, f_eventhandler}, - {"executable", 1, 1, FEARG_1, ret_number, f_executable}, - {"execute", 1, 2, FEARG_1, ret_string, f_execute}, - {"exepath", 1, 1, FEARG_1, ret_string, f_exepath}, - {"exists", 1, 1, FEARG_1, ret_number, f_exists}, - {"exp", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_exp)}, - {"expand", 1, 3, FEARG_1, ret_any, f_expand}, - {"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd}, - {"extend", 2, 3, FEARG_1, ret_first_arg, f_extend}, - {"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys}, - {"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete - {"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable}, - {"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable}, - {"filter", 2, 2, FEARG_1, ret_first_arg, f_filter}, - {"finddir", 1, 3, FEARG_1, ret_string, f_finddir}, - {"findfile", 1, 3, FEARG_1, ret_string, f_findfile}, - {"flatten", 1, 2, FEARG_1, ret_list_any, f_flatten}, - {"float2nr", 1, 1, FEARG_1, ret_number, FLOAT_FUNC(f_float2nr)}, - {"floor", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_floor)}, - {"fmod", 2, 2, FEARG_1, ret_float, FLOAT_FUNC(f_fmod)}, - {"fnameescape", 1, 1, FEARG_1, ret_string, f_fnameescape}, - {"fnamemodify", 2, 2, FEARG_1, ret_string, f_fnamemodify}, - {"foldclosed", 1, 1, FEARG_1, ret_number, f_foldclosed}, - {"foldclosedend", 1, 1, FEARG_1, ret_number, f_foldclosedend}, - {"foldlevel", 1, 1, FEARG_1, ret_number, f_foldlevel}, - {"foldtext", 0, 0, 0, ret_string, f_foldtext}, - {"foldtextresult", 1, 1, FEARG_1, ret_string, f_foldtextresult}, - {"foreground", 0, 0, 0, ret_void, f_foreground}, - {"funcref", 1, 3, FEARG_1, ret_func_any, f_funcref}, - {"function", 1, 3, FEARG_1, ret_f_function, f_function}, - {"garbagecollect", 0, 1, 0, ret_void, f_garbagecollect}, - {"get", 2, 3, FEARG_1, ret_any, f_get}, - {"getbufinfo", 0, 1, FEARG_1, ret_list_dict_any, f_getbufinfo}, - {"getbufline", 2, 3, FEARG_1, ret_list_string, f_getbufline}, - {"getbufvar", 2, 3, FEARG_1, ret_any, f_getbufvar}, - {"getchangelist", 0, 1, FEARG_1, ret_list_any, f_getchangelist}, - {"getchar", 0, 1, 0, ret_number, f_getchar}, - {"getcharmod", 0, 0, 0, ret_number, f_getcharmod}, - {"getcharsearch", 0, 0, 0, ret_dict_any, f_getcharsearch}, - {"getcmdline", 0, 0, 0, ret_string, f_getcmdline}, - {"getcmdpos", 0, 0, 0, ret_number, f_getcmdpos}, - {"getcmdtype", 0, 0, 0, ret_string, f_getcmdtype}, - {"getcmdwintype", 0, 0, 0, ret_string, f_getcmdwintype}, - {"getcompletion", 2, 3, FEARG_1, ret_list_string, f_getcompletion}, - {"getcurpos", 0, 1, FEARG_1, ret_list_number, f_getcurpos}, - {"getcwd", 0, 2, FEARG_1, ret_string, f_getcwd}, - {"getenv", 1, 1, FEARG_1, ret_string, f_getenv}, - {"getfontname", 0, 1, 0, ret_string, f_getfontname}, - {"getfperm", 1, 1, FEARG_1, ret_string, f_getfperm}, - {"getfsize", 1, 1, FEARG_1, ret_number, f_getfsize}, - {"getftime", 1, 1, FEARG_1, ret_number, f_getftime}, - {"getftype", 1, 1, FEARG_1, ret_string, f_getftype}, - {"getimstatus", 0, 0, 0, ret_number, f_getimstatus}, - {"getjumplist", 0, 2, FEARG_1, ret_list_any, f_getjumplist}, - {"getline", 1, 2, FEARG_1, ret_f_getline, f_getline}, - {"getloclist", 1, 2, 0, ret_list_or_dict_1, f_getloclist}, - {"getmarklist", 0, 1, FEARG_1, ret_list_dict_any, f_getmarklist}, - {"getmatches", 0, 1, 0, ret_list_dict_any, f_getmatches}, - {"getmousepos", 0, 0, 0, ret_dict_number, f_getmousepos}, - {"getpid", 0, 0, 0, ret_number, f_getpid}, - {"getpos", 1, 1, FEARG_1, ret_list_number, f_getpos}, - {"getqflist", 0, 1, 0, ret_list_or_dict_0, f_getqflist}, - {"getreg", 0, 3, FEARG_1, ret_getreg, f_getreg}, - {"getreginfo", 0, 1, FEARG_1, ret_dict_any, f_getreginfo}, - {"getregtype", 0, 1, FEARG_1, ret_string, f_getregtype}, - {"gettabinfo", 0, 1, FEARG_1, ret_list_dict_any, f_gettabinfo}, - {"gettabvar", 2, 3, FEARG_1, ret_any, f_gettabvar}, - {"gettabwinvar", 3, 4, FEARG_1, ret_any, f_gettabwinvar}, - {"gettagstack", 0, 1, FEARG_1, ret_dict_any, f_gettagstack}, - {"gettext", 1, 1, FEARG_1, ret_string, f_gettext}, - {"getwininfo", 0, 1, FEARG_1, ret_list_dict_any, f_getwininfo}, - {"getwinpos", 0, 1, FEARG_1, ret_list_number, f_getwinpos}, - {"getwinposx", 0, 0, 0, ret_number, f_getwinposx}, - {"getwinposy", 0, 0, 0, ret_number, f_getwinposy}, - {"getwinvar", 2, 3, FEARG_1, ret_any, f_getwinvar}, - {"glob", 1, 4, FEARG_1, ret_any, f_glob}, - {"glob2regpat", 1, 1, FEARG_1, ret_string, f_glob2regpat}, - {"globpath", 2, 5, FEARG_2, ret_any, f_globpath}, - {"has", 1, 2, 0, ret_number, f_has}, - {"has_key", 2, 2, FEARG_1, ret_number, f_has_key}, - {"haslocaldir", 0, 2, FEARG_1, ret_number, f_haslocaldir}, - {"hasmapto", 1, 3, FEARG_1, ret_number, f_hasmapto}, - {"highlightID", 1, 1, FEARG_1, ret_number, f_hlID}, // obsolete - {"highlight_exists",1, 1, FEARG_1, ret_number, f_hlexists}, // obsolete - {"histadd", 2, 2, FEARG_2, ret_number, f_histadd}, - {"histdel", 1, 2, FEARG_1, ret_number, f_histdel}, - {"histget", 1, 2, FEARG_1, ret_string, f_histget}, - {"histnr", 1, 1, FEARG_1, ret_number, f_histnr}, - {"hlID", 1, 1, FEARG_1, ret_number, f_hlID}, - {"hlexists", 1, 1, FEARG_1, ret_number, f_hlexists}, - {"hostname", 0, 0, 0, ret_string, f_hostname}, - {"iconv", 3, 3, FEARG_1, ret_string, f_iconv}, - {"indent", 1, 1, FEARG_1, ret_number, f_indent}, - {"index", 2, 4, FEARG_1, ret_number, f_index}, - {"input", 1, 3, FEARG_1, ret_string, f_input}, - {"inputdialog", 1, 3, FEARG_1, ret_string, f_inputdialog}, - {"inputlist", 1, 1, FEARG_1, ret_number, f_inputlist}, - {"inputrestore", 0, 0, 0, ret_number, f_inputrestore}, - {"inputsave", 0, 0, 0, ret_number, f_inputsave}, - {"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret}, - {"insert", 2, 3, FEARG_1, ret_first_arg, f_insert}, - {"interrupt", 0, 0, 0, ret_void, f_interrupt}, - {"invert", 1, 1, FEARG_1, ret_number, f_invert}, - {"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory}, - {"isinf", 1, 1, FEARG_1, ret_number, MATH_FUNC(f_isinf)}, - {"islocked", 1, 1, FEARG_1, ret_number, f_islocked}, - {"isnan", 1, 1, FEARG_1, ret_number, MATH_FUNC(f_isnan)}, - {"items", 1, 1, FEARG_1, ret_list_any, f_items}, - {"job_getchannel", 1, 1, FEARG_1, ret_channel, JOB_FUNC(f_job_getchannel)}, - {"job_info", 0, 1, FEARG_1, ret_dict_any, JOB_FUNC(f_job_info)}, - {"job_setoptions", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_job_setoptions)}, - {"job_start", 1, 2, FEARG_1, ret_job, JOB_FUNC(f_job_start)}, - {"job_status", 1, 1, FEARG_1, ret_string, JOB_FUNC(f_job_status)}, - {"job_stop", 1, 2, FEARG_1, ret_number, JOB_FUNC(f_job_stop)}, - {"join", 1, 2, FEARG_1, ret_string, f_join}, - {"js_decode", 1, 1, FEARG_1, ret_any, f_js_decode}, - {"js_encode", 1, 1, FEARG_1, ret_string, f_js_encode}, - {"json_decode", 1, 1, FEARG_1, ret_any, f_json_decode}, - {"json_encode", 1, 1, FEARG_1, ret_string, f_json_encode}, - {"keys", 1, 1, FEARG_1, ret_list_string, f_keys}, - {"last_buffer_nr", 0, 0, 0, ret_number, f_last_buffer_nr}, // obsolete - {"len", 1, 1, FEARG_1, ret_number, f_len}, - {"libcall", 3, 3, FEARG_3, ret_string, f_libcall}, - {"libcallnr", 3, 3, FEARG_3, ret_number, f_libcallnr}, - {"line", 1, 2, FEARG_1, ret_number, f_line}, - {"line2byte", 1, 1, FEARG_1, ret_number, f_line2byte}, - {"lispindent", 1, 1, FEARG_1, ret_number, f_lispindent}, - {"list2str", 1, 2, FEARG_1, ret_string, f_list2str}, - {"listener_add", 1, 2, FEARG_2, ret_number, f_listener_add}, - {"listener_flush", 0, 1, FEARG_1, ret_void, f_listener_flush}, - {"listener_remove", 1, 1, FEARG_1, ret_number, f_listener_remove}, - {"localtime", 0, 0, 0, ret_number, f_localtime}, - {"log", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_log)}, - {"log10", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_log10)}, - {"luaeval", 1, 2, FEARG_1, ret_any, + {"deepcopy", 1, 2, FEARG_1, NULL, + ret_first_arg, f_deepcopy}, + {"delete", 1, 2, FEARG_1, NULL, + ret_number, f_delete}, + {"deletebufline", 2, 3, FEARG_1, NULL, + ret_number, f_deletebufline}, + {"did_filetype", 0, 0, 0, NULL, + ret_number, f_did_filetype}, + {"diff_filler", 1, 1, FEARG_1, NULL, + ret_number, f_diff_filler}, + {"diff_hlID", 2, 2, FEARG_1, NULL, + ret_number, f_diff_hlID}, + {"echoraw", 1, 1, FEARG_1, NULL, + ret_number, f_echoraw}, + {"empty", 1, 1, FEARG_1, NULL, + ret_number, f_empty}, + {"environ", 0, 0, 0, NULL, + ret_dict_string, f_environ}, + {"escape", 2, 2, FEARG_1, NULL, + ret_string, f_escape}, + {"eval", 1, 1, FEARG_1, NULL, + ret_any, f_eval}, + {"eventhandler", 0, 0, 0, NULL, + ret_number, f_eventhandler}, + {"executable", 1, 1, FEARG_1, NULL, + ret_number, f_executable}, + {"execute", 1, 2, FEARG_1, NULL, + ret_string, f_execute}, + {"exepath", 1, 1, FEARG_1, NULL, + ret_string, f_exepath}, + {"exists", 1, 1, FEARG_1, NULL, + ret_number, f_exists}, + {"exp", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_exp)}, + {"expand", 1, 3, FEARG_1, NULL, + ret_any, f_expand}, + {"expandcmd", 1, 1, FEARG_1, NULL, + ret_string, f_expandcmd}, + {"extend", 2, 3, FEARG_1, NULL, + ret_first_arg, f_extend}, + {"feedkeys", 1, 2, FEARG_1, NULL, + ret_void, f_feedkeys}, + {"file_readable", 1, 1, FEARG_1, NULL, + ret_number, f_filereadable}, // obsolete + {"filereadable", 1, 1, FEARG_1, NULL, + ret_number, f_filereadable}, + {"filewritable", 1, 1, FEARG_1, NULL, + ret_number, f_filewritable}, + {"filter", 2, 2, FEARG_1, NULL, + ret_first_arg, f_filter}, + {"finddir", 1, 3, FEARG_1, NULL, + ret_string, f_finddir}, + {"findfile", 1, 3, FEARG_1, NULL, + ret_string, f_findfile}, + {"flatten", 1, 2, FEARG_1, NULL, + ret_list_any, f_flatten}, + {"float2nr", 1, 1, FEARG_1, NULL, + ret_number, FLOAT_FUNC(f_float2nr)}, + {"floor", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_floor)}, + {"fmod", 2, 2, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_fmod)}, + {"fnameescape", 1, 1, FEARG_1, NULL, + ret_string, f_fnameescape}, + {"fnamemodify", 2, 2, FEARG_1, NULL, + ret_string, f_fnamemodify}, + {"foldclosed", 1, 1, FEARG_1, NULL, + ret_number, f_foldclosed}, + {"foldclosedend", 1, 1, FEARG_1, NULL, + ret_number, f_foldclosedend}, + {"foldlevel", 1, 1, FEARG_1, NULL, + ret_number, f_foldlevel}, + {"foldtext", 0, 0, 0, NULL, + ret_string, f_foldtext}, + {"foldtextresult", 1, 1, FEARG_1, NULL, + ret_string, f_foldtextresult}, + {"foreground", 0, 0, 0, NULL, + ret_void, f_foreground}, + {"funcref", 1, 3, FEARG_1, NULL, + ret_func_any, f_funcref}, + {"function", 1, 3, FEARG_1, NULL, + ret_f_function, f_function}, + {"garbagecollect", 0, 1, 0, NULL, + ret_void, f_garbagecollect}, + {"get", 2, 3, FEARG_1, NULL, + ret_any, f_get}, + {"getbufinfo", 0, 1, FEARG_1, NULL, + ret_list_dict_any, f_getbufinfo}, + {"getbufline", 2, 3, FEARG_1, NULL, + ret_list_string, f_getbufline}, + {"getbufvar", 2, 3, FEARG_1, NULL, + ret_any, f_getbufvar}, + {"getchangelist", 0, 1, FEARG_1, NULL, + ret_list_any, f_getchangelist}, + {"getchar", 0, 1, 0, NULL, + ret_number, f_getchar}, + {"getcharmod", 0, 0, 0, NULL, + ret_number, f_getcharmod}, + {"getcharsearch", 0, 0, 0, NULL, + ret_dict_any, f_getcharsearch}, + {"getcmdline", 0, 0, 0, NULL, + ret_string, f_getcmdline}, + {"getcmdpos", 0, 0, 0, NULL, + ret_number, f_getcmdpos}, + {"getcmdtype", 0, 0, 0, NULL, + ret_string, f_getcmdtype}, + {"getcmdwintype", 0, 0, 0, NULL, + ret_string, f_getcmdwintype}, + {"getcompletion", 2, 3, FEARG_1, NULL, + ret_list_string, f_getcompletion}, + {"getcurpos", 0, 1, FEARG_1, NULL, + ret_list_number, f_getcurpos}, + {"getcwd", 0, 2, FEARG_1, NULL, + ret_string, f_getcwd}, + {"getenv", 1, 1, FEARG_1, NULL, + ret_string, f_getenv}, + {"getfontname", 0, 1, 0, NULL, + ret_string, f_getfontname}, + {"getfperm", 1, 1, FEARG_1, NULL, + ret_string, f_getfperm}, + {"getfsize", 1, 1, FEARG_1, NULL, + ret_number, f_getfsize}, + {"getftime", 1, 1, FEARG_1, NULL, + ret_number, f_getftime}, + {"getftype", 1, 1, FEARG_1, NULL, + ret_string, f_getftype}, + {"getimstatus", 0, 0, 0, NULL, + ret_number, f_getimstatus}, + {"getjumplist", 0, 2, FEARG_1, NULL, + ret_list_any, f_getjumplist}, + {"getline", 1, 2, FEARG_1, NULL, + ret_f_getline, f_getline}, + {"getloclist", 1, 2, 0, NULL, + ret_list_or_dict_1, f_getloclist}, + {"getmarklist", 0, 1, FEARG_1, NULL, + ret_list_dict_any, f_getmarklist}, + {"getmatches", 0, 1, 0, NULL, + ret_list_dict_any, f_getmatches}, + {"getmousepos", 0, 0, 0, NULL, + ret_dict_number, f_getmousepos}, + {"getpid", 0, 0, 0, NULL, + ret_number, f_getpid}, + {"getpos", 1, 1, FEARG_1, NULL, + ret_list_number, f_getpos}, + {"getqflist", 0, 1, 0, NULL, + ret_list_or_dict_0, f_getqflist}, + {"getreg", 0, 3, FEARG_1, NULL, + ret_getreg, f_getreg}, + {"getreginfo", 0, 1, FEARG_1, NULL, + ret_dict_any, f_getreginfo}, + {"getregtype", 0, 1, FEARG_1, NULL, + ret_string, f_getregtype}, + {"gettabinfo", 0, 1, FEARG_1, NULL, + ret_list_dict_any, f_gettabinfo}, + {"gettabvar", 2, 3, FEARG_1, NULL, + ret_any, f_gettabvar}, + {"gettabwinvar", 3, 4, FEARG_1, NULL, + ret_any, f_gettabwinvar}, + {"gettagstack", 0, 1, FEARG_1, NULL, + ret_dict_any, f_gettagstack}, + {"gettext", 1, 1, FEARG_1, NULL, + ret_string, f_gettext}, + {"getwininfo", 0, 1, FEARG_1, NULL, + ret_list_dict_any, f_getwininfo}, + {"getwinpos", 0, 1, FEARG_1, NULL, + ret_list_number, f_getwinpos}, + {"getwinposx", 0, 0, 0, NULL, + ret_number, f_getwinposx}, + {"getwinposy", 0, 0, 0, NULL, + ret_number, f_getwinposy}, + {"getwinvar", 2, 3, FEARG_1, NULL, + ret_any, f_getwinvar}, + {"glob", 1, 4, FEARG_1, NULL, + ret_any, f_glob}, + {"glob2regpat", 1, 1, FEARG_1, NULL, + ret_string, f_glob2regpat}, + {"globpath", 2, 5, FEARG_2, NULL, + ret_any, f_globpath}, + {"has", 1, 2, 0, NULL, + ret_number, f_has}, + {"has_key", 2, 2, FEARG_1, NULL, + ret_number, f_has_key}, + {"haslocaldir", 0, 2, FEARG_1, NULL, + ret_number, f_haslocaldir}, + {"hasmapto", 1, 3, FEARG_1, NULL, + ret_number, f_hasmapto}, + {"highlightID", 1, 1, FEARG_1, NULL, + ret_number, f_hlID}, // obsolete + {"highlight_exists",1, 1, FEARG_1, NULL, + ret_number, f_hlexists}, // obsolete + {"histadd", 2, 2, FEARG_2, NULL, + ret_number, f_histadd}, + {"histdel", 1, 2, FEARG_1, NULL, + ret_number, f_histdel}, + {"histget", 1, 2, FEARG_1, NULL, + ret_string, f_histget}, + {"histnr", 1, 1, FEARG_1, NULL, + ret_number, f_histnr}, + {"hlID", 1, 1, FEARG_1, NULL, + ret_number, f_hlID}, + {"hlexists", 1, 1, FEARG_1, NULL, + ret_number, f_hlexists}, + {"hostname", 0, 0, 0, NULL, + ret_string, f_hostname}, + {"iconv", 3, 3, FEARG_1, NULL, + ret_string, f_iconv}, + {"indent", 1, 1, FEARG_1, NULL, + ret_number, f_indent}, + {"index", 2, 4, FEARG_1, NULL, + ret_number, f_index}, + {"input", 1, 3, FEARG_1, NULL, + ret_string, f_input}, + {"inputdialog", 1, 3, FEARG_1, NULL, + ret_string, f_inputdialog}, + {"inputlist", 1, 1, FEARG_1, NULL, + ret_number, f_inputlist}, + {"inputrestore", 0, 0, 0, NULL, + ret_number, f_inputrestore}, + {"inputsave", 0, 0, 0, NULL, + ret_number, f_inputsave}, + {"inputsecret", 1, 2, FEARG_1, NULL, + ret_string, f_inputsecret}, + {"insert", 2, 3, FEARG_1, NULL, + ret_first_arg, f_insert}, + {"interrupt", 0, 0, 0, NULL, + ret_void, f_interrupt}, + {"invert", 1, 1, FEARG_1, NULL, + ret_number, f_invert}, + {"isdirectory", 1, 1, FEARG_1, NULL, + ret_number, f_isdirectory}, + {"isinf", 1, 1, FEARG_1, NULL, + ret_number, MATH_FUNC(f_isinf)}, + {"islocked", 1, 1, FEARG_1, NULL, + ret_number, f_islocked}, + {"isnan", 1, 1, FEARG_1, NULL, + ret_number, MATH_FUNC(f_isnan)}, + {"items", 1, 1, FEARG_1, NULL, + ret_list_any, f_items}, + {"job_getchannel", 1, 1, FEARG_1, NULL, + ret_channel, JOB_FUNC(f_job_getchannel)}, + {"job_info", 0, 1, FEARG_1, NULL, + ret_dict_any, JOB_FUNC(f_job_info)}, + {"job_setoptions", 2, 2, FEARG_1, NULL, + ret_void, JOB_FUNC(f_job_setoptions)}, + {"job_start", 1, 2, FEARG_1, NULL, + ret_job, JOB_FUNC(f_job_start)}, + {"job_status", 1, 1, FEARG_1, NULL, + ret_string, JOB_FUNC(f_job_status)}, + {"job_stop", 1, 2, FEARG_1, NULL, + ret_number, JOB_FUNC(f_job_stop)}, + {"join", 1, 2, FEARG_1, NULL, + ret_string, f_join}, + {"js_decode", 1, 1, FEARG_1, NULL, + ret_any, f_js_decode}, + {"js_encode", 1, 1, FEARG_1, NULL, + ret_string, f_js_encode}, + {"json_decode", 1, 1, FEARG_1, NULL, + ret_any, f_json_decode}, + {"json_encode", 1, 1, FEARG_1, NULL, + ret_string, f_json_encode}, + {"keys", 1, 1, FEARG_1, NULL, + ret_list_string, f_keys}, + {"last_buffer_nr", 0, 0, 0, NULL, + ret_number, f_last_buffer_nr}, // obsolete + {"len", 1, 1, FEARG_1, NULL, + ret_number, f_len}, + {"libcall", 3, 3, FEARG_3, NULL, + ret_string, f_libcall}, + {"libcallnr", 3, 3, FEARG_3, NULL, + ret_number, f_libcallnr}, + {"line", 1, 2, FEARG_1, NULL, + ret_number, f_line}, + {"line2byte", 1, 1, FEARG_1, NULL, + ret_number, f_line2byte}, + {"lispindent", 1, 1, FEARG_1, NULL, + ret_number, f_lispindent}, + {"list2str", 1, 2, FEARG_1, NULL, + ret_string, f_list2str}, + {"listener_add", 1, 2, FEARG_2, NULL, + ret_number, f_listener_add}, + {"listener_flush", 0, 1, FEARG_1, NULL, + ret_void, f_listener_flush}, + {"listener_remove", 1, 1, FEARG_1, NULL, + ret_number, f_listener_remove}, + {"localtime", 0, 0, 0, NULL, + ret_number, f_localtime}, + {"log", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_log)}, + {"log10", 1, 1, FEARG_1, NULL, + ret_float, FLOAT_FUNC(f_log10)}, + {"luaeval", 1, 2, FEARG_1, NULL, + ret_any, #ifdef FEAT_LUA f_luaeval #else NULL #endif }, - {"map", 2, 2, FEARG_1, ret_any, f_map}, - {"maparg", 1, 4, FEARG_1, ret_maparg, f_maparg}, - {"mapcheck", 1, 3, FEARG_1, ret_string, f_mapcheck}, - {"mapset", 3, 3, FEARG_1, ret_void, f_mapset}, - {"match", 2, 4, FEARG_1, ret_any, f_match}, - {"matchadd", 2, 5, FEARG_1, ret_number, f_matchadd}, - {"matchaddpos", 2, 5, FEARG_1, ret_number, f_matchaddpos}, - {"matcharg", 1, 1, FEARG_1, ret_list_string, f_matcharg}, - {"matchdelete", 1, 2, FEARG_1, ret_number, f_matchdelete}, - {"matchend", 2, 4, FEARG_1, ret_number, f_matchend}, - {"matchfuzzy", 2, 3, FEARG_1, ret_list_string, f_matchfuzzy}, - {"matchfuzzypos", 2, 3, FEARG_1, ret_list_any, f_matchfuzzypos}, - {"matchlist", 2, 4, FEARG_1, ret_list_string, f_matchlist}, - {"matchstr", 2, 4, FEARG_1, ret_string, f_matchstr}, - {"matchstrpos", 2, 4, FEARG_1, ret_list_any, f_matchstrpos}, - {"max", 1, 1, FEARG_1, ret_any, f_max}, - {"menu_info", 1, 2, FEARG_1, ret_dict_any, + {"map", 2, 2, FEARG_1, NULL, + ret_any, f_map}, + {"maparg", 1, 4, FEARG_1, NULL, + ret_maparg, f_maparg}, + {"mapcheck", 1, 3, FEARG_1, NULL, + ret_string, f_mapcheck}, + {"mapset", 3, 3, FEARG_1, NULL, + ret_void, f_mapset}, + {"match", 2, 4, FEARG_1, NULL, + ret_any, f_match}, + {"matchadd", 2, 5, FEARG_1, NULL, + ret_number, f_matchadd}, + {"matchaddpos", 2, 5, FEARG_1, NULL, + ret_number, f_matchaddpos}, + {"matcharg", 1, 1, FEARG_1, NULL, + ret_list_string, f_matcharg}, + {"matchdelete", 1, 2, FEARG_1, NULL, + ret_number, f_matchdelete}, + {"matchend", 2, 4, FEARG_1, NULL, + ret_number, f_matchend}, + {"matchfuzzy", 2, 3, FEARG_1, NULL, + ret_list_string, f_matchfuzzy}, + {"matchfuzzypos", 2, 3, FEARG_1, NULL, + ret_list_any, f_matchfuzzypos}, + {"matchlist", 2, 4, FEARG_1, NULL, + ret_list_string, f_matchlist}, + {"matchstr", 2, 4, FEARG_1, NULL, + ret_string, f_matchstr}, + {"matchstrpos", 2, 4, FEARG_1, NULL, + ret_list_any, f_matchstrpos}, + {"max", 1, 1, FEARG_1, NULL, + ret_any, f_max}, + {"menu_info", 1, 2, FEARG_1, NULL, + ret_dict_any, #ifdef FEAT_MENU f_menu_info #else NULL #endif }, - {"min", 1, 1, FEARG_1, ret_any, f_min}, - {"mkdir", 1, 3, FEARG_1, ret_number, f_mkdir}, - {"mode", 0, 1, FEARG_1, ret_string, f_mode}, - {"mzeval", 1, 1, FEARG_1, ret_any, + {"min", 1, 1, FEARG_1, NULL, + ret_any, f_min}, + {"mkdir", 1, 3, FEARG_1, NULL, + ret_number, f_mkdir}, + {"mode", 0, 1, FEARG_1, NULL, + ret_string, f_mode}, + {"mzeval", 1, 1, FEARG_1, NULL, + ret_any, #ifdef FEAT_MZSCHEME |