comparison src/evalfunc.c @ 19564:06f29b6ea04a v8.2.0339

patch 8.2.0339: Vim9: function return type may depend on arguments Commit: https://github.com/vim/vim/commit/fbdd08ed9b1798885915c7f27c94786906d258e4 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 1 14:04:46 2020 +0100 patch 8.2.0339: Vim9: function return type may depend on arguments Problem: Vim9: function return type may depend on arguments. Solution: Instead of a fixed return type use a function to figure out the return type.
author Bram Moolenaar <Bram@vim.org>
date Sun, 01 Mar 2020 14:15:04 +0100
parents b38d73f36467
children 87379c82e9c9
comparison
equal deleted inserted replaced
19563:5d3a4b28a95b 19564:06f29b6ea04a
262 static void f_wildmenumode(typval_T *argvars, typval_T *rettv); 262 static void f_wildmenumode(typval_T *argvars, typval_T *rettv);
263 static void f_windowsversion(typval_T *argvars, typval_T *rettv); 263 static void f_windowsversion(typval_T *argvars, typval_T *rettv);
264 static void f_wordcount(typval_T *argvars, typval_T *rettv); 264 static void f_wordcount(typval_T *argvars, typval_T *rettv);
265 static void f_xor(typval_T *argvars, typval_T *rettv); 265 static void f_xor(typval_T *argvars, typval_T *rettv);
266 266
267
268 static type_T *
269 ret_void(int argcount UNUSED, type_T **argtypes UNUSED)
270 {
271 return &t_void;
272 }
273 static type_T *
274 ret_any(int argcount UNUSED, type_T **argtypes UNUSED)
275 {
276 return &t_any;
277 }
278 static type_T *
279 ret_number(int argcount UNUSED, type_T **argtypes UNUSED)
280 {
281 return &t_number;
282 }
283 static type_T *
284 ret_float(int argcount UNUSED, type_T **argtypes UNUSED)
285 {
286 return &t_float;
287 }
288 static type_T *
289 ret_string(int argcount UNUSED, type_T **argtypes UNUSED)
290 {
291 return &t_string;
292 }
293 static type_T * ret_list_any(int argcount UNUSED, type_T **argtypes UNUSED)
294 {
295 return &t_list_any;
296 }
297 static type_T *
298 ret_list_number(int argcount UNUSED, type_T **argtypes UNUSED)
299 {
300 return &t_list_number;
301 }
302 static type_T *
303 ret_list_string(int argcount UNUSED, type_T **argtypes UNUSED)
304 {
305 return &t_list_string;
306 }
307 static type_T *
308 ret_list_dict_any(int argcount UNUSED, type_T **argtypes UNUSED)
309 {
310 return &t_list_dict_any;
311 }
312 static type_T *
313 ret_dict_any(int argcount UNUSED, type_T **argtypes UNUSED)
314 {
315 return &t_dict_any;
316 }
317 static type_T *
318 ret_dict_number(int argcount UNUSED, type_T **argtypes UNUSED)
319 {
320 return &t_dict_number;
321 }
322 static type_T *
323 ret_dict_string(int argcount UNUSED, type_T **argtypes UNUSED)
324 {
325 return &t_dict_string;
326 }
327 static type_T *
328 ret_blob(int argcount UNUSED, type_T **argtypes UNUSED)
329 {
330 return &t_blob;
331 }
332 static type_T *
333 ret_partial_void(int argcount UNUSED, type_T **argtypes UNUSED)
334 {
335 return &t_partial_void;
336 }
337 #ifdef FEAT_JOB_CHANNEL
338 static type_T *
339 ret_channel(int argcount UNUSED, type_T **argtypes UNUSED)
340 {
341 return &t_channel;
342 }
343 static type_T *
344 ret_job(int argcount UNUSED, type_T **argtypes UNUSED)
345 {
346 return &t_job;
347 }
348 #endif
349
350 static type_T *ret_f_function(int argcount, type_T **argtypes);
351
267 /* 352 /*
268 * Array with names and number of arguments of all internal functions 353 * Array with names and number of arguments of all internal functions
269 * MUST BE KEPT SORTED IN strcmp() ORDER FOR BINARY SEARCH! 354 * MUST BE KEPT SORTED IN strcmp() ORDER FOR BINARY SEARCH!
270 */ 355 */
271 typedef struct 356 typedef struct
272 { 357 {
273 char *f_name; // function name 358 char *f_name; // function name
274 char f_min_argc; // minimal number of arguments 359 char f_min_argc; // minimal number of arguments
275 char f_max_argc; // maximal number of arguments 360 char f_max_argc; // maximal number of arguments
276 char f_argtype; // for method: FEARG_ values 361 char f_argtype; // for method: FEARG_ values
277 type_T *f_rettype; // return type 362 type_T *(*f_retfunc)(int argcount, type_T **argtypes);
363 // return type function
278 void (*f_func)(typval_T *args, typval_T *rvar); 364 void (*f_func)(typval_T *args, typval_T *rvar);
279 // implementation of function 365 // implementation of function
280 } funcentry_T; 366 } funcentry_T;
281 367
282 // values for f_argtype; zero means it cannot be used as a method 368 // values for f_argtype; zero means it cannot be used as a method
287 #define FEARG_LAST 9 // base is the last argument 373 #define FEARG_LAST 9 // base is the last argument
288 374
289 static funcentry_T global_functions[] = 375 static funcentry_T global_functions[] =
290 { 376 {
291 #ifdef FEAT_FLOAT 377 #ifdef FEAT_FLOAT
292 {"abs", 1, 1, FEARG_1, &t_any, f_abs}, 378 {"abs", 1, 1, FEARG_1, ret_any, f_abs},
293 {"acos", 1, 1, FEARG_1, &t_float, f_acos}, // WJMc 379 {"acos", 1, 1, FEARG_1, ret_float, f_acos}, // WJMc
294 #endif 380 #endif
295 {"add", 2, 2, FEARG_1, &t_any, f_add}, 381 {"add", 2, 2, FEARG_1, ret_any, f_add},
296 {"and", 2, 2, FEARG_1, &t_number, f_and}, 382 {"and", 2, 2, FEARG_1, ret_number, f_and},
297 {"append", 2, 2, FEARG_LAST, &t_number, f_append}, 383 {"append", 2, 2, FEARG_LAST, ret_number, f_append},
298 {"appendbufline", 3, 3, FEARG_LAST, &t_number, f_appendbufline}, 384 {"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline},
299 {"argc", 0, 1, 0, &t_number, f_argc}, 385 {"argc", 0, 1, 0, ret_number, f_argc},
300 {"argidx", 0, 0, 0, &t_number, f_argidx}, 386 {"argidx", 0, 0, 0, ret_number, f_argidx},
301 {"arglistid", 0, 2, 0, &t_number, f_arglistid}, 387 {"arglistid", 0, 2, 0, ret_number, f_arglistid},
302 {"argv", 0, 2, 0, &t_any, f_argv}, 388 {"argv", 0, 2, 0, ret_any, f_argv},
303 #ifdef FEAT_FLOAT 389 #ifdef FEAT_FLOAT
304 {"asin", 1, 1, FEARG_1, &t_float, f_asin}, // WJMc 390 {"asin", 1, 1, FEARG_1, ret_float, f_asin}, // WJMc
305 #endif 391 #endif
306 {"assert_beeps", 1, 2, FEARG_1, &t_number, f_assert_beeps}, 392 {"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps},
307 {"assert_equal", 2, 3, FEARG_2, &t_number, f_assert_equal}, 393 {"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal},
308 {"assert_equalfile", 2, 2, FEARG_1, &t_number, f_assert_equalfile}, 394 {"assert_equalfile", 2, 2, FEARG_1, ret_number, f_assert_equalfile},
309 {"assert_exception", 1, 2, 0, &t_number, f_assert_exception}, 395 {"assert_exception", 1, 2, 0, ret_number, f_assert_exception},
310 {"assert_fails", 1, 3, FEARG_1, &t_number, f_assert_fails}, 396 {"assert_fails", 1, 3, FEARG_1, ret_number, f_assert_fails},
311 {"assert_false", 1, 2, FEARG_1, &t_number, f_assert_false}, 397 {"assert_false", 1, 2, FEARG_1, ret_number, f_assert_false},
312 {"assert_inrange", 3, 4, FEARG_3, &t_number, f_assert_inrange}, 398 {"assert_inrange", 3, 4, FEARG_3, ret_number, f_assert_inrange},
313 {"assert_match", 2, 3, FEARG_2, &t_number, f_assert_match}, 399 {"assert_match", 2, 3, FEARG_2, ret_number, f_assert_match},
314 {"assert_notequal", 2, 3, FEARG_2, &t_number, f_assert_notequal}, 400 {"assert_notequal", 2, 3, FEARG_2, ret_number, f_assert_notequal},
315 {"assert_notmatch", 2, 3, FEARG_2, &t_number, f_assert_notmatch}, 401 {"assert_notmatch", 2, 3, FEARG_2, ret_number, f_assert_notmatch},
316 {"assert_report", 1, 1, FEARG_1, &t_number, f_assert_report}, 402 {"assert_report", 1, 1, FEARG_1, ret_number, f_assert_report},
317 {"assert_true", 1, 2, FEARG_1, &t_number, f_assert_true}, 403 {"assert_true", 1, 2, FEARG_1, ret_number, f_assert_true},
318 #ifdef FEAT_FLOAT 404 #ifdef FEAT_FLOAT
319 {"atan", 1, 1, FEARG_1, &t_float, f_atan}, 405 {"atan", 1, 1, FEARG_1, ret_float, f_atan},
320 {"atan2", 2, 2, FEARG_1, &t_float, f_atan2}, 406 {"atan2", 2, 2, FEARG_1, ret_float, f_atan2},
321 #endif 407 #endif
322 #ifdef FEAT_BEVAL 408 #ifdef FEAT_BEVAL
323 {"balloon_gettext", 0, 0, 0, &t_string, f_balloon_gettext}, 409 {"balloon_gettext", 0, 0, 0, ret_string, f_balloon_gettext},
324 {"balloon_show", 1, 1, FEARG_1, &t_void, f_balloon_show}, 410 {"balloon_show", 1, 1, FEARG_1, ret_void, f_balloon_show},
325 # if defined(FEAT_BEVAL_TERM) 411 # if defined(FEAT_BEVAL_TERM)
326 {"balloon_split", 1, 1, FEARG_1, &t_list_string, f_balloon_split}, 412 {"balloon_split", 1, 1, FEARG_1, ret_list_string, f_balloon_split},
327 # endif 413 # endif
328 #endif 414 #endif
329 {"browse", 4, 4, 0, &t_string, f_browse}, 415 {"browse", 4, 4, 0, ret_string, f_browse},
330 {"browsedir", 2, 2, 0, &t_string, f_browsedir}, 416 {"browsedir", 2, 2, 0, ret_string, f_browsedir},
331 {"bufadd", 1, 1, FEARG_1, &t_number, f_bufadd}, 417 {"bufadd", 1, 1, FEARG_1, ret_number, f_bufadd},
332 {"bufexists", 1, 1, FEARG_1, &t_number, f_bufexists}, 418 {"bufexists", 1, 1, FEARG_1, ret_number, f_bufexists},
333 {"buffer_exists", 1, 1, FEARG_1, &t_number, f_bufexists}, // obsolete 419 {"buffer_exists", 1, 1, FEARG_1, ret_number, f_bufexists}, // obsolete
334 {"buffer_name", 0, 1, FEARG_1, &t_string, f_bufname}, // obsolete 420 {"buffer_name", 0, 1, FEARG_1, ret_string, f_bufname}, // obsolete
335 {"buffer_number", 0, 1, FEARG_1, &t_number, f_bufnr}, // obsolete 421 {"buffer_number", 0, 1, FEARG_1, ret_number, f_bufnr}, // obsolete
336 {"buflisted", 1, 1, FEARG_1, &t_number, f_buflisted}, 422 {"buflisted", 1, 1, FEARG_1, ret_number, f_buflisted},
337 {"bufload", 1, 1, FEARG_1, &t_void, f_bufload}, 423 {"bufload", 1, 1, FEARG_1, ret_void, f_bufload},
338 {"bufloaded", 1, 1, FEARG_1, &t_number, f_bufloaded}, 424 {"bufloaded", 1, 1, FEARG_1, ret_number, f_bufloaded},
339 {"bufname", 0, 1, FEARG_1, &t_string, f_bufname}, 425 {"bufname", 0, 1, FEARG_1, ret_string, f_bufname},
340 {"bufnr", 0, 2, FEARG_1, &t_number, f_bufnr}, 426 {"bufnr", 0, 2, FEARG_1, ret_number, f_bufnr},
341 {"bufwinid", 1, 1, FEARG_1, &t_number, f_bufwinid}, 427 {"bufwinid", 1, 1, FEARG_1, ret_number, f_bufwinid},
342 {"bufwinnr", 1, 1, FEARG_1, &t_number, f_bufwinnr}, 428 {"bufwinnr", 1, 1, FEARG_1, ret_number, f_bufwinnr},
343 {"byte2line", 1, 1, FEARG_1, &t_number, f_byte2line}, 429 {"byte2line", 1, 1, FEARG_1, ret_number, f_byte2line},
344 {"byteidx", 2, 2, FEARG_1, &t_number, f_byteidx}, 430 {"byteidx", 2, 2, FEARG_1, ret_number, f_byteidx},
345 {"byteidxcomp", 2, 2, FEARG_1, &t_number, f_byteidxcomp}, 431 {"byteidxcomp", 2, 2, FEARG_1, ret_number, f_byteidxcomp},
346 {"call", 2, 3, FEARG_1, &t_any, f_call}, 432 {"call", 2, 3, FEARG_1, ret_any, f_call},
347 #ifdef FEAT_FLOAT 433 #ifdef FEAT_FLOAT
348 {"ceil", 1, 1, FEARG_1, &t_float, f_ceil}, 434 {"ceil", 1, 1, FEARG_1, ret_float, f_ceil},
349 #endif 435 #endif
350 #ifdef FEAT_JOB_CHANNEL 436 #ifdef FEAT_JOB_CHANNEL
351 {"ch_canread", 1, 1, FEARG_1, &t_number, f_ch_canread}, 437 {"ch_canread", 1, 1, FEARG_1, ret_number, f_ch_canread},
352 {"ch_close", 1, 1, FEARG_1, &t_void, f_ch_close}, 438 {"ch_close", 1, 1, FEARG_1, ret_void, f_ch_close},
353 {"ch_close_in", 1, 1, FEARG_1, &t_void, f_ch_close_in}, 439 {"ch_close_in", 1, 1, FEARG_1, ret_void, f_ch_close_in},
354 {"ch_evalexpr", 2, 3, FEARG_1, &t_any, f_ch_evalexpr}, 440 {"ch_evalexpr", 2, 3, FEARG_1, ret_any, f_ch_evalexpr},
355 {"ch_evalraw", 2, 3, FEARG_1, &t_any, f_ch_evalraw}, 441 {"ch_evalraw", 2, 3, FEARG_1, ret_any, f_ch_evalraw},
356 {"ch_getbufnr", 2, 2, FEARG_1, &t_number, f_ch_getbufnr}, 442 {"ch_getbufnr", 2, 2, FEARG_1, ret_number, f_ch_getbufnr},
357 {"ch_getjob", 1, 1, FEARG_1, &t_job, f_ch_getjob}, 443 {"ch_getjob", 1, 1, FEARG_1, ret_job, f_ch_getjob},
358 {"ch_info", 1, 1, FEARG_1, &t_dict_any, f_ch_info}, 444 {"ch_info", 1, 1, FEARG_1, ret_dict_any, f_ch_info},
359 {"ch_log", 1, 2, FEARG_1, &t_void, f_ch_log}, 445 {"ch_log", 1, 2, FEARG_1, ret_void, f_ch_log},
360 {"ch_logfile", 1, 2, FEARG_1, &t_void, f_ch_logfile}, 446 {"ch_logfile", 1, 2, FEARG_1, ret_void, f_ch_logfile},
361 {"ch_open", 1, 2, FEARG_1, &t_channel, f_ch_open}, 447 {"ch_open", 1, 2, FEARG_1, ret_channel, f_ch_open},
362 {"ch_read", 1, 2, FEARG_1, &t_string, f_ch_read}, 448 {"ch_read", 1, 2, FEARG_1, ret_string, f_ch_read},
363 {"ch_readblob", 1, 2, FEARG_1, &t_blob, f_ch_readblob}, 449 {"ch_readblob", 1, 2, FEARG_1, ret_blob, f_ch_readblob},
364 {"ch_readraw", 1, 2, FEARG_1, &t_string, f_ch_readraw}, 450 {"ch_readraw", 1, 2, FEARG_1, ret_string, f_ch_readraw},
365 {"ch_sendexpr", 2, 3, FEARG_1, &t_void, f_ch_sendexpr}, 451 {"ch_sendexpr", 2, 3, FEARG_1, ret_void, f_ch_sendexpr},
366 {"ch_sendraw", 2, 3, FEARG_1, &t_void, f_ch_sendraw}, 452 {"ch_sendraw", 2, 3, FEARG_1, ret_void, f_ch_sendraw},
367 {"ch_setoptions", 2, 2, FEARG_1, &t_void, f_ch_setoptions}, 453 {"ch_setoptions", 2, 2, FEARG_1, ret_void, f_ch_setoptions},
368 {"ch_status", 1, 2, FEARG_1, &t_string, f_ch_status}, 454 {"ch_status", 1, 2, FEARG_1, ret_string, f_ch_status},
369 #endif 455 #endif
370 {"changenr", 0, 0, 0, &t_number, f_changenr}, 456 {"changenr", 0, 0, 0, ret_number, f_changenr},
371 {"char2nr", 1, 2, FEARG_1, &t_number, f_char2nr}, 457 {"char2nr", 1, 2, FEARG_1, ret_number, f_char2nr},
372 {"chdir", 1, 1, FEARG_1, &t_string, f_chdir}, 458 {"chdir", 1, 1, FEARG_1, ret_string, f_chdir},
373 {"cindent", 1, 1, FEARG_1, &t_number, f_cindent}, 459 {"cindent", 1, 1, FEARG_1, ret_number, f_cindent},
374 {"clearmatches", 0, 1, FEARG_1, &t_void, f_clearmatches}, 460 {"clearmatches", 0, 1, FEARG_1, ret_void, f_clearmatches},
375 {"col", 1, 1, FEARG_1, &t_number, f_col}, 461 {"col", 1, 1, FEARG_1, ret_number, f_col},
376 {"complete", 2, 2, FEARG_2, &t_void, f_complete}, 462 {"complete", 2, 2, FEARG_2, ret_void, f_complete},
377 {"complete_add", 1, 1, FEARG_1, &t_number, f_complete_add}, 463 {"complete_add", 1, 1, FEARG_1, ret_number, f_complete_add},
378 {"complete_check", 0, 0, 0, &t_number, f_complete_check}, 464 {"complete_check", 0, 0, 0, ret_number, f_complete_check},
379 {"complete_info", 0, 1, FEARG_1, &t_dict_any, f_complete_info}, 465 {"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info},
380 {"confirm", 1, 4, FEARG_1, &t_number, f_confirm}, 466 {"confirm", 1, 4, FEARG_1, ret_number, f_confirm},
381 {"copy", 1, 1, FEARG_1, &t_any, f_copy}, 467 {"copy", 1, 1, FEARG_1, ret_any, f_copy},
382 #ifdef FEAT_FLOAT 468 #ifdef FEAT_FLOAT
383 {"cos", 1, 1, FEARG_1, &t_float, f_cos}, 469 {"cos", 1, 1, FEARG_1, ret_float, f_cos},
384 {"cosh", 1, 1, FEARG_1, &t_float, f_cosh}, 470 {"cosh", 1, 1, FEARG_1, ret_float, f_cosh},
385 #endif 471 #endif
386 {"count", 2, 4, FEARG_1, &t_number, f_count}, 472 {"count", 2, 4, FEARG_1, ret_number, f_count},
387 {"cscope_connection",0,3, 0, &t_number, f_cscope_connection}, 473 {"cscope_connection",0,3, 0, ret_number, f_cscope_connection},
388 {"cursor", 1, 3, FEARG_1, &t_number, f_cursor}, 474 {"cursor", 1, 3, FEARG_1, ret_number, f_cursor},
389 #ifdef MSWIN 475 #ifdef MSWIN
390 {"debugbreak", 1, 1, FEARG_1, &t_number, f_debugbreak}, 476 {"debugbreak", 1, 1, FEARG_1, ret_number, f_debugbreak},
391 #endif 477 #endif
392 {"deepcopy", 1, 2, FEARG_1, &t_any, f_deepcopy}, 478 {"deepcopy", 1, 2, FEARG_1, ret_any, f_deepcopy},
393 {"delete", 1, 2, FEARG_1, &t_number, f_delete}, 479 {"delete", 1, 2, FEARG_1, ret_number, f_delete},
394 {"deletebufline", 2, 3, FEARG_1, &t_number, f_deletebufline}, 480 {"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline},
395 {"did_filetype", 0, 0, 0, &t_number, f_did_filetype}, 481 {"did_filetype", 0, 0, 0, ret_number, f_did_filetype},
396 {"diff_filler", 1, 1, FEARG_1, &t_number, f_diff_filler}, 482 {"diff_filler", 1, 1, FEARG_1, ret_number, f_diff_filler},
397 {"diff_hlID", 2, 2, FEARG_1, &t_number, f_diff_hlID}, 483 {"diff_hlID", 2, 2, FEARG_1, ret_number, f_diff_hlID},
398 {"echoraw", 1, 1, FEARG_1, &t_number, f_echoraw}, 484 {"echoraw", 1, 1, FEARG_1, ret_number, f_echoraw},
399 {"empty", 1, 1, FEARG_1, &t_number, f_empty}, 485 {"empty", 1, 1, FEARG_1, ret_number, f_empty},
400 {"environ", 0, 0, 0, &t_dict_string, f_environ}, 486 {"environ", 0, 0, 0, ret_dict_string, f_environ},
401 {"escape", 2, 2, FEARG_1, &t_string, f_escape}, 487 {"escape", 2, 2, FEARG_1, ret_string, f_escape},
402 {"eval", 1, 1, FEARG_1, &t_any, f_eval}, 488 {"eval", 1, 1, FEARG_1, ret_any, f_eval},
403 {"eventhandler", 0, 0, 0, &t_number, f_eventhandler}, 489 {"eventhandler", 0, 0, 0, ret_number, f_eventhandler},
404 {"executable", 1, 1, FEARG_1, &t_number, f_executable}, 490 {"executable", 1, 1, FEARG_1, ret_number, f_executable},
405 {"execute", 1, 2, FEARG_1, &t_string, f_execute}, 491 {"execute", 1, 2, FEARG_1, ret_string, f_execute},
406 {"exepath", 1, 1, FEARG_1, &t_string, f_exepath}, 492 {"exepath", 1, 1, FEARG_1, ret_string, f_exepath},
407 {"exists", 1, 1, FEARG_1, &t_number, f_exists}, 493 {"exists", 1, 1, FEARG_1, ret_number, f_exists},
408 #ifdef FEAT_FLOAT 494 #ifdef FEAT_FLOAT
409 {"exp", 1, 1, FEARG_1, &t_float, f_exp}, 495 {"exp", 1, 1, FEARG_1, ret_float, f_exp},
410 #endif 496 #endif
411 {"expand", 1, 3, FEARG_1, &t_any, f_expand}, 497 {"expand", 1, 3, FEARG_1, ret_any, f_expand},
412 {"expandcmd", 1, 1, FEARG_1, &t_string, f_expandcmd}, 498 {"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd},
413 {"extend", 2, 3, FEARG_1, &t_any, f_extend}, 499 {"extend", 2, 3, FEARG_1, ret_any, f_extend},
414 {"feedkeys", 1, 2, FEARG_1, &t_void, f_feedkeys}, 500 {"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys},
415 {"file_readable", 1, 1, FEARG_1, &t_number, f_filereadable}, // obsolete 501 {"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete
416 {"filereadable", 1, 1, FEARG_1, &t_number, f_filereadable}, 502 {"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable},
417 {"filewritable", 1, 1, FEARG_1, &t_number, f_filewritable}, 503 {"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable},
418 {"filter", 2, 2, FEARG_1, &t_any, f_filter}, 504 {"filter", 2, 2, FEARG_1, ret_any, f_filter},
419 {"finddir", 1, 3, FEARG_1, &t_string, f_finddir}, 505 {"finddir", 1, 3, FEARG_1, ret_string, f_finddir},
420 {"findfile", 1, 3, FEARG_1, &t_string, f_findfile}, 506 {"findfile", 1, 3, FEARG_1, ret_string, f_findfile},
421 #ifdef FEAT_FLOAT 507 #ifdef FEAT_FLOAT
422 {"float2nr", 1, 1, FEARG_1, &t_number, f_float2nr}, 508 {"float2nr", 1, 1, FEARG_1, ret_number, f_float2nr},
423 {"floor", 1, 1, FEARG_1, &t_float, f_floor}, 509 {"floor", 1, 1, FEARG_1, ret_float, f_floor},
424 {"fmod", 2, 2, FEARG_1, &t_float, f_fmod}, 510 {"fmod", 2, 2, FEARG_1, ret_float, f_fmod},
425 #endif 511 #endif
426 {"fnameescape", 1, 1, FEARG_1, &t_string, f_fnameescape}, 512 {"fnameescape", 1, 1, FEARG_1, ret_string, f_fnameescape},
427 {"fnamemodify", 2, 2, FEARG_1, &t_string, f_fnamemodify}, 513 {"fnamemodify", 2, 2, FEARG_1, ret_string, f_fnamemodify},
428 {"foldclosed", 1, 1, FEARG_1, &t_number, f_foldclosed}, 514 {"foldclosed", 1, 1, FEARG_1, ret_number, f_foldclosed},
429 {"foldclosedend", 1, 1, FEARG_1, &t_number, f_foldclosedend}, 515 {"foldclosedend", 1, 1, FEARG_1, ret_number, f_foldclosedend},
430 {"foldlevel", 1, 1, FEARG_1, &t_number, f_foldlevel}, 516 {"foldlevel", 1, 1, FEARG_1, ret_number, f_foldlevel},
431 {"foldtext", 0, 0, 0, &t_string, f_foldtext}, 517 {"foldtext", 0, 0, 0, ret_string, f_foldtext},
432 {"foldtextresult", 1, 1, FEARG_1, &t_string, f_foldtextresult}, 518 {"foldtextresult", 1, 1, FEARG_1, ret_string, f_foldtextresult},
433 {"foreground", 0, 0, 0, &t_void, f_foreground}, 519 {"foreground", 0, 0, 0, ret_void, f_foreground},
434 {"funcref", 1, 3, FEARG_1, &t_any, f_funcref}, 520 {"funcref", 1, 3, FEARG_1, ret_partial_void, f_funcref},
435 {"function", 1, 3, FEARG_1, &t_any, f_function}, 521 {"function", 1, 3, FEARG_1, ret_f_function, f_function},
436 {"garbagecollect", 0, 1, 0, &t_void, f_garbagecollect}, 522 {"garbagecollect", 0, 1, 0, ret_void, f_garbagecollect},
437 {"get", 2, 3, FEARG_1, &t_any, f_get}, 523 {"get", 2, 3, FEARG_1, ret_any, f_get},
438 {"getbufinfo", 0, 1, 0, &t_list_dict_any, f_getbufinfo}, 524 {"getbufinfo", 0, 1, 0, ret_list_dict_any, f_getbufinfo},
439 {"getbufline", 2, 3, FEARG_1, &t_list_string, f_getbufline}, 525 {"getbufline", 2, 3, FEARG_1, ret_list_string, f_getbufline},
440 {"getbufvar", 2, 3, FEARG_1, &t_any, f_getbufvar}, 526 {"getbufvar", 2, 3, FEARG_1, ret_any, f_getbufvar},
441 {"getchangelist", 0, 1, FEARG_1, &t_list_any, f_getchangelist}, 527 {"getchangelist", 0, 1, FEARG_1, ret_list_any, f_getchangelist},
442 {"getchar", 0, 1, 0, &t_number, f_getchar}, 528 {"getchar", 0, 1, 0, ret_number, f_getchar},
443 {"getcharmod", 0, 0, 0, &t_number, f_getcharmod}, 529 {"getcharmod", 0, 0, 0, ret_number, f_getcharmod},
444 {"getcharsearch", 0, 0, 0, &t_dict_any, f_getcharsearch}, 530 {"getcharsearch", 0, 0, 0, ret_dict_any, f_getcharsearch},
445 {"getcmdline", 0, 0, 0, &t_string, f_getcmdline}, 531 {"getcmdline", 0, 0, 0, ret_string, f_getcmdline},
446 {"getcmdpos", 0, 0, 0, &t_number, f_getcmdpos}, 532 {"getcmdpos", 0, 0, 0, ret_number, f_getcmdpos},
447 {"getcmdtype", 0, 0, 0, &t_string, f_getcmdtype}, 533 {"getcmdtype", 0, 0, 0, ret_string, f_getcmdtype},
448 {"getcmdwintype", 0, 0, 0, &t_string, f_getcmdwintype}, 534 {"getcmdwintype", 0, 0, 0, ret_string, f_getcmdwintype},
449 {"getcompletion", 2, 3, FEARG_1, &t_list_string, f_getcompletion}, 535 {"getcompletion", 2, 3, FEARG_1, ret_list_string, f_getcompletion},
450 {"getcurpos", 0, 0, 0, &t_list_number, f_getcurpos}, 536 {"getcurpos", 0, 0, 0, ret_list_number, f_getcurpos},
451 {"getcwd", 0, 2, FEARG_1, &t_string, f_getcwd}, 537 {"getcwd", 0, 2, FEARG_1, ret_string, f_getcwd},
452 {"getenv", 1, 1, FEARG_1, &t_string, f_getenv}, 538 {"getenv", 1, 1, FEARG_1, ret_string, f_getenv},
453 {"getfontname", 0, 1, 0, &t_string, f_getfontname}, 539 {"getfontname", 0, 1, 0, ret_string, f_getfontname},
454 {"getfperm", 1, 1, FEARG_1, &t_string, f_getfperm}, 540 {"getfperm", 1, 1, FEARG_1, ret_string, f_getfperm},
455 {"getfsize", 1, 1, FEARG_1, &t_number, f_getfsize}, 541 {"getfsize", 1, 1, FEARG_1, ret_number, f_getfsize},
456 {"getftime", 1, 1, FEARG_1, &t_number, f_getftime}, 542 {"getftime", 1, 1, FEARG_1, ret_number, f_getftime},
457 {"getftype", 1, 1, FEARG_1, &t_string, f_getftype}, 543 {"getftype", 1, 1, FEARG_1, ret_string, f_getftype},
458 {"getimstatus", 0, 0, 0, &t_number, f_getimstatus}, 544 {"getimstatus", 0, 0, 0, ret_number, f_getimstatus},
459 {"getjumplist", 0, 2, FEARG_1, &t_list_any, f_getjumplist}, 545 {"getjumplist", 0, 2, FEARG_1, ret_list_any, f_getjumplist},
460 {"getline", 1, 2, FEARG_1, &t_string, f_getline}, 546 {"getline", 1, 2, FEARG_1, ret_f_getline, f_getline},
461 {"getloclist", 1, 2, 0, &t_list_dict_any, f_getloclist}, 547 {"getloclist", 1, 2, 0, ret_list_dict_any, f_getloclist},
462 {"getmatches", 0, 1, 0, &t_list_dict_any, f_getmatches}, 548 {"getmatches", 0, 1, 0, ret_list_dict_any, f_getmatches},
463 {"getmousepos", 0, 0, 0, &t_dict_number, f_getmousepos}, 549 {"getmousepos", 0, 0, 0, ret_dict_number, f_getmousepos},
464 {"getpid", 0, 0, 0, &t_number, f_getpid}, 550 {"getpid", 0, 0, 0, ret_number, f_getpid},
465 {"getpos", 1, 1, FEARG_1, &t_list_number, f_getpos}, 551 {"getpos", 1, 1, FEARG_1, ret_list_number, f_getpos},
466 {"getqflist", 0, 1, 0, &t_list_dict_any, f_getqflist}, 552 {"getqflist", 0, 1, 0, ret_list_dict_any, f_getqflist},
467 {"getreg", 0, 3, FEARG_1, &t_string, f_getreg}, 553 {"getreg", 0, 3, FEARG_1, ret_string, f_getreg},
468 {"getregtype", 0, 1, FEARG_1, &t_string, f_getregtype}, 554 {"getregtype", 0, 1, FEARG_1, ret_string, f_getregtype},
469 {"gettabinfo", 0, 1, FEARG_1, &t_list_dict_any, f_gettabinfo}, 555 {"gettabinfo", 0, 1, FEARG_1, ret_list_dict_any, f_gettabinfo},
470 {"gettabvar", 2, 3, FEARG_1, &t_any, f_gettabvar}, 556 {"gettabvar", 2, 3, FEARG_1, ret_any, f_gettabvar},
471 {"gettabwinvar", 3, 4, FEARG_1, &t_any, f_gettabwinvar}, 557 {"gettabwinvar", 3, 4, FEARG_1, ret_any, f_gettabwinvar},
472 {"gettagstack", 0, 1, FEARG_1, &t_dict_any, f_gettagstack}, 558 {"gettagstack", 0, 1, FEARG_1, ret_dict_any, f_gettagstack},
473 {"getwininfo", 0, 1, FEARG_1, &t_list_dict_any, f_getwininfo}, 559 {"getwininfo", 0, 1, FEARG_1, ret_list_dict_any, f_getwininfo},
474 {"getwinpos", 0, 1, FEARG_1, &t_list_number, f_getwinpos}, 560 {"getwinpos", 0, 1, FEARG_1, ret_list_number, f_getwinpos},
475 {"getwinposx", 0, 0, 0, &t_number, f_getwinposx}, 561 {"getwinposx", 0, 0, 0, ret_number, f_getwinposx},
476 {"getwinposy", 0, 0, 0, &t_number, f_getwinposy}, 562 {"getwinposy", 0, 0, 0, ret_number, f_getwinposy},
477 {"getwinvar", 2, 3, FEARG_1, &t_any, f_getwinvar}, 563 {"getwinvar", 2, 3, FEARG_1, ret_any, f_getwinvar},
478 {"glob", 1, 4, FEARG_1, &t_any, f_glob}, 564 {"glob", 1, 4, FEARG_1, ret_any, f_glob},
479 {"glob2regpat", 1, 1, FEARG_1, &t_string, f_glob2regpat}, 565 {"glob2regpat", 1, 1, FEARG_1, ret_string, f_glob2regpat},
480 {"globpath", 2, 5, FEARG_2, &t_any, f_globpath}, 566 {"globpath", 2, 5, FEARG_2, ret_any, f_globpath},
481 {"has", 1, 1, 0, &t_number, f_has}, 567 {"has", 1, 1, 0, ret_number, f_has},
482 {"has_key", 2, 2, FEARG_1, &t_number, f_has_key}, 568 {"has_key", 2, 2, FEARG_1, ret_number, f_has_key},
483 {"haslocaldir", 0, 2, FEARG_1, &t_number, f_haslocaldir}, 569 {"haslocaldir", 0, 2, FEARG_1, ret_number, f_haslocaldir},
484 {"hasmapto", 1, 3, FEARG_1, &t_number, f_hasmapto}, 570 {"hasmapto", 1, 3, FEARG_1, ret_number, f_hasmapto},
485 {"highlightID", 1, 1, FEARG_1, &t_number, f_hlID}, // obsolete 571 {"highlightID", 1, 1, FEARG_1, ret_number, f_hlID}, // obsolete
486 {"highlight_exists",1, 1, FEARG_1, &t_number, f_hlexists}, // obsolete 572 {"highlight_exists",1, 1, FEARG_1, ret_number, f_hlexists}, // obsolete
487 {"histadd", 2, 2, FEARG_2, &t_number, f_histadd}, 573 {"histadd", 2, 2, FEARG_2, ret_number, f_histadd},
488 {"histdel", 1, 2, FEARG_1, &t_number, f_histdel}, 574 {"histdel", 1, 2, FEARG_1, ret_number, f_histdel},
489 {"histget", 1, 2, FEARG_1, &t_string, f_histget}, 575 {"histget", 1, 2, FEARG_1, ret_string, f_histget},
490 {"histnr", 1, 1, FEARG_1, &t_number, f_histnr}, 576 {"histnr", 1, 1, FEARG_1, ret_number, f_histnr},
491 {"hlID", 1, 1, FEARG_1, &t_number, f_hlID}, 577 {"hlID", 1, 1, FEARG_1, ret_number, f_hlID},
492 {"hlexists", 1, 1, FEARG_1, &t_number, f_hlexists}, 578 {"hlexists", 1, 1, FEARG_1, ret_number, f_hlexists},
493 {"hostname", 0, 0, 0, &t_string, f_hostname}, 579 {"hostname", 0, 0, 0, ret_string, f_hostname},
494 {"iconv", 3, 3, FEARG_1, &t_string, f_iconv}, 580 {"iconv", 3, 3, FEARG_1, ret_string, f_iconv},
495 {"indent", 1, 1, FEARG_1, &t_number, f_indent}, 581 {"indent", 1, 1, FEARG_1, ret_number, f_indent},
496 {"index", 2, 4, FEARG_1, &t_number, f_index}, 582 {"index", 2, 4, FEARG_1, ret_number, f_index},
497 {"input", 1, 3, FEARG_1, &t_string, f_input}, 583 {"input", 1, 3, FEARG_1, ret_string, f_input},
498 {"inputdialog", 1, 3, FEARG_1, &t_string, f_inputdialog}, 584 {"inputdialog", 1, 3, FEARG_1, ret_string, f_inputdialog},
499 {"inputlist", 1, 1, FEARG_1, &t_number, f_inputlist}, 585 {"inputlist", 1, 1, FEARG_1, ret_number, f_inputlist},
500 {"inputrestore", 0, 0, 0, &t_number, f_inputrestore}, 586 {"inputrestore", 0, 0, 0, ret_number, f_inputrestore},
501 {"inputsave", 0, 0, 0, &t_number, f_inputsave}, 587 {"inputsave", 0, 0, 0, ret_number, f_inputsave},
502 {"inputsecret", 1, 2, FEARG_1, &t_string, f_inputsecret}, 588 {"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret},
503 {"insert", 2, 3, FEARG_1, &t_any, f_insert}, 589 {"insert", 2, 3, FEARG_1, ret_any, f_insert},
504 {"interrupt", 0, 0, 0, &t_void, f_interrupt}, 590 {"interrupt", 0, 0, 0, ret_void, f_interrupt},
505 {"invert", 1, 1, FEARG_1, &t_number, f_invert}, 591 {"invert", 1, 1, FEARG_1, ret_number, f_invert},
506 {"isdirectory", 1, 1, FEARG_1, &t_number, f_isdirectory}, 592 {"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory},
507 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) 593 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
508 {"isinf", 1, 1, FEARG_1, &t_number, f_isinf}, 594 {"isinf", 1, 1, FEARG_1, ret_number, f_isinf},
509 #endif 595 #endif
510 {"islocked", 1, 1, FEARG_1, &t_number, f_islocked}, 596 {"islocked", 1, 1, FEARG_1, ret_number, f_islocked},
511 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) 597 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
512 {"isnan", 1, 1, FEARG_1, &t_number, f_isnan}, 598 {"isnan", 1, 1, FEARG_1, ret_number, f_isnan},
513 #endif 599 #endif
514 {"items", 1, 1, FEARG_1, &t_list_any, f_items}, 600 {"items", 1, 1, FEARG_1, ret_list_any, f_items},
515 #ifdef FEAT_JOB_CHANNEL 601 #ifdef FEAT_JOB_CHANNEL
516 {"job_getchannel", 1, 1, FEARG_1, &t_channel, f_job_getchannel}, 602 {"job_getchannel", 1, 1, FEARG_1, ret_channel, f_job_getchannel},
517 {"job_info", 0, 1, FEARG_1, &t_dict_any, f_job_info}, 603 {"job_info", 0, 1, FEARG_1, ret_dict_any, f_job_info},
518 {"job_setoptions", 2, 2, FEARG_1, &t_void, f_job_setoptions}, 604 {"job_setoptions", 2, 2, FEARG_1, ret_void, f_job_setoptions},
519 {"job_start", 1, 2, FEARG_1, &t_job, f_job_start}, 605 {"job_start", 1, 2, FEARG_1, ret_job, f_job_start},
520 {"job_status", 1, 1, FEARG_1, &t_string, f_job_status}, 606 {"job_status", 1, 1, FEARG_1, ret_string, f_job_status},
521 {"job_stop", 1, 2, FEARG_1, &t_number, f_job_stop}, 607 {"job_stop", 1, 2, FEARG_1, ret_number, f_job_stop},
522 #endif 608 #endif
523 {"join", 1, 2, FEARG_1, &t_string, f_join}, 609 {"join", 1, 2, FEARG_1, ret_string, f_join},
524 {"js_decode", 1, 1, FEARG_1, &t_any, f_js_decode}, 610 {"js_decode", 1, 1, FEARG_1, ret_any, f_js_decode},
525 {"js_encode", 1, 1, FEARG_1, &t_string, f_js_encode}, 611 {"js_encode", 1, 1, FEARG_1, ret_string, f_js_encode},
526 {"json_decode", 1, 1, FEARG_1, &t_any, f_json_decode}, 612 {"json_decode", 1, 1, FEARG_1, ret_any, f_json_decode},
527 {"json_encode", 1, 1, FEARG_1, &t_string, f_json_encode}, 613 {"json_encode", 1, 1, FEARG_1, ret_string, f_json_encode},
528 {"keys", 1, 1, FEARG_1, &t_list_any, f_keys}, 614 {"keys", 1, 1, FEARG_1, ret_list_any, f_keys},
529 {"last_buffer_nr", 0, 0, 0, &t_number, f_last_buffer_nr}, // obsolete 615 {"last_buffer_nr", 0, 0, 0, ret_number, f_last_buffer_nr}, // obsolete
530 {"len", 1, 1, FEARG_1, &t_number, f_len}, 616 {"len", 1, 1, FEARG_1, ret_number, f_len},
531 {"libcall", 3, 3, FEARG_3, &t_string, f_libcall}, 617 {"libcall", 3, 3, FEARG_3, ret_string, f_libcall},
532 {"libcallnr", 3, 3, FEARG_3, &t_number, f_libcallnr}, 618 {"libcallnr", 3, 3, FEARG_3, ret_number, f_libcallnr},
533 {"line", 1, 2, FEARG_1, &t_number, f_line}, 619 {"line", 1, 2, FEARG_1, ret_number, f_line},
534 {"line2byte", 1, 1, FEARG_1, &t_number, f_line2byte}, 620 {"line2byte", 1, 1, FEARG_1, ret_number, f_line2byte},
535 {"lispindent", 1, 1, FEARG_1, &t_number, f_lispindent}, 621 {"lispindent", 1, 1, FEARG_1, ret_number, f_lispindent},
536 {"list2str", 1, 2, FEARG_1, &t_string, f_list2str}, 622 {"list2str", 1, 2, FEARG_1, ret_string, f_list2str},
537 {"listener_add", 1, 2, FEARG_2, &t_number, f_listener_add}, 623 {"listener_add", 1, 2, FEARG_2, ret_number, f_listener_add},
538 {"listener_flush", 0, 1, FEARG_1, &t_void, f_listener_flush}, 624 {"listener_flush", 0, 1, FEARG_1, ret_void, f_listener_flush},
539 {"listener_remove", 1, 1, FEARG_1, &t_number, f_listener_remove}, 625 {"listener_remove", 1, 1, FEARG_1, ret_number, f_listener_remove},
540 {"localtime", 0, 0, 0, &t_number, f_localtime}, 626 {"localtime", 0, 0, 0, ret_number, f_localtime},
541 #ifdef FEAT_FLOAT 627 #ifdef FEAT_FLOAT
542 {"log", 1, 1, FEARG_1, &t_float, f_log}, 628 {"log", 1, 1, FEARG_1, ret_float, f_log},
543 {"log10", 1, 1, FEARG_1, &t_float, f_log10}, 629 {"log10", 1, 1, FEARG_1, ret_float, f_log10},
544 #endif 630 #endif
545 #ifdef FEAT_LUA 631 #ifdef FEAT_LUA
546 {"luaeval", 1, 2, FEARG_1, &t_any, f_luaeval}, 632 {"luaeval", 1, 2, FEARG_1, ret_any, f_luaeval},
547 #endif 633 #endif
548 {"map", 2, 2, FEARG_1, &t_any, f_map}, 634 {"map", 2, 2, FEARG_1, ret_any, f_map},
549 {"maparg", 1, 4, FEARG_1, &t_string, f_maparg}, 635 {"maparg", 1, 4, FEARG_1, ret_string, f_maparg},
550 {"mapcheck", 1, 3, FEARG_1, &t_string, f_mapcheck}, 636 {"mapcheck", 1, 3, FEARG_1, ret_string, f_mapcheck},
551 {"match", 2, 4, FEARG_1, &t_any, f_match}, 637 {"match", 2, 4, FEARG_1, ret_any, f_match},
552 {"matchadd", 2, 5, FEARG_1, &t_number, f_matchadd}, 638 {"matchadd", 2, 5, FEARG_1, ret_number, f_matchadd},
553 {"matchaddpos", 2, 5, FEARG_1, &t_number, f_matchaddpos}, 639 {"matchaddpos", 2, 5, FEARG_1, ret_number, f_matchaddpos},
554 {"matcharg", 1, 1, FEARG_1, &t_list_string, f_matcharg}, 640 {"matcharg", 1, 1, FEARG_1, ret_list_string, f_matcharg},
555 {"matchdelete", 1, 2, FEARG_1, &t_number, f_matchdelete}, 641 {"matchdelete", 1, 2, FEARG_1, ret_number, f_matchdelete},
556 {"matchend", 2, 4, FEARG_1, &t_number, f_matchend}, 642 {"matchend", 2, 4, FEARG_1, ret_number, f_matchend},
557 {"matchlist", 2, 4, FEARG_1, &t_list_string, f_matchlist}, 643 {"matchlist", 2, 4, FEARG_1, ret_list_string, f_matchlist},
558 {"matchstr", 2, 4, FEARG_1, &t_string, f_matchstr}, 644 {"matchstr", 2, 4, FEARG_1, ret_string, f_matchstr},
559 {"matchstrpos", 2, 4, FEARG_1, &t_list_any, f_matchstrpos}, 645 {"matchstrpos", 2, 4, FEARG_1, ret_list_any, f_matchstrpos},
560 {"max", 1, 1, FEARG_1, &t_any, f_max}, 646 {"max", 1, 1, FEARG_1, ret_any, f_max},
561 {"min", 1, 1, FEARG_1, &t_any, f_min}, 647 {"min", 1, 1, FEARG_1, ret_any, f_min},
562 {"mkdir", 1, 3, FEARG_1, &t_number, f_mkdir}, 648 {"mkdir", 1, 3, FEARG_1, ret_number, f_mkdir},
563 {"mode", 0, 1, FEARG_1, &t_string, f_mode}, 649 {"mode", 0, 1, FEARG_1, ret_string, f_mode},
564 #ifdef FEAT_MZSCHEME 650 #ifdef FEAT_MZSCHEME
565 {"mzeval", 1, 1, FEARG_1, &t_any, f_mzeval}, 651 {"mzeval", 1, 1, FEARG_1, ret_any, f_mzeval},
566 #endif 652 #endif
567 {"nextnonblank", 1, 1, FEARG_1, &t_number, f_nextnonblank}, 653 {"nextnonblank", 1, 1, FEARG_1, ret_number, f_nextnonblank},
568 {"nr2char", 1, 2, FEARG_1, &t_string, f_nr2char}, 654 {"nr2char", 1, 2, FEARG_1, ret_string, f_nr2char},
569 {"or", 2, 2, FEARG_1, &t_number, f_or}, 655 {"or", 2, 2, FEARG_1, ret_number, f_or},
570 {"pathshorten", 1, 1, FEARG_1, &t_string, f_pathshorten}, 656 {"pathshorten", 1, 1, FEARG_1, ret_string, f_pathshorten},
571 #ifdef FEAT_PERL 657 #ifdef FEAT_PERL
572 {"perleval", 1, 1, FEARG_1, &t_any, f_perleval}, 658 {"perleval", 1, 1, FEARG_1, ret_any, f_perleval},
573 #endif 659 #endif
574 #ifdef FEAT_PROP_POPUP 660 #ifdef FEAT_PROP_POPUP
575 {"popup_atcursor", 2, 2, FEARG_1, &t_number, f_popup_atcursor}, 661 {"popup_atcursor", 2, 2, FEARG_1, ret_number, f_popup_atcursor},
576 {"popup_beval", 2, 2, FEARG_1, &t_number, f_popup_beval}, 662 {"popup_beval", 2, 2, FEARG_1, ret_number, f_popup_beval},
577 {"popup_clear", 0, 0, 0, &t_void, f_popup_clear}, 663 {"popup_clear", 0, 0, 0, ret_void, f_popup_clear},
578 {"popup_close", 1, 2, FEARG_1, &t_void, f_popup_close}, 664 {"popup_close", 1, 2, FEARG_1, ret_void, f_popup_close},
579 {"popup_create", 2, 2, FEARG_1, &t_number, f_popup_create}, 665 {"popup_create", 2, 2, FEARG_1, ret_number, f_popup_create},
580 {"popup_dialog", 2, 2, FEARG_1, &t_number, f_popup_dialog}, 666 {"popup_dialog", 2, 2, FEARG_1, ret_number, f_popup_dialog},
581 {"popup_filter_menu", 2, 2, 0, &t_number, f_popup_filter_menu}, 667 {"popup_filter_menu", 2, 2, 0, ret_number, f_popup_filter_menu},
582 {"popup_filter_yesno", 2, 2, 0, &t_number, f_popup_filter_yesno}, 668 {"popup_filter_yesno", 2, 2, 0, ret_number, f_popup_filter_yesno},
583 {"popup_findinfo", 0, 0, 0, &t_number, f_popup_findinfo}, 669 {"popup_findinfo", 0, 0, 0, ret_number, f_popup_findinfo},
584 {"popup_findpreview", 0, 0, 0, &t_number, f_popup_findpreview}, 670 {"popup_findpreview", 0, 0, 0, ret_number, f_popup_findpreview},
585 {"popup_getoptions", 1, 1, FEARG_1, &t_dict_any, f_popup_getoptions}, 671 {"popup_getoptions", 1, 1, FEARG_1, ret_dict_any, f_popup_getoptions},
586 {"popup_getpos", 1, 1, FEARG_1, &t_dict_any, f_popup_getpos}, 672 {"popup_getpos", 1, 1, FEARG_1, ret_dict_any, f_popup_getpos},
587 {"popup_hide", 1, 1, FEARG_1, &t_void, f_popup_hide}, 673 {"popup_hide", 1, 1, FEARG_1, ret_void, f_popup_hide},
588 {"popup_locate", 2, 2, 0, &t_number, f_popup_locate}, 674 {"popup_locate", 2, 2, 0, ret_number, f_popup_locate},
589 {"popup_menu", 2, 2, FEARG_1, &t_number, f_popup_menu}, 675 {"popup_menu", 2, 2, FEARG_1, ret_number, f_popup_menu},
590 {"popup_move", 2, 2, FEARG_1, &t_void, f_popup_move}, 676 {"popup_move", 2, 2, FEARG_1, ret_void, f_popup_move},
591 {"popup_notification", 2, 2, FEARG_1, &t_number, f_popup_notification}, 677 {"popup_notification", 2, 2, FEARG_1, ret_number, f_popup_notification},
592 {"popup_setoptions", 2, 2, FEARG_1, &t_void, f_popup_setoptions}, 678 {"popup_setoptions", 2, 2, FEARG_1, ret_void, f_popup_setoptions},
593 {"popup_settext", 2, 2, FEARG_1, &t_void, f_popup_settext}, 679 {"popup_settext", 2, 2, FEARG_1, ret_void, f_popup_settext},
594 {"popup_show", 1, 1, FEARG_1, &t_void, f_popup_show}, 680 {"popup_show", 1, 1, FEARG_1, ret_void, f_popup_show},
595 #endif 681 #endif
596 #ifdef FEAT_FLOAT 682 #ifdef FEAT_FLOAT
597 {"pow", 2, 2, FEARG_1, &t_float, f_pow}, 683 {"pow", 2, 2, FEARG_1, ret_float, f_pow},
598 #endif 684 #endif
599 {"prevnonblank", 1, 1, FEARG_1, &t_number, f_prevnonblank}, 685 {"prevnonblank", 1, 1, FEARG_1, ret_number, f_prevnonblank},
600 {"printf", 1, 19, FEARG_2, &t_string, f_printf}, 686 {"printf", 1, 19, FEARG_2, ret_string, f_printf},
601 #ifdef FEAT_JOB_CHANNEL 687 #ifdef FEAT_JOB_CHANNEL
602 {"prompt_setcallback", 2, 2, FEARG_1, &t_void, f_prompt_setcallback}, 688 {"prompt_setcallback", 2, 2, FEARG_1, ret_void, f_prompt_setcallback},
603 {"prompt_setinterrupt", 2, 2, FEARG_1,&t_void, f_prompt_setinterrupt}, 689 {"prompt_setinterrupt", 2, 2, FEARG_1,ret_void, f_prompt_setinterrupt},
604 {"prompt_setprompt", 2, 2, FEARG_1, &t_void, f_prompt_setprompt}, 690 {"prompt_setprompt", 2, 2, FEARG_1, ret_void, f_prompt_setprompt},
605 #endif 691 #endif
606 #ifdef FEAT_PROP_POPUP 692 #ifdef FEAT_PROP_POPUP
607 {"prop_add", 3, 3, FEARG_1, &t_void, f_prop_add}, 693 {"prop_add", 3, 3, FEARG_1, ret_void, f_prop_add},
608 {"prop_clear", 1, 3, FEARG_1, &t_void, f_prop_clear}, 694 {"prop_clear", 1, 3, FEARG_1, ret_void, f_prop_clear},
609 {"prop_find", 1, 2, FEARG_1, &t_dict_any, f_prop_find}, 695 {"prop_find", 1, 2, FEARG_1, ret_dict_any, f_prop_find},
610 {"prop_list", 1, 2, FEARG_1, &t_list_dict_any, f_prop_list}, 696 {"prop_list", 1, 2, FEARG_1, ret_list_dict_any, f_prop_list},
611 {"prop_remove", 1, 3, FEARG_1, &t_number, f_prop_remove}, 697 {"prop_remove", 1, 3, FEARG_1, ret_number, f_prop_remove},
612 {"prop_type_add", 2, 2, FEARG_1, &t_void, f_prop_type_add}, 698 {"prop_type_add", 2, 2, FEARG_1, ret_void, f_prop_type_add},
613 {"prop_type_change", 2, 2, FEARG_1, &t_void, f_prop_type_change}, 699 {"prop_type_change", 2, 2, FEARG_1, ret_void, f_prop_type_change},
614 {"prop_type_delete", 1, 2, FEARG_1, &t_void, f_prop_type_delete}, 700 {"prop_type_delete", 1, 2, FEARG_1, ret_void, f_prop_type_delete},
615 {"prop_type_get", 1, 2, FEARG_1, &t_dict_any, f_prop_type_get}, 701 {"prop_type_get", 1, 2, FEARG_1, ret_dict_any, f_prop_type_get},
616 {"prop_type_list", 0, 1, FEARG_1, &t_list_string, f_prop_type_list}, 702 {"prop_type_list", 0, 1, FEARG_1, ret_list_string, f_prop_type_list},
617 #endif 703 #endif
618 {"pum_getpos", 0, 0, 0, &t_dict_number, f_pum_getpos}, 704 {"pum_getpos", 0, 0, 0, ret_dict_number, f_pum_getpos},
619 {"pumvisible", 0, 0, 0, &t_number, f_pumvisible}, 705 {"pumvisible", 0, 0, 0, ret_number, f_pumvisible},
620 #ifdef FEAT_PYTHON3 706 #ifdef FEAT_PYTHON3
621 {"py3eval", 1, 1, FEARG_1, &t_any, f_py3eval}, 707 {"py3eval", 1, 1, FEARG_1, ret_any, f_py3eval},
622 #endif 708 #endif
623 #ifdef FEAT_PYTHON 709 #ifdef FEAT_PYTHON
624 {"pyeval", 1, 1, FEARG_1, &t_any, f_pyeval}, 710 {"pyeval", 1, 1, FEARG_1, ret_any, f_pyeval},
625 #endif 711 #endif
626 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) 712 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
627 {"pyxeval", 1, 1, FEARG_1, &t_any, f_pyxeval}, 713 {"pyxeval", 1, 1, FEARG_1, ret_any, f_pyxeval},
628 #endif 714 #endif
629 {"rand", 0, 1, FEARG_1, &t_number, f_rand}, 715 {"rand", 0, 1, FEARG_1, ret_number, f_rand},
630 {"range", 1, 3, FEARG_1, &t_list_number, f_range}, 716 {"range", 1, 3, FEARG_1, ret_list_number, f_range},
631 {"readdir", 1, 2, FEARG_1, &t_list_string, f_readdir}, 717 {"readdir", 1, 2, FEARG_1, ret_list_string, f_readdir},
632 {"readfile", 1, 3, FEARG_1, &t_any, f_readfile}, 718 {"readfile", 1, 3, FEARG_1, ret_any, f_readfile},
633 {"reg_executing", 0, 0, 0, &t_string, f_reg_executing}, 719 {"reg_executing", 0, 0, 0, ret_string, f_reg_executing},
634 {"reg_recording", 0, 0, 0, &t_string, f_reg_recording}, 720 {"reg_recording", 0, 0, 0, ret_string, f_reg_recording},
635 {"reltime", 0, 2, FEARG_1, &t_list_any, f_reltime}, 721 {"reltime", 0, 2, FEARG_1, ret_list_any, f_reltime},
636 #ifdef FEAT_FLOAT 722 #ifdef FEAT_FLOAT
637 {"reltimefloat", 1, 1, FEARG_1, &t_float, f_reltimefloat}, 723 {"reltimefloat", 1, 1, FEARG_1, ret_float, f_reltimefloat},
638 #endif 724 #endif
639 {"reltimestr", 1, 1, FEARG_1, &t_string, f_reltimestr}, 725 {"reltimestr", 1, 1, FEARG_1, ret_string, f_reltimestr},
640 {"remote_expr", 2, 4, FEARG_1, &t_string, f_remote_expr}, 726 {"remote_expr", 2, 4, FEARG_1, ret_string, f_remote_expr},
641 {"remote_foreground", 1, 1, FEARG_1, &t_string, f_remote_foreground}, 727 {"remote_foreground", 1, 1, FEARG_1, ret_string, f_remote_foreground},
642 {"remote_peek", 1, 2, FEARG_1, &t_number, f_remote_peek}, 728 {"remote_peek", 1, 2, FEARG_1, ret_number, f_remote_peek},
643 {"remote_read", 1, 2, FEARG_1, &t_string, f_remote_read}, 729 {"remote_read", 1, 2, FEARG_1, ret_string, f_remote_read},
644 {"remote_send", 2, 3, FEARG_1, &t_string, f_remote_send}, 730 {"remote_send", 2, 3, FEARG_1, ret_string, f_remote_send},
645 {"remote_startserver", 1, 1, FEARG_1, &t_void, f_remote_startserver}, 731 {"remote_startserver", 1, 1, FEARG_1, ret_void, f_remote_startserver},
646 {"remove", 2, 3, FEARG_1, &t_any, f_remove}, 732 {"remove", 2, 3, FEARG_1, ret_any, f_remove},
647 {"rename", 2, 2, FEARG_1, &t_number, f_rename}, 733 {"rename", 2, 2, FEARG_1, ret_number, f_rename},
648 {"repeat", 2, 2, FEARG_1, &t_any, f_repeat}, 734 {"repeat", 2, 2, FEARG_1, ret_any, f_repeat},
649 {"resolve", 1, 1, FEARG_1, &t_string, f_resolve}, 735 {"resolve", 1, 1, FEARG_1, ret_string, f_resolve},
650 {"reverse", 1, 1, FEARG_1, &t_any, f_reverse}, 736 {"reverse", 1, 1, FEARG_1, ret_any, f_reverse},
651 #ifdef FEAT_FLOAT 737 #ifdef FEAT_FLOAT
652 {"round", 1, 1, FEARG_1, &t_float, f_round}, 738 {"round", 1, 1, FEARG_1, ret_float, f_round},
653 #endif 739 #endif
654 #ifdef FEAT_RUBY 740 #ifdef FEAT_RUBY
655 {"rubyeval", 1, 1, FEARG_1, &t_any, f_rubyeval}, 741 {"rubyeval", 1, 1, FEARG_1, ret_any, f_rubyeval},
656 #endif 742 #endif
657 {"screenattr", 2, 2, FEARG_1, &t_number, f_screenattr}, 743 {"screenattr", 2, 2, FEARG_1, ret_number, f_screenattr},
658 {"screenchar", 2, 2, FEARG_1, &t_number, f_screenchar}, 744 {"screenchar", 2, 2, FEARG_1, ret_number, f_screenchar},
659 {"screenchars", 2, 2, FEARG_1, &t_list_number, f_screenchars}, 745 {"screenchars", 2, 2, FEARG_1, ret_list_number, f_screenchars},
660 {"screencol", 0, 0, 0, &t_number, f_screencol}, 746 {"screencol", 0, 0, 0, ret_number, f_screencol},
661 {"screenpos", 3, 3, FEARG_1, &t_dict_number, f_screenpos}, 747 {"screenpos", 3, 3, FEARG_1, ret_dict_number, f_screenpos},
662 {"screenrow", 0, 0, 0, &t_number, f_screenrow}, 748 {"screenrow", 0, 0, 0, ret_number, f_screenrow},
663 {"screenstring", 2, 2, FEARG_1, &t_string, f_screenstring}, 749 {"screenstring", 2, 2, FEARG_1, ret_string, f_screenstring},
664 {"search", 1, 4, FEARG_1, &t_number, f_search}, 750 {"search", 1, 4, FEARG_1, ret_number, f_search},
665 {"searchdecl", 1, 3, FEARG_1, &t_number, f_searchdecl}, 751 {"searchdecl", 1, 3, FEARG_1, ret_number, f_searchdecl},
666 {"searchpair", 3, 7, 0, &t_number, f_searchpair}, 752 {"searchpair", 3, 7, 0, ret_number, f_searchpair},
667 {"searchpairpos", 3, 7, 0, &t_list_number, f_searchpairpos}, 753 {"searchpairpos", 3, 7, 0, ret_list_number, f_searchpairpos},
668 {"searchpos", 1, 4, FEARG_1, &t_list_number, f_searchpos}, 754 {"searchpos", 1, 4, FEARG_1, ret_list_number, f_searchpos},
669 {"server2client", 2, 2, FEARG_1, &t_number, f_server2client}, 755 {"server2client", 2, 2, FEARG_1, ret_number, f_server2client},
670 {"serverlist", 0, 0, 0, &t_string, f_serverlist}, 756 {"serverlist", 0, 0, 0, ret_string, f_serverlist},
671 {"setbufline", 3, 3, FEARG_3, &t_number, f_setbufline}, 757 {"setbufline", 3, 3, FEARG_3, ret_number, f_setbufline},
672 {"setbufvar", 3, 3, FEARG_3, &t_void, f_setbufvar}, 758 {"setbufvar", 3, 3, FEARG_3, ret_void, f_setbufvar},
673 {"setcharsearch", 1, 1, FEARG_1, &t_void, f_setcharsearch}, 759 {"setcharsearch", 1, 1, FEARG_1, ret_void, f_setcharsearch},
674 {"setcmdpos", 1, 1, FEARG_1, &t_number, f_setcmdpos}, 760 {"setcmdpos", 1, 1, FEARG_1, ret_number, f_setcmdpos},
675 {"setenv", 2, 2, FEARG_2, &t_void, f_setenv}, 761 {"setenv", 2, 2, FEARG_2, ret_void, f_setenv},
676 {"setfperm", 2, 2, FEARG_1, &t_number, f_setfperm}, 762 {"setfperm", 2, 2, FEARG_1, ret_number, f_setfperm},
677 {"setline", 2, 2, FEARG_2, &t_number, f_setline}, 763 {"setline", 2, 2, FEARG_2, ret_number, f_setline},
678 {"setloclist", 2, 4, FEARG_2, &t_number, f_setloclist}, 764 {"setloclist", 2, 4, FEARG_2, ret_number, f_setloclist},
679 {"setmatches", 1, 2, FEARG_1, &t_number, f_setmatches}, 765 {"setmatches", 1, 2, FEARG_1, ret_number, f_setmatches},
680 {"setpos", 2, 2, FEARG_2, &t_number, f_setpos}, 766 {"setpos", 2, 2, FEARG_2, ret_number, f_setpos},
681 {"setqflist", 1, 3, FEARG_1, &t_number, f_setqflist}, 767 {"setqflist", 1, 3, FEARG_1, ret_number, f_setqflist},
682 {"setreg", 2, 3, FEARG_2, &t_number, f_setreg}, 768 {"setreg", 2, 3, FEARG_2, ret_number, f_setreg},
683 {"settabvar", 3, 3, FEARG_3, &t_void, f_settabvar}, 769 {"settabvar", 3, 3, FEARG_3, ret_void, f_settabvar},
684 {"settabwinvar", 4, 4, FEARG_4, &t_void, f_settabwinvar}, 770 {"settabwinvar", 4, 4, FEARG_4, ret_void, f_settabwinvar},
685 {"settagstack", 2, 3, FEARG_2, &t_number, f_settagstack}, 771 {"settagstack", 2, 3, FEARG_2, ret_number, f_settagstack},
686 {"setwinvar", 3, 3, FEARG_3, &t_void, f_setwinvar}, 772 {"setwinvar", 3, 3, FEARG_3, ret_void, f_setwinvar},
687 #ifdef FEAT_CRYPT 773 #ifdef FEAT_CRYPT
688 {"sha256", 1, 1, FEARG_1, &t_string, f_sha256}, 774 {"sha256", 1, 1, FEARG_1, ret_string, f_sha256},
689 #endif 775 #endif
690 {"shellescape", 1, 2, FEARG_1, &t_string, f_shellescape}, 776 {"shellescape", 1, 2, FEARG_1, ret_string, f_shellescape},
691 {"shiftwidth", 0, 1, FEARG_1, &t_number, f_shiftwidth}, 777 {"shiftwidth", 0, 1, FEARG_1, ret_number, f_shiftwidth},
692 #ifdef FEAT_SIGNS 778 #ifdef FEAT_SIGNS
693 {"sign_define", 1, 2, FEARG_1, &t_any, f_sign_define}, 779 {"sign_define", 1, 2, FEARG_1, ret_any, f_sign_define},
694 {"sign_getdefined", 0, 1, FEARG_1, &t_list_dict_any, f_sign_getdefined}, 780 {"sign_getdefined", 0, 1, FEARG_1, ret_list_dict_any, f_sign_getdefined},
695 {"sign_getplaced", 0, 2, FEARG_1, &t_list_dict_any, f_sign_getplaced}, 781 {"sign_getplaced", 0, 2, FEARG_1, ret_list_dict_any, f_sign_getplaced},
696 {"sign_jump", 3, 3, FEARG_1, &t_number, f_sign_jump}, 782 {"sign_jump", 3, 3, FEARG_1, ret_number, f_sign_jump},
697 {"sign_place", 4, 5, FEARG_1, &t_number, f_sign_place}, 783 {"sign_place", 4, 5, FEARG_1, ret_number, f_sign_place},
698 {"sign_placelist", 1, 1, FEARG_1, &t_list_number, f_sign_placelist}, 784 {"sign_placelist", 1, 1, FEARG_1, ret_list_number, f_sign_placelist},
699 {"sign_undefine", 0, 1, FEARG_1, &t_number, f_sign_undefine}, 785 {"sign_undefine", 0, 1, FEARG_1, ret_number, f_sign_undefine},
700 {"sign_unplace", 1, 2, FEARG_1, &t_number, f_sign_unplace}, 786 {"sign_unplace", 1, 2, FEARG_1, ret_number, f_sign_unplace},
701 {"sign_unplacelist", 1, 2, FEARG_1, &t_list_number, f_sign_unplacelist}, 787 {"sign_unplacelist", 1, 2, FEARG_1, ret_list_number, f_sign_unplacelist},
702 #endif 788 #endif
703 {"simplify", 1, 1, 0, &t_string, f_simplify}, 789 {"simplify", 1, 1, 0, ret_string, f_simplify},
704 #ifdef FEAT_FLOAT 790 #ifdef FEAT_FLOAT
705 {"sin", 1, 1, FEARG_1, &t_float, f_sin}, 791 {"sin", 1, 1, FEARG_1, ret_float, f_sin},
706 {"sinh", 1, 1, FEARG_1, &t_float, f_sinh}, 792 {"sinh", 1, 1, FEARG_1, ret_float, f_sinh},
707 #endif 793 #endif
708 {"sort", 1, 3, FEARG_1, &t_list_any, f_sort}, 794 {"sort", 1, 3, FEARG_1, ret_list_any, f_sort},
709 #ifdef FEAT_SOUND 795 #ifdef FEAT_SOUND
710 {"sound_clear", 0, 0, 0, &t_void, f_sound_clear}, 796 {"sound_clear", 0, 0, 0, ret_void, f_sound_clear},
711 {"sound_playevent", 1, 2, FEARG_1, &t_number, f_sound_playevent}, 797 {"sound_playevent", 1, 2, FEARG_1, ret_number, f_sound_playevent},
712 {"sound_playfile", 1, 2, FEARG_1, &t_number, f_sound_playfile}, 798 {"sound_playfile", 1, 2, FEARG_1, ret_number, f_sound_playfile},
713 {"sound_stop", 1, 1, FEARG_1, &t_void, f_sound_stop}, 799 {"sound_stop", 1, 1, FEARG_1, ret_void, f_sound_stop},
714 #endif 800 #endif
715 {"soundfold", 1, 1, FEARG_1, &t_string, f_soundfold}, 801 {"soundfold", 1, 1, FEARG_1, ret_string, f_soundfold},
716 {"spellbadword", 0, 1, FEARG_1, &t_list_string, f_spellbadword}, 802 {"spellbadword", 0, 1, FEARG_1, ret_list_string, f_spellbadword},
717 {"spellsuggest", 1, 3, FEARG_1, &t_list_string, f_spellsuggest}, 803 {"spellsuggest", 1, 3, FEARG_1, ret_list_string, f_spellsuggest},
718 {"split", 1, 3, FEARG_1, &t_list_string, f_split}, 804 {"split", 1, 3, FEARG_1, ret_list_string, f_split},
719 #ifdef FEAT_FLOAT 805 #ifdef FEAT_FLOAT
720 {"sqrt", 1, 1, FEARG_1, &t_float, f_sqrt}, 806 {"sqrt", 1, 1, FEARG_1, ret_float, f_sqrt},
721 #endif 807 #endif
722 {"srand", 0, 1, FEARG_1, &t_list_number, f_srand}, 808 {"srand", 0, 1, FEARG_1, ret_list_number, f_srand},
723 {"state", 0, 1, FEARG_1, &t_string, f_state}, 809 {"state", 0, 1, FEARG_1, ret_string, f_state},
724 #ifdef FEAT_FLOAT 810 #ifdef FEAT_FLOAT
725 {"str2float", 1, 1, FEARG_1, &t_float, f_str2float}, 811 {"str2float", 1, 1, FEARG_1, ret_float, f_str2float},
726 #endif 812 #endif
727 {"str2list", 1, 2, FEARG_1, &t_list_number, f_str2list}, 813 {"str2list", 1, 2, FEARG_1, ret_list_number, f_str2list},
728 {"str2nr", 1, 3, FEARG_1, &t_number, f_str2nr}, 814 {"str2nr", 1, 3, FEARG_1, ret_number, f_str2nr},
729 {"strcharpart", 2, 3, FEARG_1, &t_string, f_strcharpart}, 815 {"strcharpart", 2, 3, FEARG_1, ret_string, f_strcharpart},
730 {"strchars", 1, 2, FEARG_1, &t_number, f_strchars}, 816 {"strchars", 1, 2, FEARG_1, ret_number, f_strchars},
731 {"strdisplaywidth", 1, 2, FEARG_1, &t_number, f_strdisplaywidth}, 817 {"strdisplaywidth", 1, 2, FEARG_1, ret_number, f_strdisplaywidth},
732 #ifdef HAVE_STRFTIME 818 #ifdef HAVE_STRFTIME
733 {"strftime", 1, 2, FEARG_1, &t_string, f_strftime}, 819 {"strftime", 1, 2, FEARG_1, ret_string, f_strftime},
734 #endif 820 #endif
735 {"strgetchar", 2, 2, FEARG_1, &t_number, f_strgetchar}, 821 {"strgetchar", 2, 2, FEARG_1, ret_number, f_strgetchar},
736 {"stridx", 2, 3, FEARG_1, &t_number, f_stridx}, 822 {"stridx", 2, 3, FEARG_1, ret_number, f_stridx},
737 {"string", 1, 1, FEARG_1, &t_string, f_string}, 823 {"string", 1, 1, FEARG_1, ret_string, f_string},
738 {"strlen", 1, 1, FEARG_1, &t_number, f_strlen}, 824 {"strlen", 1, 1, FEARG_1, ret_number, f_strlen},
739 {"strpart", 2, 3, FEARG_1, &t_string, f_strpart}, 825 {"strpart", 2, 3, FEARG_1, ret_string, f_strpart},
740 #ifdef HAVE_STRPTIME 826 #ifdef HAVE_STRPTIME
741 {"strptime", 2, 2, FEARG_1, &t_number, f_strptime}, 827 {"strptime", 2, 2, FEARG_1, ret_number, f_strptime},
742 #endif 828 #endif
743 {"strridx", 2, 3, FEARG_1, &t_number, f_strridx}, 829 {"strridx", 2, 3, FEARG_1, ret_number, f_strridx},
744 {"strtrans", 1, 1, FEARG_1, &t_string, f_strtrans}, 830 {"strtrans", 1, 1, FEARG_1, ret_string, f_strtrans},
745 {"strwidth", 1, 1, FEARG_1, &t_number, f_strwidth}, 831 {"strwidth", 1, 1, FEARG_1, ret_number, f_strwidth},
746 {"submatch", 1, 2, FEARG_1, &t_string, f_submatch}, 832 {"submatch", 1, 2, FEARG_1, ret_string, f_submatch},
747 {"substitute", 4, 4, FEARG_1, &t_string, f_substitute}, 833 {"substitute", 4, 4, FEARG_1, ret_string, f_substitute},
748 {"swapinfo", 1, 1, FEARG_1, &t_dict_any, f_swapinfo}, 834 {"swapinfo", 1, 1, FEARG_1, ret_dict_any, f_swapinfo},
749 {"swapname", 1, 1, FEARG_1, &t_string, f_swapname}, 835 {"swapname", 1, 1, FEARG_1, ret_string, f_swapname},
750 {"synID", 3, 3, 0, &t_number, f_synID}, 836 {"synID", 3, 3, 0, ret_number, f_synID},
751 {"synIDattr", 2, 3, FEARG_1, &t_string, f_synIDattr}, 837 {"synIDattr", 2, 3, FEARG_1, ret_string, f_synIDattr},
752 {"synIDtrans", 1, 1, FEARG_1, &t_number, f_synIDtrans}, 838 {"synIDtrans", 1, 1, FEARG_1, ret_number, f_synIDtrans},
753 {"synconcealed", 2, 2, 0, &t_list_any, f_synconcealed}, 839 {"synconcealed", 2, 2, 0, ret_list_any, f_synconcealed},
754 {"synstack", 2, 2, 0, &t_list_number, f_synstack}, 840 {"synstack", 2, 2, 0, ret_list_number, f_synstack},
755 {"system", 1, 2, FEARG_1, &t_string, f_system}, 841 {"system", 1, 2, FEARG_1, ret_string, f_system},
756 {"systemlist", 1, 2, FEARG_1, &t_list_string, f_systemlist}, 842 {"systemlist", 1, 2, FEARG_1, ret_list_string, f_systemlist},
757 {"tabpagebuflist", 0, 1, FEARG_1, &t_list_number, f_tabpagebuflist}, 843 {"tabpagebuflist", 0, 1, FEARG_1, ret_list_number, f_tabpagebuflist},
758 {"tabpagenr", 0, 1, 0, &t_number, f_tabpagenr}, 844 {"tabpagenr", 0, 1, 0, ret_number, f_tabpagenr},
759 {"tabpagewinnr", 1, 2, FEARG_1, &t_number, f_tabpagewinnr}, 845 {"tabpagewinnr", 1, 2, FEARG_1, ret_number, f_tabpagewinnr},
760 {"tagfiles", 0, 0, 0, &t_list_string, f_tagfiles}, 846 {"tagfiles", 0, 0, 0, ret_list_string, f_tagfiles},
761 {"taglist", 1, 2, FEARG_1, &t_list_dict_any, f_taglist}, 847 {"taglist", 1, 2, FEARG_1, ret_list_dict_any, f_taglist},
762 #ifdef FEAT_FLOAT 848 #ifdef FEAT_FLOAT
763 {"tan", 1, 1, FEARG_1, &t_float, f_tan}, 849 {"tan", 1, 1, FEARG_1, ret_float, f_tan},
764 {"tanh", 1, 1, FEARG_1, &t_float, f_tanh}, 850 {"tanh", 1, 1, FEARG_1, ret_float, f_tanh},
765 #endif 851 #endif
766 {"tempname", 0, 0, 0, &t_string, f_tempname}, 852 {"tempname", 0, 0, 0, ret_string, f_tempname},
767 #ifdef FEAT_TERMINAL 853 #ifdef FEAT_TERMINAL
768 {"term_dumpdiff", 2, 3, FEARG_1, &t_number, f_term_dumpdiff}, 854 {"term_dumpdiff", 2, 3, FEARG_1, ret_number, f_term_dumpdiff},
769 {"term_dumpload", 1, 2, FEARG_1, &t_number, f_term_dumpload}, 855 {"term_dumpload", 1, 2, FEARG_1, ret_number, f_term_dumpload},
770 {"term_dumpwrite", 2, 3, FEARG_2, &t_void, f_term_dumpwrite}, 856 {"term_dumpwrite", 2, 3, FEARG_2, ret_void, f_term_dumpwrite},
771 {"term_getaltscreen", 1, 1, FEARG_1, &t_number, f_term_getaltscreen}, 857 {"term_getaltscreen", 1, 1, FEARG_1, ret_number, f_term_getaltscreen},
772 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) 858 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
773 {"term_getansicolors", 1, 1, FEARG_1, &t_list_string, f_term_getansicolors}, 859 {"term_getansicolors", 1, 1, FEARG_1, ret_list_string, f_term_getansicolors},
774 # endif 860 # endif
775 {"term_getattr", 2, 2, FEARG_1, &t_number, f_term_getattr}, 861 {"term_getattr", 2, 2, FEARG_1, ret_number, f_term_getattr},
776 {"term_getcursor", 1, 1, FEARG_1, &t_list_any, f_term_getcursor}, 862 {"term_getcursor", 1, 1, FEARG_1, ret_list_any, f_term_getcursor},
777 {"term_getjob", 1, 1, FEARG_1, &t_job, f_term_getjob}, 863 {"term_getjob", 1, 1, FEARG_1, ret_job, f_term_getjob},
778 {"term_getline", 2, 2, FEARG_1, &t_string, f_term_getline}, 864 {"term_getline", 2, 2, FEARG_1, ret_string, f_term_getline},
779 {"term_getscrolled", 1, 1, FEARG_1, &t_number, f_term_getscrolled}, 865 {"term_getscrolled", 1, 1, FEARG_1, ret_number, f_term_getscrolled},
780 {"term_getsize", 1, 1, FEARG_1, &t_list_number, f_term_getsize}, 866 {"term_getsize", 1, 1, FEARG_1, ret_list_number, f_term_getsize},
781 {"term_getstatus", 1, 1, FEARG_1, &t_string, f_term_getstatus}, 867 {"term_getstatus", 1, 1, FEARG_1, ret_string, f_term_getstatus},
782 {"term_gettitle", 1, 1, FEARG_1, &t_string, f_term_gettitle}, 868 {"term_gettitle", 1, 1, FEARG_1, ret_string, f_term_gettitle},
783 {"term_gettty", 1, 2, FEARG_1, &t_string, f_term_gettty}, 869 {"term_gettty", 1, 2, FEARG_1, ret_string, f_term_gettty},
784 {"term_list", 0, 0, 0, &t_list_number, f_term_list}, 870 {"term_list", 0, 0, 0, ret_list_number, f_term_list},
785 {"term_scrape", 2, 2, FEARG_1, &t_list_dict_any, f_term_scrape}, 871 {"term_scrape", 2, 2, FEARG_1, ret_list_dict_any, f_term_scrape},
786 {"term_sendkeys", 2, 2, FEARG_1, &t_void, f_term_sendkeys}, 872 {"term_sendkeys", 2, 2, FEARG_1, ret_void, f_term_sendkeys},
787 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) 873 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
788 {"term_setansicolors", 2, 2, FEARG_1, &t_void, f_term_setansicolors}, 874 {"term_setansicolors", 2, 2, FEARG_1, ret_void, f_term_setansicolors},
789 # endif 875 # endif
790 {"term_setapi", 2, 2, FEARG_1, &t_void, f_term_setapi}, 876 {"term_setapi", 2, 2, FEARG_1, ret_void, f_term_setapi},
791 {"term_setkill", 2, 2, FEARG_1, &t_void, f_term_setkill}, 877 {"term_setkill", 2, 2, FEARG_1, ret_void, f_term_setkill},
792 {"term_setrestore", 2, 2, FEARG_1, &t_void, f_term_setrestore}, 878 {"term_setrestore", 2, 2, FEARG_1, ret_void, f_term_setrestore},
793 {"term_setsize", 3, 3, FEARG_1, &t_void, f_term_setsize}, 879 {"term_setsize", 3, 3, FEARG_1, ret_void, f_term_setsize},
794 {"term_start", 1, 2, FEARG_1, &t_number, f_term_start}, 880 {"term_start", 1, 2, FEARG_1, ret_number, f_term_start},
795 {"term_wait", 1, 2, FEARG_1, &t_void, f_term_wait}, 881 {"term_wait", 1, 2, FEARG_1, ret_void, f_term_wait},
796 #endif 882 #endif
797 {"test_alloc_fail", 3, 3, FEARG_1, &t_void, f_test_alloc_fail}, 883 {"test_alloc_fail", 3, 3, FEARG_1, ret_void, f_test_alloc_fail},
798 {"test_autochdir", 0, 0, 0, &t_void, f_test_autochdir}, 884 {"test_autochdir", 0, 0, 0, ret_void, f_test_autochdir},
799 {"test_feedinput", 1, 1, FEARG_1, &t_void, f_test_feedinput}, 885 {"test_feedinput", 1, 1, FEARG_1, ret_void, f_test_feedinput},
800 {"test_garbagecollect_now", 0, 0, 0, &t_void, f_test_garbagecollect_now}, 886 {"test_garbagecollect_now", 0, 0, 0, ret_void, f_test_garbagecollect_now},
801 {"test_garbagecollect_soon", 0, 0, 0, &t_void, f_test_garbagecollect_soon}, 887 {"test_garbagecollect_soon", 0, 0, 0, ret_void, f_test_garbagecollect_soon},
802 {"test_getvalue", 1, 1, FEARG_1, &t_number, f_test_getvalue}, 888 {"test_getvalue", 1, 1, FEARG_1, ret_number, f_test_getvalue},
803 {"test_ignore_error", 1, 1, FEARG_1, &t_void, f_test_ignore_error}, 889 {"test_ignore_error", 1, 1, FEARG_1, ret_void, f_test_ignore_error},
804 {"test_null_blob", 0, 0, 0, &t_blob, f_test_null_blob}, 890 {"test_null_blob", 0, 0, 0, ret_blob, f_test_null_blob},
805 #ifdef FEAT_JOB_CHANNEL 891 #ifdef FEAT_JOB_CHANNEL
806 {"test_null_channel", 0, 0, 0, &t_channel, f_test_null_channel}, 892 {"test_null_channel", 0, 0, 0, ret_channel, f_test_null_channel},
807 #endif 893 #endif
808 {"test_null_dict", 0, 0, 0, &t_dict_any, f_test_null_dict}, 894 {"test_null_dict", 0, 0, 0, ret_dict_any, f_test_null_dict},
809 #ifdef FEAT_JOB_CHANNEL 895 #ifdef FEAT_JOB_CHANNEL
810 {"test_null_job", 0, 0, 0, &t_job, f_test_null_job}, 896 {"test_null_job", 0, 0, 0, ret_job, f_test_null_job},
811 #endif 897 #endif
812 {"test_null_list", 0, 0, 0, &t_list_any, f_test_null_list}, 898 {"test_null_list", 0, 0, 0, ret_list_any, f_test_null_list},
813 {"test_null_partial", 0, 0, 0, &t_partial_void, f_test_null_partial}, 899 {"test_null_partial", 0, 0, 0, ret_partial_void, f_test_null_partial},
814 {"test_null_string", 0, 0, 0, &t_string, f_test_null_string}, 900 {"test_null_string", 0, 0, 0, ret_string, f_test_null_string},
815 {"test_option_not_set", 1, 1, FEARG_1,&t_void, f_test_option_not_set}, 901 {"test_option_not_set", 1, 1, FEARG_1,ret_void, f_test_option_not_set},
816 {"test_override", 2, 2, FEARG_2, &t_void, f_test_override}, 902 {"test_override", 2, 2, FEARG_2, ret_void, f_test_override},
817 {"test_refcount", 1, 1, FEARG_1, &t_number, f_test_refcount}, 903 {"test_refcount", 1, 1, FEARG_1, ret_number, f_test_refcount},
818 #ifdef FEAT_GUI 904 #ifdef FEAT_GUI
819 {"test_scrollbar", 3, 3, FEARG_2, &t_void, f_test_scrollbar}, 905 {"test_scrollbar", 3, 3, FEARG_2, ret_void, f_test_scrollbar},
820 #endif 906 #endif
821 {"test_setmouse", 2, 2, 0, &t_void, f_test_setmouse}, 907 {"test_setmouse", 2, 2, 0, ret_void, f_test_setmouse},
822 {"test_settime", 1, 1, FEARG_1, &t_void, f_test_settime}, 908 {"test_settime", 1, 1, FEARG_1, ret_void, f_test_settime},
823 {"test_srand_seed", 0, 1, FEARG_1, &t_void, f_test_srand_seed}, 909 {"test_srand_seed", 0, 1, FEARG_1, ret_void, f_test_srand_seed},
824 {"test_unknown", 0, 0, 0, &t_any, f_test_unknown}, 910 {"test_unknown", 0, 0, 0, ret_any, f_test_unknown},
825 {"test_void", 0, 0, 0, &t_any, f_test_void}, 911 {"test_void", 0, 0, 0, ret_any, f_test_void},
826 #ifdef FEAT_TIMERS 912 #ifdef FEAT_TIMERS
827 {"timer_info", 0, 1, FEARG_1, &t_list_dict_any, f_timer_info}, 913 {"timer_info", 0, 1, FEARG_1, ret_list_dict_any, f_timer_info},
828 {"timer_pause", 2, 2, FEARG_1, &t_void, f_timer_pause}, 914 {"timer_pause", 2, 2, FEARG_1, ret_void, f_timer_pause},
829 {"timer_start", 2, 3, FEARG_1, &t_number, f_timer_start}, 915 {"timer_start", 2, 3, FEARG_1, ret_number, f_timer_start},
830 {"timer_stop", 1, 1, FEARG_1, &t_void, f_timer_stop}, 916 {"timer_stop", 1, 1, FEARG_1, ret_void, f_timer_stop},
831 {"timer_stopall", 0, 0, 0, &t_void, f_timer_stopall}, 917 {"timer_stopall", 0, 0, 0, ret_void, f_timer_stopall},
832 #endif 918 #endif
833 {"tolower", 1, 1, FEARG_1, &t_string, f_tolower}, 919 {"tolower", 1, 1, FEARG_1, ret_string, f_tolower},
834 {"toupper", 1, 1, FEARG_1, &t_string, f_toupper}, 920 {"toupper", 1, 1, FEARG_1, ret_string, f_toupper},
835 {"tr", 3, 3, FEARG_1, &t_string, f_tr}, 921 {"tr", 3, 3, FEARG_1, ret_string, f_tr},
836 {"trim", 1, 2, FEARG_1, &t_string, f_trim}, 922 {"trim", 1, 2, FEARG_1, ret_string, f_trim},
837 #ifdef FEAT_FLOAT 923 #ifdef FEAT_FLOAT
838 {"trunc", 1, 1, FEARG_1, &t_float, f_trunc}, 924 {"trunc", 1, 1, FEARG_1, ret_float, f_trunc},
839 #endif 925 #endif
840 {"type", 1, 1, FEARG_1, &t_number, f_type}, 926 {"type", 1, 1, FEARG_1, ret_number, f_type},
841 {"undofile", 1, 1, FEARG_1, &t_string, f_undofile}, 927 {"undofile", 1, 1, FEARG_1, ret_string, f_undofile},
842 {"undotree", 0, 0, 0, &t_dict_any, f_undotree}, 928 {"undotree", 0, 0, 0, ret_dict_any, f_undotree},
843 {"uniq", 1, 3, FEARG_1, &t_list_any, f_uniq}, 929 {"uniq", 1, 3, FEARG_1, ret_list_any, f_uniq},
844 {"values", 1, 1, FEARG_1, &t_list_any, f_values}, 930 {"values", 1, 1, FEARG_1, ret_list_any, f_values},
845 {"virtcol", 1, 1, FEARG_1, &t_number, f_virtcol}, 931 {"virtcol", 1, 1, FEARG_1, ret_number, f_virtcol},
846 {"visualmode", 0, 1, 0, &t_string, f_visualmode}, 932 {"visualmode", 0, 1, 0, ret_string, f_visualmode},
847 {"wildmenumode", 0, 0, 0, &t_number, f_wildmenumode}, 933 {"wildmenumode", 0, 0, 0, ret_number, f_wildmenumode},
848 {"win_execute", 2, 3, FEARG_2, &t_string, f_win_execute}, 934 {"win_execute", 2, 3, FEARG_2, ret_string, f_win_execute},
849 {"win_findbuf", 1, 1, FEARG_1, &t_list_number, f_win_findbuf}, 935 {"win_findbuf", 1, 1, FEARG_1, ret_list_number, f_win_findbuf},
850 {"win_getid", 0, 2, FEARG_1, &t_number, f_win_getid}, 936 {"win_getid", 0, 2, FEARG_1, ret_number, f_win_getid},
851 {"win_gettype", 0, 1, FEARG_1, &t_string, f_win_gettype}, 937 {"win_gettype", 0, 1, FEARG_1, ret_string, f_win_gettype},
852 {"win_gotoid", 1, 1, FEARG_1, &t_number, f_win_gotoid}, 938 {"win_gotoid", 1, 1, FEARG_1, ret_number, f_win_gotoid},
853 {"win_id2tabwin", 1, 1, FEARG_1, &t_list_number, f_win_id2tabwin}, 939 {"win_id2tabwin", 1, 1, FEARG_1, ret_list_number, f_win_id2tabwin},
854 {"win_id2win", 1, 1, FEARG_1, &t_number, f_win_id2win}, 940 {"win_id2win", 1, 1, FEARG_1, ret_number, f_win_id2win},
855 {"win_screenpos", 1, 1, FEARG_1, &t_list_number, f_win_screenpos}, 941 {"win_screenpos", 1, 1, FEARG_1, ret_list_number, f_win_screenpos},
856 {"win_splitmove", 2, 3, FEARG_1, &t_number, f_win_splitmove}, 942 {"win_splitmove", 2, 3, FEARG_1, ret_number, f_win_splitmove},
857 {"winbufnr", 1, 1, FEARG_1, &t_number, f_winbufnr}, 943 {"winbufnr", 1, 1, FEARG_1, ret_number, f_winbufnr},
858 {"wincol", 0, 0, 0, &t_number, f_wincol}, 944 {"wincol", 0, 0, 0, ret_number, f_wincol},
859 {"windowsversion", 0, 0, 0, &t_string, f_windowsversion}, 945 {"windowsversion", 0, 0, 0, ret_string, f_windowsversion},
860 {"winheight", 1, 1, FEARG_1, &t_number, f_winheight}, 946 {"winheight", 1, 1, FEARG_1, ret_number, f_winheight},
861 {"winlayout", 0, 1, FEARG_1, &t_list_any, f_winlayout}, 947 {"winlayout", 0, 1, FEARG_1, ret_list_any, f_winlayout},
862 {"winline", 0, 0, 0, &t_number, f_winline}, 948 {"winline", 0, 0, 0, ret_number, f_winline},
863 {"winnr", 0, 1, FEARG_1, &t_number, f_winnr}, 949 {"winnr", 0, 1, FEARG_1, ret_number, f_winnr},
864 {"winrestcmd", 0, 0, 0, &t_string, f_winrestcmd}, 950 {"winrestcmd", 0, 0, 0, ret_string, f_winrestcmd},
865 {"winrestview", 1, 1, FEARG_1, &t_void, f_winrestview}, 951 {"winrestview", 1, 1, FEARG_1, ret_void, f_winrestview},
866 {"winsaveview", 0, 0, 0, &t_dict_any, f_winsaveview}, 952 {"winsaveview", 0, 0, 0, ret_dict_any, f_winsaveview},
867 {"winwidth", 1, 1, FEARG_1, &t_number, f_winwidth}, 953 {"winwidth", 1, 1, FEARG_1, ret_number, f_winwidth},
868 {"wordcount", 0, 0, 0, &t_dict_number, f_wordcount}, 954 {"wordcount", 0, 0, 0, ret_dict_number, f_wordcount},
869 {"writefile", 2, 3, FEARG_1, &t_number, f_writefile}, 955 {"writefile", 2, 3, FEARG_1, ret_number, f_writefile},
870 {"xor", 2, 2, FEARG_1, &t_number, f_xor}, 956 {"xor", 2, 2, FEARG_1, ret_number, f_xor},
871 }; 957 };
872 958
873 /* 959 /*
874 * Function given to ExpandGeneric() to obtain the list of internal 960 * Function given to ExpandGeneric() to obtain the list of internal
875 * or user defined function names. 961 * or user defined function names.
961 { 1047 {
962 return global_functions[idx].f_name; 1048 return global_functions[idx].f_name;
963 } 1049 }
964 1050
965 type_T * 1051 type_T *
966 internal_func_ret_type(int idx, int argcount) 1052 internal_func_ret_type(int idx, int argcount, type_T **argtypes)
967 { 1053 {
968 funcentry_T *fe = &global_functions[idx]; 1054 return global_functions[idx].f_retfunc(argcount, argtypes);
969
970 if (fe->f_func == f_getline)
971 return argcount == 1 ? &t_string : &t_list_string;
972 return fe->f_rettype;
973 } 1055 }
974 1056
975 /* 1057 /*
976 * Check the argument count to use for internal function "idx". 1058 * Check the argument count to use for internal function "idx".
977 * Returns OK or FAIL; 1059 * Returns OK or FAIL;
2716 f_funcref(typval_T *argvars, typval_T *rettv) 2798 f_funcref(typval_T *argvars, typval_T *rettv)
2717 { 2799 {
2718 common_function(argvars, rettv, TRUE); 2800 common_function(argvars, rettv, TRUE);
2719 } 2801 }
2720 2802
2803 static type_T *
2804 ret_f_function(int argcount, type_T **argtypes UNUSED)
2805 {
2806 if (argcount == 1 && argtypes[0]->tt_type == VAR_STRING)
2807 return &t_func_any;
2808 return &t_partial_void;
2809 }
2810
2721 /* 2811 /*
2722 * "function()" function 2812 * "function()" function
2723 */ 2813 */
2724 static void 2814 static void
2725 f_function(typval_T *argvars, typval_T *rettv) 2815 f_function(typval_T *argvars, typval_T *rettv)