comparison src/evalfunc.c @ 19805:2dc5e6ddeb4c v8.2.0459

patch 8.2.0459: cannot check if a function name is correct Commit: https://github.com/vim/vim/commit/15c476023f3c5fb32eb1936c5eb5f0f5f413f3c7 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Mar 26 22:16:48 2020 +0100 patch 8.2.0459: cannot check if a function name is correct Problem: Cannot check if a function name is correct. Solution: Add "?funcname" to exists().
author Bram Moolenaar <Bram@vim.org>
date Thu, 26 Mar 2020 22:30:03 +0100
parents 810eee1b42e3
children 13f34e46c269
comparison
equal deleted inserted replaced
19804:503120273ab7 19805:2dc5e6ddeb4c
372 #define FEARG_2 2 // base is the second argument 372 #define FEARG_2 2 // base is the second argument
373 #define FEARG_3 3 // base is the third argument 373 #define FEARG_3 3 // base is the third argument
374 #define FEARG_4 4 // base is the fourth argument 374 #define FEARG_4 4 // base is the fourth argument
375 #define FEARG_LAST 9 // base is the last argument 375 #define FEARG_LAST 9 // base is the last argument
376 376
377 #ifdef FEAT_FLOAT
378 # define FLOAT_FUNC(name) name
379 #else
380 # define FLOAT_FUNC(name) NULL
381 #endif
382 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
383 # define MATH_FUNC(name) name
384 #else
385 # define MATH_FUNC(name) NULL
386 #endif
387 #ifdef FEAT_TIMERS
388 # define TIMER_FUNC(name) name
389 #else
390 # define TIMER_FUNC(name) NULL
391 #endif
392 #ifdef FEAT_JOB_CHANNEL
393 # define JOB_FUNC(name) name
394 #else
395 # define JOB_FUNC(name) NULL
396 #endif
397 #ifdef FEAT_PROP_POPUP
398 # define PROP_FUNC(name) name
399 #else
400 # define PROP_FUNC(name) NULL
401 #endif
402 #ifdef FEAT_SIGNS
403 # define SIGN_FUNC(name) name
404 #else
405 # define SIGN_FUNC(name) NULL
406 #endif
407 #ifdef FEAT_SOUND
408 # define SOUND_FUNC(name) name
409 #else
410 # define SOUND_FUNC(name) NULL
411 #endif
412 #ifdef FEAT_TERMINAL
413 # define TERM_FUNC(name) name
414 #else
415 # define TERM_FUNC(name) NULL
416 #endif
417
377 static funcentry_T global_functions[] = 418 static funcentry_T global_functions[] =
378 { 419 {
379 #ifdef FEAT_FLOAT 420 {"abs", 1, 1, FEARG_1, ret_any, FLOAT_FUNC(f_abs)},
380 {"abs", 1, 1, FEARG_1, ret_any, f_abs}, 421 {"acos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_acos)},
381 {"acos", 1, 1, FEARG_1, ret_float, f_acos}, // WJMc
382 #endif
383 {"add", 2, 2, FEARG_1, ret_any, f_add}, 422 {"add", 2, 2, FEARG_1, ret_any, f_add},
384 {"and", 2, 2, FEARG_1, ret_number, f_and}, 423 {"and", 2, 2, FEARG_1, ret_number, f_and},
385 {"append", 2, 2, FEARG_LAST, ret_number, f_append}, 424 {"append", 2, 2, FEARG_LAST, ret_number, f_append},
386 {"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline}, 425 {"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline},
387 {"argc", 0, 1, 0, ret_number, f_argc}, 426 {"argc", 0, 1, 0, ret_number, f_argc},
388 {"argidx", 0, 0, 0, ret_number, f_argidx}, 427 {"argidx", 0, 0, 0, ret_number, f_argidx},
389 {"arglistid", 0, 2, 0, ret_number, f_arglistid}, 428 {"arglistid", 0, 2, 0, ret_number, f_arglistid},
390 {"argv", 0, 2, 0, ret_any, f_argv}, 429 {"argv", 0, 2, 0, ret_any, f_argv},
391 #ifdef FEAT_FLOAT 430 {"asin", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_asin)},
392 {"asin", 1, 1, FEARG_1, ret_float, f_asin}, // WJMc
393 #endif
394 {"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps}, 431 {"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps},
395 {"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal}, 432 {"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal},
396 {"assert_equalfile", 2, 2, FEARG_1, ret_number, f_assert_equalfile}, 433 {"assert_equalfile", 2, 2, FEARG_1, ret_number, f_assert_equalfile},
397 {"assert_exception", 1, 2, 0, ret_number, f_assert_exception}, 434 {"assert_exception", 1, 2, 0, ret_number, f_assert_exception},
398 {"assert_fails", 1, 3, FEARG_1, ret_number, f_assert_fails}, 435 {"assert_fails", 1, 3, FEARG_1, ret_number, f_assert_fails},
401 {"assert_match", 2, 3, FEARG_2, ret_number, f_assert_match}, 438 {"assert_match", 2, 3, FEARG_2, ret_number, f_assert_match},
402 {"assert_notequal", 2, 3, FEARG_2, ret_number, f_assert_notequal}, 439 {"assert_notequal", 2, 3, FEARG_2, ret_number, f_assert_notequal},
403 {"assert_notmatch", 2, 3, FEARG_2, ret_number, f_assert_notmatch}, 440 {"assert_notmatch", 2, 3, FEARG_2, ret_number, f_assert_notmatch},
404 {"assert_report", 1, 1, FEARG_1, ret_number, f_assert_report}, 441 {"assert_report", 1, 1, FEARG_1, ret_number, f_assert_report},
405 {"assert_true", 1, 2, FEARG_1, ret_number, f_assert_true}, 442 {"assert_true", 1, 2, FEARG_1, ret_number, f_assert_true},
406 #ifdef FEAT_FLOAT 443 {"atan", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_atan)},
407 {"atan", 1, 1, FEARG_1, ret_float, f_atan}, 444 {"atan2", 2, 2, FEARG_1, ret_float, FLOAT_FUNC(f_atan2)},
408 {"atan2", 2, 2, FEARG_1, ret_float, f_atan2}, 445 {"balloon_gettext", 0, 0, 0, ret_string,
409 #endif
410 #ifdef FEAT_BEVAL 446 #ifdef FEAT_BEVAL
411 {"balloon_gettext", 0, 0, 0, ret_string, f_balloon_gettext}, 447 f_balloon_gettext
412 {"balloon_show", 1, 1, FEARG_1, ret_void, f_balloon_show}, 448 #else
413 # if defined(FEAT_BEVAL_TERM) 449 NULL
414 {"balloon_split", 1, 1, FEARG_1, ret_list_string, f_balloon_split}, 450 #endif
415 # endif 451 },
416 #endif 452 {"balloon_show", 1, 1, FEARG_1, ret_void,
453 #ifdef FEAT_BEVAL
454 f_balloon_show
455 #else
456 NULL
457 #endif
458 },
459 {"balloon_split", 1, 1, FEARG_1, ret_list_string,
460 #if defined(FEAT_BEVAL_TERM)
461 f_balloon_split
462 #else
463 NULL
464 #endif
465 },
417 {"browse", 4, 4, 0, ret_string, f_browse}, 466 {"browse", 4, 4, 0, ret_string, f_browse},
418 {"browsedir", 2, 2, 0, ret_string, f_browsedir}, 467 {"browsedir", 2, 2, 0, ret_string, f_browsedir},
419 {"bufadd", 1, 1, FEARG_1, ret_number, f_bufadd}, 468 {"bufadd", 1, 1, FEARG_1, ret_number, f_bufadd},
420 {"bufexists", 1, 1, FEARG_1, ret_number, f_bufexists}, 469 {"bufexists", 1, 1, FEARG_1, ret_number, f_bufexists},
421 {"buffer_exists", 1, 1, FEARG_1, ret_number, f_bufexists}, // obsolete 470 {"buffer_exists", 1, 1, FEARG_1, ret_number, f_bufexists}, // obsolete
430 {"bufwinnr", 1, 1, FEARG_1, ret_number, f_bufwinnr}, 479 {"bufwinnr", 1, 1, FEARG_1, ret_number, f_bufwinnr},
431 {"byte2line", 1, 1, FEARG_1, ret_number, f_byte2line}, 480 {"byte2line", 1, 1, FEARG_1, ret_number, f_byte2line},
432 {"byteidx", 2, 2, FEARG_1, ret_number, f_byteidx}, 481 {"byteidx", 2, 2, FEARG_1, ret_number, f_byteidx},
433 {"byteidxcomp", 2, 2, FEARG_1, ret_number, f_byteidxcomp}, 482 {"byteidxcomp", 2, 2, FEARG_1, ret_number, f_byteidxcomp},
434 {"call", 2, 3, FEARG_1, ret_any, f_call}, 483 {"call", 2, 3, FEARG_1, ret_any, f_call},
435 #ifdef FEAT_FLOAT 484 {"ceil", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_ceil)},
436 {"ceil", 1, 1, FEARG_1, ret_float, f_ceil}, 485 {"ch_canread", 1, 1, FEARG_1, ret_number, JOB_FUNC(f_ch_canread)},
437 #endif 486 {"ch_close", 1, 1, FEARG_1, ret_void, JOB_FUNC(f_ch_close)},
438 #ifdef FEAT_JOB_CHANNEL 487 {"ch_close_in", 1, 1, FEARG_1, ret_void, JOB_FUNC(f_ch_close_in)},
439 {"ch_canread", 1, 1, FEARG_1, ret_number, f_ch_canread}, 488 {"ch_evalexpr", 2, 3, FEARG_1, ret_any, JOB_FUNC(f_ch_evalexpr)},
440 {"ch_close", 1, 1, FEARG_1, ret_void, f_ch_close}, 489 {"ch_evalraw", 2, 3, FEARG_1, ret_any, JOB_FUNC(f_ch_evalraw)},
441 {"ch_close_in", 1, 1, FEARG_1, ret_void, f_ch_close_in}, 490 {"ch_getbufnr", 2, 2, FEARG_1, ret_number, JOB_FUNC(f_ch_getbufnr)},
442 {"ch_evalexpr", 2, 3, FEARG_1, ret_any, f_ch_evalexpr}, 491 {"ch_getjob", 1, 1, FEARG_1, ret_job, JOB_FUNC(f_ch_getjob)},
443 {"ch_evalraw", 2, 3, FEARG_1, ret_any, f_ch_evalraw}, 492 {"ch_info", 1, 1, FEARG_1, ret_dict_any, JOB_FUNC(f_ch_info)},
444 {"ch_getbufnr", 2, 2, FEARG_1, ret_number, f_ch_getbufnr}, 493 {"ch_log", 1, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_log)},
445 {"ch_getjob", 1, 1, FEARG_1, ret_job, f_ch_getjob}, 494 {"ch_logfile", 1, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_logfile)},
446 {"ch_info", 1, 1, FEARG_1, ret_dict_any, f_ch_info}, 495 {"ch_open", 1, 2, FEARG_1, ret_channel, JOB_FUNC(f_ch_open)},
447 {"ch_log", 1, 2, FEARG_1, ret_void, f_ch_log}, 496 {"ch_read", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_read)},
448 {"ch_logfile", 1, 2, FEARG_1, ret_void, f_ch_logfile}, 497 {"ch_readblob", 1, 2, FEARG_1, ret_blob, JOB_FUNC(f_ch_readblob)},
449 {"ch_open", 1, 2, FEARG_1, ret_channel, f_ch_open}, 498 {"ch_readraw", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_readraw)},
450 {"ch_read", 1, 2, FEARG_1, ret_string, f_ch_read}, 499 {"ch_sendexpr", 2, 3, FEARG_1, ret_void, JOB_FUNC(f_ch_sendexpr)},
451 {"ch_readblob", 1, 2, FEARG_1, ret_blob, f_ch_readblob}, 500 {"ch_sendraw", 2, 3, FEARG_1, ret_void, JOB_FUNC(f_ch_sendraw)},
452 {"ch_readraw", 1, 2, FEARG_1, ret_string, f_ch_readraw}, 501 {"ch_setoptions", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_ch_setoptions)},
453 {"ch_sendexpr", 2, 3, FEARG_1, ret_void, f_ch_sendexpr}, 502 {"ch_status", 1, 2, FEARG_1, ret_string, JOB_FUNC(f_ch_status)},
454 {"ch_sendraw", 2, 3, FEARG_1, ret_void, f_ch_sendraw},
455 {"ch_setoptions", 2, 2, FEARG_1, ret_void, f_ch_setoptions},
456 {"ch_status", 1, 2, FEARG_1, ret_string, f_ch_status},
457 #endif
458 {"changenr", 0, 0, 0, ret_number, f_changenr}, 503 {"changenr", 0, 0, 0, ret_number, f_changenr},
459 {"char2nr", 1, 2, FEARG_1, ret_number, f_char2nr}, 504 {"char2nr", 1, 2, FEARG_1, ret_number, f_char2nr},
460 {"chdir", 1, 1, FEARG_1, ret_string, f_chdir}, 505 {"chdir", 1, 1, FEARG_1, ret_string, f_chdir},
461 {"cindent", 1, 1, FEARG_1, ret_number, f_cindent}, 506 {"cindent", 1, 1, FEARG_1, ret_number, f_cindent},
462 {"clearmatches", 0, 1, FEARG_1, ret_void, f_clearmatches}, 507 {"clearmatches", 0, 1, FEARG_1, ret_void, f_clearmatches},
465 {"complete_add", 1, 1, FEARG_1, ret_number, f_complete_add}, 510 {"complete_add", 1, 1, FEARG_1, ret_number, f_complete_add},
466 {"complete_check", 0, 0, 0, ret_number, f_complete_check}, 511 {"complete_check", 0, 0, 0, ret_number, f_complete_check},
467 {"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info}, 512 {"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info},
468 {"confirm", 1, 4, FEARG_1, ret_number, f_confirm}, 513 {"confirm", 1, 4, FEARG_1, ret_number, f_confirm},
469 {"copy", 1, 1, FEARG_1, ret_any, f_copy}, 514 {"copy", 1, 1, FEARG_1, ret_any, f_copy},
470 #ifdef FEAT_FLOAT 515 {"cos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cos)},
471 {"cos", 1, 1, FEARG_1, ret_float, f_cos}, 516 {"cosh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cosh)},
472 {"cosh", 1, 1, FEARG_1, ret_float, f_cosh},
473 #endif
474 {"count", 2, 4, FEARG_1, ret_number, f_count}, 517 {"count", 2, 4, FEARG_1, ret_number, f_count},
475 {"cscope_connection",0,3, 0, ret_number, f_cscope_connection}, 518 {"cscope_connection",0,3, 0, ret_number, f_cscope_connection},
476 {"cursor", 1, 3, FEARG_1, ret_number, f_cursor}, 519 {"cursor", 1, 3, FEARG_1, ret_number, f_cursor},
520 {"debugbreak", 1, 1, FEARG_1, ret_number,
477 #ifdef MSWIN 521 #ifdef MSWIN
478 {"debugbreak", 1, 1, FEARG_1, ret_number, f_debugbreak}, 522 f_debugbreak
479 #endif 523 #else
524 NULL
525 #endif
526 },
480 {"deepcopy", 1, 2, FEARG_1, ret_any, f_deepcopy}, 527 {"deepcopy", 1, 2, FEARG_1, ret_any, f_deepcopy},
481 {"delete", 1, 2, FEARG_1, ret_number, f_delete}, 528 {"delete", 1, 2, FEARG_1, ret_number, f_delete},
482 {"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline}, 529 {"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline},
483 {"did_filetype", 0, 0, 0, ret_number, f_did_filetype}, 530 {"did_filetype", 0, 0, 0, ret_number, f_did_filetype},
484 {"diff_filler", 1, 1, FEARG_1, ret_number, f_diff_filler}, 531 {"diff_filler", 1, 1, FEARG_1, ret_number, f_diff_filler},
491 {"eventhandler", 0, 0, 0, ret_number, f_eventhandler}, 538 {"eventhandler", 0, 0, 0, ret_number, f_eventhandler},
492 {"executable", 1, 1, FEARG_1, ret_number, f_executable}, 539 {"executable", 1, 1, FEARG_1, ret_number, f_executable},
493 {"execute", 1, 2, FEARG_1, ret_string, f_execute}, 540 {"execute", 1, 2, FEARG_1, ret_string, f_execute},
494 {"exepath", 1, 1, FEARG_1, ret_string, f_exepath}, 541 {"exepath", 1, 1, FEARG_1, ret_string, f_exepath},
495 {"exists", 1, 1, FEARG_1, ret_number, f_exists}, 542 {"exists", 1, 1, FEARG_1, ret_number, f_exists},
496 #ifdef FEAT_FLOAT 543 {"exp", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_exp)},
497 {"exp", 1, 1, FEARG_1, ret_float, f_exp},
498 #endif
499 {"expand", 1, 3, FEARG_1, ret_any, f_expand}, 544 {"expand", 1, 3, FEARG_1, ret_any, f_expand},
500 {"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd}, 545 {"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd},
501 {"extend", 2, 3, FEARG_1, ret_any, f_extend}, 546 {"extend", 2, 3, FEARG_1, ret_any, f_extend},
502 {"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys}, 547 {"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys},
503 {"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete 548 {"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete
504 {"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable}, 549 {"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable},
505 {"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable}, 550 {"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable},
506 {"filter", 2, 2, FEARG_1, ret_any, f_filter}, 551 {"filter", 2, 2, FEARG_1, ret_any, f_filter},
507 {"finddir", 1, 3, FEARG_1, ret_string, f_finddir}, 552 {"finddir", 1, 3, FEARG_1, ret_string, f_finddir},
508 {"findfile", 1, 3, FEARG_1, ret_string, f_findfile}, 553 {"findfile", 1, 3, FEARG_1, ret_string, f_findfile},
509 #ifdef FEAT_FLOAT 554 {"float2nr", 1, 1, FEARG_1, ret_number, FLOAT_FUNC(f_float2nr)},
510 {"float2nr", 1, 1, FEARG_1, ret_number, f_float2nr}, 555 {"floor", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_floor)},
511 {"floor", 1, 1, FEARG_1, ret_float, f_floor}, 556 {"fmod", 2, 2, FEARG_1, ret_float, FLOAT_FUNC(f_fmod)},
512 {"fmod", 2, 2, FEARG_1, ret_float, f_fmod},
513 #endif
514 {"fnameescape", 1, 1, FEARG_1, ret_string, f_fnameescape}, 557 {"fnameescape", 1, 1, FEARG_1, ret_string, f_fnameescape},
515 {"fnamemodify", 2, 2, FEARG_1, ret_string, f_fnamemodify}, 558 {"fnamemodify", 2, 2, FEARG_1, ret_string, f_fnamemodify},
516 {"foldclosed", 1, 1, FEARG_1, ret_number, f_foldclosed}, 559 {"foldclosed", 1, 1, FEARG_1, ret_number, f_foldclosed},
517 {"foldclosedend", 1, 1, FEARG_1, ret_number, f_foldclosedend}, 560 {"foldclosedend", 1, 1, FEARG_1, ret_number, f_foldclosedend},
518 {"foldlevel", 1, 1, FEARG_1, ret_number, f_foldlevel}, 561 {"foldlevel", 1, 1, FEARG_1, ret_number, f_foldlevel},
590 {"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret}, 633 {"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret},
591 {"insert", 2, 3, FEARG_1, ret_any, f_insert}, 634 {"insert", 2, 3, FEARG_1, ret_any, f_insert},
592 {"interrupt", 0, 0, 0, ret_void, f_interrupt}, 635 {"interrupt", 0, 0, 0, ret_void, f_interrupt},
593 {"invert", 1, 1, FEARG_1, ret_number, f_invert}, 636 {"invert", 1, 1, FEARG_1, ret_number, f_invert},
594 {"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory}, 637 {"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory},
595 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) 638 {"isinf", 1, 1, FEARG_1, ret_number, MATH_FUNC(f_isinf)},
596 {"isinf", 1, 1, FEARG_1, ret_number, f_isinf},
597 #endif
598 {"islocked", 1, 1, FEARG_1, ret_number, f_islocked}, 639 {"islocked", 1, 1, FEARG_1, ret_number, f_islocked},
599 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) 640 {"isnan", 1, 1, FEARG_1, ret_number, MATH_FUNC(f_isnan)},
600 {"isnan", 1, 1, FEARG_1, ret_number, f_isnan},
601 #endif
602 {"items", 1, 1, FEARG_1, ret_list_any, f_items}, 641 {"items", 1, 1, FEARG_1, ret_list_any, f_items},
603 #ifdef FEAT_JOB_CHANNEL 642 {"job_getchannel", 1, 1, FEARG_1, ret_channel, JOB_FUNC(f_job_getchannel)},
604 {"job_getchannel", 1, 1, FEARG_1, ret_channel, f_job_getchannel}, 643 {"job_info", 0, 1, FEARG_1, ret_dict_any, JOB_FUNC(f_job_info)},
605 {"job_info", 0, 1, FEARG_1, ret_dict_any, f_job_info}, 644 {"job_setoptions", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_job_setoptions)},
606 {"job_setoptions", 2, 2, FEARG_1, ret_void, f_job_setoptions}, 645 {"job_start", 1, 2, FEARG_1, ret_job, JOB_FUNC(f_job_start)},
607 {"job_start", 1, 2, FEARG_1, ret_job, f_job_start}, 646 {"job_status", 1, 1, FEARG_1, ret_string, JOB_FUNC(f_job_status)},
608 {"job_status", 1, 1, FEARG_1, ret_string, f_job_status}, 647 {"job_stop", 1, 2, FEARG_1, ret_number, JOB_FUNC(f_job_stop)},
609 {"job_stop", 1, 2, FEARG_1, ret_number, f_job_stop},
610 #endif
611 {"join", 1, 2, FEARG_1, ret_string, f_join}, 648 {"join", 1, 2, FEARG_1, ret_string, f_join},
612 {"js_decode", 1, 1, FEARG_1, ret_any, f_js_decode}, 649 {"js_decode", 1, 1, FEARG_1, ret_any, f_js_decode},
613 {"js_encode", 1, 1, FEARG_1, ret_string, f_js_encode}, 650 {"js_encode", 1, 1, FEARG_1, ret_string, f_js_encode},
614 {"json_decode", 1, 1, FEARG_1, ret_any, f_json_decode}, 651 {"json_decode", 1, 1, FEARG_1, ret_any, f_json_decode},
615 {"json_encode", 1, 1, FEARG_1, ret_string, f_json_encode}, 652 {"json_encode", 1, 1, FEARG_1, ret_string, f_json_encode},
624 {"list2str", 1, 2, FEARG_1, ret_string, f_list2str}, 661 {"list2str", 1, 2, FEARG_1, ret_string, f_list2str},
625 {"listener_add", 1, 2, FEARG_2, ret_number, f_listener_add}, 662 {"listener_add", 1, 2, FEARG_2, ret_number, f_listener_add},
626 {"listener_flush", 0, 1, FEARG_1, ret_void, f_listener_flush}, 663 {"listener_flush", 0, 1, FEARG_1, ret_void, f_listener_flush},
627 {"listener_remove", 1, 1, FEARG_1, ret_number, f_listener_remove}, 664 {"listener_remove", 1, 1, FEARG_1, ret_number, f_listener_remove},
628 {"localtime", 0, 0, 0, ret_number, f_localtime}, 665 {"localtime", 0, 0, 0, ret_number, f_localtime},
629 #ifdef FEAT_FLOAT 666 {"log", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_log)},
630 {"log", 1, 1, FEARG_1, ret_float, f_log}, 667 {"log10", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_log10)},
631 {"log10", 1, 1, FEARG_1, ret_float, f_log10}, 668 {"luaeval", 1, 2, FEARG_1, ret_any,
632 #endif
633 #ifdef FEAT_LUA 669 #ifdef FEAT_LUA
634 {"luaeval", 1, 2, FEARG_1, ret_any, f_luaeval}, 670 f_luaeval
635 #endif 671 #else
672 NULL
673 #endif
674 },
636 {"map", 2, 2, FEARG_1, ret_any, f_map}, 675 {"map", 2, 2, FEARG_1, ret_any, f_map},
637 {"maparg", 1, 4, FEARG_1, ret_string, f_maparg}, 676 {"maparg", 1, 4, FEARG_1, ret_string, f_maparg},
638 {"mapcheck", 1, 3, FEARG_1, ret_string, f_mapcheck}, 677 {"mapcheck", 1, 3, FEARG_1, ret_string, f_mapcheck},
639 {"match", 2, 4, FEARG_1, ret_any, f_match}, 678 {"match", 2, 4, FEARG_1, ret_any, f_match},
640 {"matchadd", 2, 5, FEARG_1, ret_number, f_matchadd}, 679 {"matchadd", 2, 5, FEARG_1, ret_number, f_matchadd},
644 {"matchend", 2, 4, FEARG_1, ret_number, f_matchend}, 683 {"matchend", 2, 4, FEARG_1, ret_number, f_matchend},
645 {"matchlist", 2, 4, FEARG_1, ret_list_string, f_matchlist}, 684 {"matchlist", 2, 4, FEARG_1, ret_list_string, f_matchlist},
646 {"matchstr", 2, 4, FEARG_1, ret_string, f_matchstr}, 685 {"matchstr", 2, 4, FEARG_1, ret_string, f_matchstr},
647 {"matchstrpos", 2, 4, FEARG_1, ret_list_any, f_matchstrpos}, 686 {"matchstrpos", 2, 4, FEARG_1, ret_list_any, f_matchstrpos},
648 {"max", 1, 1, FEARG_1, ret_any, f_max}, 687 {"max", 1, 1, FEARG_1, ret_any, f_max},
688 {"menu_info", 1, 2, FEARG_1, ret_dict_any,
649 #ifdef FEAT_MENU 689 #ifdef FEAT_MENU
650 {"menu_info", 1, 2, FEARG_1, ret_dict_any, f_menu_info}, 690 f_menu_info
651 #endif 691 #else
692 NULL
693 #endif
694 },
652 {"min", 1, 1, FEARG_1, ret_any, f_min}, 695 {"min", 1, 1, FEARG_1, ret_any, f_min},
653 {"mkdir", 1, 3, FEARG_1, ret_number, f_mkdir}, 696 {"mkdir", 1, 3, FEARG_1, ret_number, f_mkdir},
654 {"mode", 0, 1, FEARG_1, ret_string, f_mode}, 697 {"mode", 0, 1, FEARG_1, ret_string, f_mode},
698 {"mzeval", 1, 1, FEARG_1, ret_any,
655 #ifdef FEAT_MZSCHEME 699 #ifdef FEAT_MZSCHEME
656 {"mzeval", 1, 1, FEARG_1, ret_any, f_mzeval}, 700 f_mzeval
657 #endif 701 #else
702 NULL
703 #endif
704 },
658 {"nextnonblank", 1, 1, FEARG_1, ret_number, f_nextnonblank}, 705 {"nextnonblank", 1, 1, FEARG_1, ret_number, f_nextnonblank},
659 {"nr2char", 1, 2, FEARG_1, ret_string, f_nr2char}, 706 {"nr2char", 1, 2, FEARG_1, ret_string, f_nr2char},
660 {"or", 2, 2, FEARG_1, ret_number, f_or}, 707 {"or", 2, 2, FEARG_1, ret_number, f_or},
661 {"pathshorten", 1, 1, FEARG_1, ret_string, f_pathshorten}, 708 {"pathshorten", 1, 1, FEARG_1, ret_string, f_pathshorten},
709 {"perleval", 1, 1, FEARG_1, ret_any,
662 #ifdef FEAT_PERL 710 #ifdef FEAT_PERL
663 {"perleval", 1, 1, FEARG_1, ret_any, f_perleval}, 711 f_perleval
664 #endif 712 #else
665 #ifdef FEAT_PROP_POPUP 713 NULL
666 {"popup_atcursor", 2, 2, FEARG_1, ret_number, f_popup_atcursor}, 714 #endif
667 {"popup_beval", 2, 2, FEARG_1, ret_number, f_popup_beval}, 715 },
668 {"popup_clear", 0, 0, 0, ret_void, f_popup_clear}, 716 {"popup_atcursor", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_atcursor)},
669 {"popup_close", 1, 2, FEARG_1, ret_void, f_popup_close}, 717 {"popup_beval", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_beval)},
670 {"popup_create", 2, 2, FEARG_1, ret_number, f_popup_create}, 718 {"popup_clear", 0, 0, 0, ret_void, PROP_FUNC(f_popup_clear)},
671 {"popup_dialog", 2, 2, FEARG_1, ret_number, f_popup_dialog}, 719 {"popup_close", 1, 2, FEARG_1, ret_void, PROP_FUNC(f_popup_close)},
672 {"popup_filter_menu", 2, 2, 0, ret_number, f_popup_filter_menu}, 720 {"popup_create", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_create)},
673 {"popup_filter_yesno", 2, 2, 0, ret_number, f_popup_filter_yesno}, 721 {"popup_dialog", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_dialog)},
674 {"popup_findinfo", 0, 0, 0, ret_number, f_popup_findinfo}, 722 {"popup_filter_menu", 2, 2, 0, ret_number, PROP_FUNC(f_popup_filter_menu)},
675 {"popup_findpreview", 0, 0, 0, ret_number, f_popup_findpreview}, 723 {"popup_filter_yesno", 2, 2, 0, ret_number, PROP_FUNC(f_popup_filter_yesno)},
676 {"popup_getoptions", 1, 1, FEARG_1, ret_dict_any, f_popup_getoptions}, 724 {"popup_findinfo", 0, 0, 0, ret_number, PROP_FUNC(f_popup_findinfo)},
677 {"popup_getpos", 1, 1, FEARG_1, ret_dict_any, f_popup_getpos}, 725 {"popup_findpreview", 0, 0, 0, ret_number, PROP_FUNC(f_popup_findpreview)},
678 {"popup_hide", 1, 1, FEARG_1, ret_void, f_popup_hide}, 726 {"popup_getoptions", 1, 1, FEARG_1, ret_dict_any, PROP_FUNC(f_popup_getoptions)},
679 {"popup_locate", 2, 2, 0, ret_number, f_popup_locate}, 727 {"popup_getpos", 1, 1, FEARG_1, ret_dict_any, PROP_FUNC(f_popup_getpos)},
680 {"popup_menu", 2, 2, FEARG_1, ret_number, f_popup_menu}, 728 {"popup_hide", 1, 1, FEARG_1, ret_void, PROP_FUNC(f_popup_hide)},
681 {"popup_move", 2, 2, FEARG_1, ret_void, f_popup_move}, 729 {"popup_locate", 2, 2, 0, ret_number, PROP_FUNC(f_popup_locate)},
682 {"popup_notification", 2, 2, FEARG_1, ret_number, f_popup_notification}, 730 {"popup_menu", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_menu)},
683 {"popup_setoptions", 2, 2, FEARG_1, ret_void, f_popup_setoptions}, 731 {"popup_move", 2, 2, FEARG_1, ret_void, PROP_FUNC(f_popup_move)},
684 {"popup_settext", 2, 2, FEARG_1, ret_void, f_popup_settext}, 732 {"popup_notification", 2, 2, FEARG_1, ret_number, PROP_FUNC(f_popup_notification)},
685 {"popup_show", 1, 1, FEARG_1, ret_void, f_popup_show}, 733 {"popup_setoptions", 2, 2, FEARG_1, ret_void, PROP_FUNC(f_popup_setoptions)},
686 #endif 734 {"popup_settext", 2, 2, FEARG_1, ret_void, PROP_FUNC(f_popup_settext)},
687 #ifdef FEAT_FLOAT 735 {"popup_show", 1, 1, FEARG_1, ret_void, PROP_FUNC(f_popup_show)},
688 {"pow", 2, 2, FEARG_1, ret_float, f_pow}, 736 {"pow", 2, 2, FEARG_1, ret_float, FLOAT_FUNC(f_pow)},
689 #endif
690 {"prevnonblank", 1, 1, FEARG_1, ret_number, f_prevnonblank}, 737 {"prevnonblank", 1, 1, FEARG_1, ret_number, f_prevnonblank},
691 {"printf", 1, 19, FEARG_2, ret_string, f_printf}, 738 {"printf", 1, 19, FEARG_2, ret_string, f_printf},
692 #ifdef FEAT_JOB_CHANNEL 739 {"prompt_setcallback", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_prompt_setcallback)},
693 {"prompt_setcallback", 2, 2, FEARG_1, ret_void, f_prompt_setcallback}, 740 {"prompt_setinterrupt", 2, 2, FEARG_1,ret_void, JOB_FUNC(f_prompt_setinterrupt)},
694 {"prompt_setinterrupt", 2, 2, FEARG_1,ret_void, f_prompt_setinterrupt}, 741 {"prompt_setprompt", 2, 2, FEARG_1, ret_void, JOB_FUNC(f_prompt_setprompt)},
695 {"prompt_setprompt", 2, 2, FEARG_1, ret_void, f_prompt_setprompt}, 742 {"prop_add", 3, 3, FEARG_1, ret_void, PROP_FUNC(f_prop_add)},
696 #endif 743 {"prop_clear", 1, 3, FEARG_1, ret_void, PROP_FUNC(f_prop_clear)},
697 #ifdef FEAT_PROP_POPUP 744 {"prop_find", 1, 2, FEARG_1, ret_dict_any, PROP_FUNC(f_prop_find)},
698 {"prop_add", 3, 3, FEARG_1, ret_void, f_prop_add}, 745 {"prop_list", 1, 2, FEARG_1, ret_list_dict_any, PROP_FUNC(f_prop_list)},
699 {"prop_clear", 1, 3, FEARG_1, ret_void, f_prop_clear}, 746 {"prop_remove", 1, 3, FEARG_1, ret_number, PROP_FUNC(f_prop_remove)},
700 {"prop_find", 1, 2, FEARG_1, ret_dict_any, f_prop_find}, 747 {"prop_type_add", 2, 2, FEARG_1, ret_void, PROP_FUNC(f_prop_type_add)},
701 {"prop_list", 1, 2, FEARG_1, ret_list_dict_any, f_prop_list}, 748 {"prop_type_change", 2, 2, FEARG_1, ret_void, PROP_FUNC(f_prop_type_change)},
702 {"prop_remove", 1, 3, FEARG_1, ret_number, f_prop_remove}, 749 {"prop_type_delete", 1, 2, FEARG_1, ret_void, PROP_FUNC(f_prop_type_delete)},
703 {"prop_type_add", 2, 2, FEARG_1, ret_void, f_prop_type_add}, 750 {"prop_type_get", 1, 2, FEARG_1, ret_dict_any, PROP_FUNC(f_prop_type_get)},
704 {"prop_type_change", 2, 2, FEARG_1, ret_void, f_prop_type_change}, 751 {"prop_type_list", 0, 1, FEARG_1, ret_list_string, PROP_FUNC(f_prop_type_list)},
705 {"prop_type_delete", 1, 2, FEARG_1, ret_void, f_prop_type_delete},
706 {"prop_type_get", 1, 2, FEARG_1, ret_dict_any, f_prop_type_get},
707 {"prop_type_list", 0, 1, FEARG_1, ret_list_string, f_prop_type_list},
708 #endif
709 {"pum_getpos", 0, 0, 0, ret_dict_number, f_pum_getpos}, 752 {"pum_getpos", 0, 0, 0, ret_dict_number, f_pum_getpos},
710 {"pumvisible", 0, 0, 0, ret_number, f_pumvisible}, 753 {"pumvisible", 0, 0, 0, ret_number, f_pumvisible},
754 {"py3eval", 1, 1, FEARG_1, ret_any,
711 #ifdef FEAT_PYTHON3 755 #ifdef FEAT_PYTHON3
712 {"py3eval", 1, 1, FEARG_1, ret_any, f_py3eval}, 756 f_py3eval
713 #endif 757 #else
758 NULL
759 #endif
760 },
761 {"pyeval", 1, 1, FEARG_1, ret_any,
714 #ifdef FEAT_PYTHON 762 #ifdef FEAT_PYTHON
715 {"pyeval", 1, 1, FEARG_1, ret_any, f_pyeval}, 763 f_pyeval
716 #endif 764 #else
765 NULL
766 #endif
767 },
768 {"pyxeval", 1, 1, FEARG_1, ret_any,
717 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) 769 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
718 {"pyxeval", 1, 1, FEARG_1, ret_any, f_pyxeval}, 770 f_pyxeval
719 #endif 771 #else
772 NULL
773 #endif
774 },
720 {"rand", 0, 1, FEARG_1, ret_number, f_rand}, 775 {"rand", 0, 1, FEARG_1, ret_number, f_rand},
721 {"range", 1, 3, FEARG_1, ret_list_number, f_range}, 776 {"range", 1, 3, FEARG_1, ret_list_number, f_range},
722 {"readdir", 1, 2, FEARG_1, ret_list_string, f_readdir}, 777 {"readdir", 1, 2, FEARG_1, ret_list_string, f_readdir},
723 {"readfile", 1, 3, FEARG_1, ret_any, f_readfile}, 778 {"readfile", 1, 3, FEARG_1, ret_any, f_readfile},
724 {"reg_executing", 0, 0, 0, ret_string, f_reg_executing}, 779 {"reg_executing", 0, 0, 0, ret_string, f_reg_executing},
725 {"reg_recording", 0, 0, 0, ret_string, f_reg_recording}, 780 {"reg_recording", 0, 0, 0, ret_string, f_reg_recording},
726 {"reltime", 0, 2, FEARG_1, ret_list_any, f_reltime}, 781 {"reltime", 0, 2, FEARG_1, ret_list_any, f_reltime},
727 #ifdef FEAT_FLOAT 782 {"reltimefloat", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_reltimefloat)},
728 {"reltimefloat", 1, 1, FEARG_1, ret_float, f_reltimefloat},
729 #endif
730 {"reltimestr", 1, 1, FEARG_1, ret_string, f_reltimestr}, 783 {"reltimestr", 1, 1, FEARG_1, ret_string, f_reltimestr},
731 {"remote_expr", 2, 4, FEARG_1, ret_string, f_remote_expr}, 784 {"remote_expr", 2, 4, FEARG_1, ret_string, f_remote_expr},
732 {"remote_foreground", 1, 1, FEARG_1, ret_string, f_remote_foreground}, 785 {"remote_foreground", 1, 1, FEARG_1, ret_string, f_remote_foreground},
733 {"remote_peek", 1, 2, FEARG_1, ret_number, f_remote_peek}, 786 {"remote_peek", 1, 2, FEARG_1, ret_number, f_remote_peek},
734 {"remote_read", 1, 2, FEARG_1, ret_string, f_remote_read}, 787 {"remote_read", 1, 2, FEARG_1, ret_string, f_remote_read},
737 {"remove", 2, 3, FEARG_1, ret_any, f_remove}, 790 {"remove", 2, 3, FEARG_1, ret_any, f_remove},
738 {"rename", 2, 2, FEARG_1, ret_number, f_rename}, 791 {"rename", 2, 2, FEARG_1, ret_number, f_rename},
739 {"repeat", 2, 2, FEARG_1, ret_any, f_repeat}, 792 {"repeat", 2, 2, FEARG_1, ret_any, f_repeat},
740 {"resolve", 1, 1, FEARG_1, ret_string, f_resolve}, 793 {"resolve", 1, 1, FEARG_1, ret_string, f_resolve},
741 {"reverse", 1, 1, FEARG_1, ret_any, f_reverse}, 794 {"reverse", 1, 1, FEARG_1, ret_any, f_reverse},
742 #ifdef FEAT_FLOAT 795 {"round", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_round)},
743 {"round", 1, 1, FEARG_1, ret_float, f_round}, 796 {"rubyeval", 1, 1, FEARG_1, ret_any,
744 #endif
745 #ifdef FEAT_RUBY 797 #ifdef FEAT_RUBY
746 {"rubyeval", 1, 1, FEARG_1, ret_any, f_rubyeval}, 798 f_rubyeval
747 #endif 799 #else
800 NULL
801 #endif
802 },
748 {"screenattr", 2, 2, FEARG_1, ret_number, f_screenattr}, 803 {"screenattr", 2, 2, FEARG_1, ret_number, f_screenattr},
749 {"screenchar", 2, 2, FEARG_1, ret_number, f_screenchar}, 804 {"screenchar", 2, 2, FEARG_1, ret_number, f_screenchar},
750 {"screenchars", 2, 2, FEARG_1, ret_list_number, f_screenchars}, 805 {"screenchars", 2, 2, FEARG_1, ret_list_number, f_screenchars},
751 {"screencol", 0, 0, 0, ret_number, f_screencol}, 806 {"screencol", 0, 0, 0, ret_number, f_screencol},
752 {"screenpos", 3, 3, FEARG_1, ret_dict_number, f_screenpos}, 807 {"screenpos", 3, 3, FEARG_1, ret_dict_number, f_screenpos},
773 {"setreg", 2, 3, FEARG_2, ret_number, f_setreg}, 828 {"setreg", 2, 3, FEARG_2, ret_number, f_setreg},
774 {"settabvar", 3, 3, FEARG_3, ret_void, f_settabvar}, 829 {"settabvar", 3, 3, FEARG_3, ret_void, f_settabvar},
775 {"settabwinvar", 4, 4, FEARG_4, ret_void, f_settabwinvar}, 830 {"settabwinvar", 4, 4, FEARG_4, ret_void, f_settabwinvar},
776 {"settagstack", 2, 3, FEARG_2, ret_number, f_settagstack}, 831 {"settagstack", 2, 3, FEARG_2, ret_number, f_settagstack},
777 {"setwinvar", 3, 3, FEARG_3, ret_void, f_setwinvar}, 832 {"setwinvar", 3, 3, FEARG_3, ret_void, f_setwinvar},
833 {"sha256", 1, 1, FEARG_1, ret_string,
778 #ifdef FEAT_CRYPT 834 #ifdef FEAT_CRYPT
779 {"sha256", 1, 1, FEARG_1, ret_string, f_sha256}, 835 f_sha256
780 #endif 836 #else
837 NULL
838 #endif
839 },
781 {"shellescape", 1, 2, FEARG_1, ret_string, f_shellescape}, 840 {"shellescape", 1, 2, FEARG_1, ret_string, f_shellescape},
782 {"shiftwidth", 0, 1, FEARG_1, ret_number, f_shiftwidth}, 841 {"shiftwidth", 0, 1, FEARG_1, ret_number, f_shiftwidth},
783 #ifdef FEAT_SIGNS 842 {"sign_define", 1, 2, FEARG_1, ret_any, SIGN_FUNC(f_sign_define)},
784 {"sign_define", 1, 2, FEARG_1, ret_any, f_sign_define}, 843 {"sign_getdefined", 0, 1, FEARG_1, ret_list_dict_any, SIGN_FUNC(f_sign_getdefined)},
785 {"sign_getdefined", 0, 1, FEARG_1, ret_list_dict_any, f_sign_getdefined}, 844 {"sign_getplaced", 0, 2, FEARG_1, ret_list_dict_any, SIGN_FUNC(f_sign_getplaced)},
786 {"sign_getplaced", 0, 2, FEARG_1, ret_list_dict_any, f_sign_getplaced}, 845 {"sign_jump", 3, 3, FEARG_1, ret_number, SIGN_FUNC(f_sign_jump)},
787 {"sign_jump", 3, 3, FEARG_1, ret_number, f_sign_jump}, 846 {"sign_place", 4, 5, FEARG_1, ret_number, SIGN_FUNC(f_sign_place)},
788 {"sign_place", 4, 5, FEARG_1, ret_number, f_sign_place}, 847 {"sign_placelist", 1, 1, FEARG_1, ret_list_number, SIGN_FUNC(f_sign_placelist)},
789 {"sign_placelist", 1, 1, FEARG_1, ret_list_number, f_sign_placelist}, 848 {"sign_undefine", 0, 1, FEARG_1, ret_number, SIGN_FUNC(f_sign_undefine)},
790 {"sign_undefine", 0, 1, FEARG_1, ret_number, f_sign_undefine}, 849 {"sign_unplace", 1, 2, FEARG_1, ret_number, SIGN_FUNC(f_sign_unplace)},
791 {"sign_unplace", 1, 2, FEARG_1, ret_number, f_sign_unplace}, 850 {"sign_unplacelist", 1, 2, FEARG_1, ret_list_number, SIGN_FUNC(f_sign_unplacelist)},
792 {"sign_unplacelist", 1, 2, FEARG_1, ret_list_number, f_sign_unplacelist},
793 #endif
794 {"simplify", 1, 1, 0, ret_string, f_simplify}, 851 {"simplify", 1, 1, 0, ret_string, f_simplify},
795 #ifdef FEAT_FLOAT 852 {"sin", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_sin)},
796 {"sin", 1, 1, FEARG_1, ret_float, f_sin}, 853 {"sinh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_sinh)},
797 {"sinh", 1, 1, FEARG_1, ret_float, f_sinh},
798 #endif
799 {"sort", 1, 3, FEARG_1, ret_list_any, f_sort}, 854 {"sort", 1, 3, FEARG_1, ret_list_any, f_sort},
800 #ifdef FEAT_SOUND 855 {"sound_clear", 0, 0, 0, ret_void, SOUND_FUNC(f_sound_clear)},
801 {"sound_clear", 0, 0, 0, ret_void, f_sound_clear}, 856 {"sound_playevent", 1, 2, FEARG_1, ret_number, SOUND_FUNC(f_sound_playevent)},
802 {"sound_playevent", 1, 2, FEARG_1, ret_number, f_sound_playevent}, 857 {"sound_playfile", 1, 2, FEARG_1, ret_number, SOUND_FUNC(f_sound_playfile)},
803 {"sound_playfile", 1, 2, FEARG_1, ret_number, f_sound_playfile}, 858 {"sound_stop", 1, 1, FEARG_1, ret_void, SOUND_FUNC(f_sound_stop)},
804 {"sound_stop", 1, 1, FEARG_1, ret_void, f_sound_stop},
805 #endif
806 {"soundfold", 1, 1, FEARG_1, ret_string, f_soundfold}, 859 {"soundfold", 1, 1, FEARG_1, ret_string, f_soundfold},
807 {"spellbadword", 0, 1, FEARG_1, ret_list_string, f_spellbadword}, 860 {"spellbadword", 0, 1, FEARG_1, ret_list_string, f_spellbadword},
808 {"spellsuggest", 1, 3, FEARG_1, ret_list_string, f_spellsuggest}, 861 {"spellsuggest", 1, 3, FEARG_1, ret_list_string, f_spellsuggest},
809 {"split", 1, 3, FEARG_1, ret_list_string, f_split}, 862 {"split", 1, 3, FEARG_1, ret_list_string, f_split},
810 #ifdef FEAT_FLOAT 863 {"sqrt", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_sqrt)},
811 {"sqrt", 1, 1, FEARG_1, ret_float, f_sqrt},
812 #endif
813 {"srand", 0, 1, FEARG_1, ret_list_number, f_srand}, 864 {"srand", 0, 1, FEARG_1, ret_list_number, f_srand},
814 {"state", 0, 1, FEARG_1, ret_string, f_state}, 865 {"state", 0, 1, FEARG_1, ret_string, f_state},
815 #ifdef FEAT_FLOAT 866 {"str2float", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_str2float)},
816 {"str2float", 1, 1, FEARG_1, ret_float, f_str2float},
817 #endif
818 {"str2list", 1, 2, FEARG_1, ret_list_number, f_str2list}, 867 {"str2list", 1, 2, FEARG_1, ret_list_number, f_str2list},
819 {"str2nr", 1, 3, FEARG_1, ret_number, f_str2nr}, 868 {"str2nr", 1, 3, FEARG_1, ret_number, f_str2nr},
820 {"strcharpart", 2, 3, FEARG_1, ret_string, f_strcharpart}, 869 {"strcharpart", 2, 3, FEARG_1, ret_string, f_strcharpart},
821 {"strchars", 1, 2, FEARG_1, ret_number, f_strchars}, 870 {"strchars", 1, 2, FEARG_1, ret_number, f_strchars},
822 {"strdisplaywidth", 1, 2, FEARG_1, ret_number, f_strdisplaywidth}, 871 {"strdisplaywidth", 1, 2, FEARG_1, ret_number, f_strdisplaywidth},
872 {"strftime", 1, 2, FEARG_1, ret_string,
823 #ifdef HAVE_STRFTIME 873 #ifdef HAVE_STRFTIME
824 {"strftime", 1, 2, FEARG_1, ret_string, f_strftime}, 874 f_strftime
825 #endif 875 #else
876 NULL
877 #endif
878 },
826 {"strgetchar", 2, 2, FEARG_1, ret_number, f_strgetchar}, 879 {"strgetchar", 2, 2, FEARG_1, ret_number, f_strgetchar},
827 {"stridx", 2, 3, FEARG_1, ret_number, f_stridx}, 880 {"stridx", 2, 3, FEARG_1, ret_number, f_stridx},
828 {"string", 1, 1, FEARG_1, ret_string, f_string}, 881 {"string", 1, 1, FEARG_1, ret_string, f_string},
829 {"strlen", 1, 1, FEARG_1, ret_number, f_strlen}, 882 {"strlen", 1, 1, FEARG_1, ret_number, f_strlen},
830 {"strpart", 2, 3, FEARG_1, ret_string, f_strpart}, 883 {"strpart", 2, 3, FEARG_1, ret_string, f_strpart},
884 {"strptime", 2, 2, FEARG_1, ret_number,
831 #ifdef HAVE_STRPTIME 885 #ifdef HAVE_STRPTIME
832 {"strptime", 2, 2, FEARG_1, ret_number, f_strptime}, 886 f_strptime
833 #endif 887 #else
888 NULL
889 #endif
890 },
834 {"strridx", 2, 3, FEARG_1, ret_number, f_strridx}, 891 {"strridx", 2, 3, FEARG_1, ret_number, f_strridx},
835 {"strtrans", 1, 1, FEARG_1, ret_string, f_strtrans}, 892 {"strtrans", 1, 1, FEARG_1, ret_string, f_strtrans},
836 {"strwidth", 1, 1, FEARG_1, ret_number, f_strwidth}, 893 {"strwidth", 1, 1, FEARG_1, ret_number, f_strwidth},
837 {"submatch", 1, 2, FEARG_1, ret_string, f_submatch}, 894 {"submatch", 1, 2, FEARG_1, ret_string, f_submatch},
838 {"substitute", 4, 4, FEARG_1, ret_string, f_substitute}, 895 {"substitute", 4, 4, FEARG_1, ret_string, f_substitute},
848 {"tabpagebuflist", 0, 1, FEARG_1, ret_list_number, f_tabpagebuflist}, 905 {"tabpagebuflist", 0, 1, FEARG_1, ret_list_number, f_tabpagebuflist},
849 {"tabpagenr", 0, 1, 0, ret_number, f_tabpagenr}, 906 {"tabpagenr", 0, 1, 0, ret_number, f_tabpagenr},
850 {"tabpagewinnr", 1, 2, FEARG_1, ret_number, f_tabpagewinnr}, 907 {"tabpagewinnr", 1, 2, FEARG_1, ret_number, f_tabpagewinnr},
851 {"tagfiles", 0, 0, 0, ret_list_string, f_tagfiles}, 908 {"tagfiles", 0, 0, 0, ret_list_string, f_tagfiles},
852 {"taglist", 1, 2, FEARG_1, ret_list_dict_any, f_taglist}, 909 {"taglist", 1, 2, FEARG_1, ret_list_dict_any, f_taglist},
853 #ifdef FEAT_FLOAT 910 {"tan", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_tan)},
854 {"tan", 1, 1, FEARG_1, ret_float, f_tan}, 911 {"tanh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_tanh)},
855 {"tanh", 1, 1, FEARG_1, ret_float, f_tanh},
856 #endif
857 {"tempname", 0, 0, 0, ret_string, f_tempname}, 912 {"tempname", 0, 0, 0, ret_string, f_tempname},
858 #ifdef FEAT_TERMINAL 913 {"term_dumpdiff", 2, 3, FEARG_1, ret_number, TERM_FUNC(f_term_dumpdiff)},
859 {"term_dumpdiff", 2, 3, FEARG_1, ret_number, f_term_dumpdiff}, 914 {"term_dumpload", 1, 2, FEARG_1, ret_number, TERM_FUNC(f_term_dumpload)},
860 {"term_dumpload", 1, 2, FEARG_1, ret_number, f_term_dumpload}, 915 {"term_dumpwrite", 2, 3, FEARG_2, ret_void, TERM_FUNC(f_term_dumpwrite)},
861 {"term_dumpwrite", 2, 3, FEARG_2, ret_void, f_term_dumpwrite}, 916 {"term_getaltscreen", 1, 1, FEARG_1, ret_number, TERM_FUNC(f_term_getaltscreen)},
862 {"term_getaltscreen", 1, 1, FEARG_1, ret_number, f_term_getaltscreen}, 917 {"term_getansicolors", 1, 1, FEARG_1, ret_list_string,
863 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) 918 #if defined(TERMINAL) && (defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS))
864 {"term_getansicolors", 1, 1, FEARG_1, ret_list_string, f_term_getansicolors}, 919 f_term_getansicolors
865 # endif 920 #else
866 {"term_getattr", 2, 2, FEARG_1, ret_number, f_term_getattr}, 921 NULL
867 {"term_getcursor", 1, 1, FEARG_1, ret_list_any, f_term_getcursor}, 922 #endif
868 {"term_getjob", 1, 1, FEARG_1, ret_job, f_term_getjob}, 923 },
869 {"term_getline", 2, 2, FEARG_1, ret_string, f_term_getline}, 924 {"term_getattr", 2, 2, FEARG_1, ret_number, TERM_FUNC(f_term_getattr)},
870 {"term_getscrolled", 1, 1, FEARG_1, ret_number, f_term_getscrolled}, 925 {"term_getcursor", 1, 1, FEARG_1, ret_list_any, TERM_FUNC(f_term_getcursor)},
871 {"term_getsize", 1, 1, FEARG_1, ret_list_number, f_term_getsize}, 926 {"term_getjob", 1, 1, FEARG_1, ret_job, TERM_FUNC(f_term_getjob)},
872 {"term_getstatus", 1, 1, FEARG_1, ret_string, f_term_getstatus}, 927 {"term_getline", 2, 2, FEARG_1, ret_string, TERM_FUNC(f_term_getline)},
873 {"term_gettitle", 1, 1, FEARG_1, ret_string, f_term_gettitle}, 928 {"term_getscrolled", 1, 1, FEARG_1, ret_number, TERM_FUNC(f_term_getscrolled)},
874 {"term_gettty", 1, 2, FEARG_1, ret_string, f_term_gettty}, 929 {"term_getsize", 1, 1, FEARG_1, ret_list_number, TERM_FUNC(f_term_getsize)},
875 {"term_list", 0, 0, 0, ret_list_number, f_term_list}, 930 {"term_getstatus", 1, 1, FEARG_1, ret_string, TERM_FUNC(f_term_getstatus)},
876 {"term_scrape", 2, 2, FEARG_1, ret_list_dict_any, f_term_scrape}, 931 {"term_gettitle", 1, 1, FEARG_1, ret_string, TERM_FUNC(f_term_gettitle)},
877 {"term_sendkeys", 2, 2, FEARG_1, ret_void, f_term_sendkeys}, 932 {"term_gettty", 1, 2, FEARG_1, ret_string, TERM_FUNC(f_term_gettty)},
878 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) 933 {"term_list", 0, 0, 0, ret_list_number, TERM_FUNC(f_term_list)},
879 {"term_setansicolors", 2, 2, FEARG_1, ret_void, f_term_setansicolors}, 934 {"term_scrape", 2, 2, FEARG_1, ret_list_dict_any, TERM_FUNC(f_term_scrape)},
880 # endif 935 {"term_sendkeys", 2, 2, FEARG_1, ret_void, TERM_FUNC(f_term_sendkeys)},
881 {"term_setapi", 2, 2, FEARG_1, ret_void, f_term_setapi}, 936 {"term_setansicolors", 2, 2, FEARG_1, ret_void,
882 {"term_setkill", 2, 2, FEARG_1, ret_void, f_term_setkill}, 937 #if defined(TERMINAL) && (defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS))
883 {"term_setrestore", 2, 2, FEARG_1, ret_void, f_term_setrestore}, 938 f_term_setansicolors
884 {"term_setsize", 3, 3, FEARG_1, ret_void, f_term_setsize}, 939 #else
885 {"term_start", 1, 2, FEARG_1, ret_number, f_term_start}, 940 NULL
886 {"term_wait", 1, 2, FEARG_1, ret_void, f_term_wait}, 941 #endif
887 #endif 942 },
943 {"term_setapi", 2, 2, FEARG_1, ret_void, TERM_FUNC(f_term_setapi)},
944 {"term_setkill", 2, 2, FEARG_1, ret_void, TERM_FUNC(f_term_setkill)},
945 {"term_setrestore", 2, 2, FEARG_1, ret_void, TERM_FUNC(f_term_setrestore)},
946 {"term_setsize", 3, 3, FEARG_1, ret_void, TERM_FUNC(f_term_setsize)},
947 {"term_start", 1, 2, FEARG_1, ret_number, TERM_FUNC(f_term_start)},
948 {"term_wait", 1, 2, FEARG_1, ret_void, TERM_FUNC(f_term_wait)},
888 {"test_alloc_fail", 3, 3, FEARG_1, ret_void, f_test_alloc_fail}, 949 {"test_alloc_fail", 3, 3, FEARG_1, ret_void, f_test_alloc_fail},
889 {"test_autochdir", 0, 0, 0, ret_void, f_test_autochdir}, 950 {"test_autochdir", 0, 0, 0, ret_void, f_test_autochdir},
890 {"test_feedinput", 1, 1, FEARG_1, ret_void, f_test_feedinput}, 951 {"test_feedinput", 1, 1, FEARG_1, ret_void, f_test_feedinput},
891 {"test_garbagecollect_now", 0, 0, 0, ret_void, f_test_garbagecollect_now}, 952 {"test_garbagecollect_now", 0, 0, 0, ret_void, f_test_garbagecollect_now},
892 {"test_garbagecollect_soon", 0, 0, 0, ret_void, f_test_garbagecollect_soon}, 953 {"test_garbagecollect_soon", 0, 0, 0, ret_void, f_test_garbagecollect_soon},
893 {"test_getvalue", 1, 1, FEARG_1, ret_number, f_test_getvalue}, 954 {"test_getvalue", 1, 1, FEARG_1, ret_number, f_test_getvalue},
894 {"test_ignore_error", 1, 1, FEARG_1, ret_void, f_test_ignore_error}, 955 {"test_ignore_error", 1, 1, FEARG_1, ret_void, f_test_ignore_error},
895 {"test_null_blob", 0, 0, 0, ret_blob, f_test_null_blob}, 956 {"test_null_blob", 0, 0, 0, ret_blob, f_test_null_blob},
896 #ifdef FEAT_JOB_CHANNEL 957 {"test_null_channel", 0, 0, 0, ret_channel, JOB_FUNC(f_test_null_channel)},
897 {"test_null_channel", 0, 0, 0, ret_channel, f_test_null_channel},
898 #endif
899 {"test_null_dict", 0, 0, 0, ret_dict_any, f_test_null_dict}, 958 {"test_null_dict", 0, 0, 0, ret_dict_any, f_test_null_dict},
900 #ifdef FEAT_JOB_CHANNEL 959 {"test_null_job", 0, 0, 0, ret_job, JOB_FUNC(f_test_null_job)},
901 {"test_null_job", 0, 0, 0, ret_job, f_test_null_job},
902 #endif
903 {"test_null_list", 0, 0, 0, ret_list_any, f_test_null_list}, 960 {"test_null_list", 0, 0, 0, ret_list_any, f_test_null_list},
904 {"test_null_partial", 0, 0, 0, ret_partial_void, f_test_null_partial}, 961 {"test_null_partial", 0, 0, 0, ret_partial_void, f_test_null_partial},
905 {"test_null_string", 0, 0, 0, ret_string, f_test_null_string}, 962 {"test_null_string", 0, 0, 0, ret_string, f_test_null_string},
906 {"test_option_not_set", 1, 1, FEARG_1,ret_void, f_test_option_not_set}, 963 {"test_option_not_set", 1, 1, FEARG_1,ret_void, f_test_option_not_set},
907 {"test_override", 2, 2, FEARG_2, ret_void, f_test_override}, 964 {"test_override", 2, 2, FEARG_2, ret_void, f_test_override},
908 {"test_refcount", 1, 1, FEARG_1, ret_number, f_test_refcount}, 965 {"test_refcount", 1, 1, FEARG_1, ret_number, f_test_refcount},
966 {"test_scrollbar", 3, 3, FEARG_2, ret_void,
909 #ifdef FEAT_GUI 967 #ifdef FEAT_GUI
910 {"test_scrollbar", 3, 3, FEARG_2, ret_void, f_test_scrollbar}, 968 f_test_scrollbar
911 #endif 969 #else
970 NULL
971 #endif
972 },
912 {"test_setmouse", 2, 2, 0, ret_void, f_test_setmouse}, 973 {"test_setmouse", 2, 2, 0, ret_void, f_test_setmouse},
913 {"test_settime", 1, 1, FEARG_1, ret_void, f_test_settime}, 974 {"test_settime", 1, 1, FEARG_1, ret_void, f_test_settime},
914 {"test_srand_seed", 0, 1, FEARG_1, ret_void, f_test_srand_seed}, 975 {"test_srand_seed", 0, 1, FEARG_1, ret_void, f_test_srand_seed},
915 {"test_unknown", 0, 0, 0, ret_any, f_test_unknown}, 976 {"test_unknown", 0, 0, 0, ret_any, f_test_unknown},
916 {"test_void", 0, 0, 0, ret_any, f_test_void}, 977 {"test_void", 0, 0, 0, ret_any, f_test_void},
917 #ifdef FEAT_TIMERS 978 {"timer_info", 0, 1, FEARG_1, ret_list_dict_any, TIMER_FUNC(f_timer_info)},
918 {"timer_info", 0, 1, FEARG_1, ret_list_dict_any, f_timer_info}, 979 {"timer_pause", 2, 2, FEARG_1, ret_void, TIMER_FUNC(f_timer_pause)},
919 {"timer_pause", 2, 2, FEARG_1, ret_void, f_timer_pause}, 980 {"timer_start", 2, 3, FEARG_1, ret_number, TIMER_FUNC(f_timer_start)},
920 {"timer_start", 2, 3, FEARG_1, ret_number, f_timer_start}, 981 {"timer_stop", 1, 1, FEARG_1, ret_void, TIMER_FUNC(f_timer_stop)},
921 {"timer_stop", 1, 1, FEARG_1, ret_void, f_timer_stop}, 982 {"timer_stopall", 0, 0, 0, ret_void, TIMER_FUNC(f_timer_stopall)},
922 {"timer_stopall", 0, 0, 0, ret_void, f_timer_stopall},
923 #endif
924 {"tolower", 1, 1, FEARG_1, ret_string, f_tolower}, 983 {"tolower", 1, 1, FEARG_1, ret_string, f_tolower},
925 {"toupper", 1, 1, FEARG_1, ret_string, f_toupper}, 984 {"toupper", 1, 1, FEARG_1, ret_string, f_toupper},
926 {"tr", 3, 3, FEARG_1, ret_string, f_tr}, 985 {"tr", 3, 3, FEARG_1, ret_string, f_tr},
927 {"trim", 1, 2, FEARG_1, ret_string, f_trim}, 986 {"trim", 1, 2, FEARG_1, ret_string, f_trim},
928 #ifdef FEAT_FLOAT 987 {"trunc", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_trunc)},
929 {"trunc", 1, 1, FEARG_1, ret_float, f_trunc},
930 #endif
931 {"type", 1, 1, FEARG_1, ret_number, f_type}, 988 {"type", 1, 1, FEARG_1, ret_number, f_type},
932 {"undofile", 1, 1, FEARG_1, ret_string, f_undofile}, 989 {"undofile", 1, 1, FEARG_1, ret_string, f_undofile},
933 {"undotree", 0, 0, 0, ret_dict_any, f_undotree}, 990 {"undotree", 0, 0, 0, ret_dict_any, f_undotree},
934 {"uniq", 1, 3, FEARG_1, ret_list_any, f_uniq}, 991 {"uniq", 1, 3, FEARG_1, ret_list_any, f_uniq},
935 {"values", 1, 1, FEARG_1, ret_list_any, f_values}, 992 {"values", 1, 1, FEARG_1, ret_list_any, f_values},
1012 return get_user_var_name(xp, ++intidx); 1069 return get_user_var_name(xp, ++intidx);
1013 } 1070 }
1014 1071
1015 /* 1072 /*
1016 * Find internal function "name" in table "global_functions". 1073 * Find internal function "name" in table "global_functions".
1017 * Return index, or -1 if not found 1074 * Return index, or -1 if not found or "implemented" is TRUE and the function
1018 */ 1075 * is not implemented.
1019 int 1076 */
1020 find_internal_func(char_u *name) 1077 static int
1078 find_internal_func_opt(char_u *name, int implemented)
1021 { 1079 {
1022 int first = 0; 1080 int first = 0;
1023 int last; 1081 int last;
1024 int cmp; 1082 int cmp;
1025 int x; 1083 int x;
1033 cmp = STRCMP(name, global_functions[x].f_name); 1091 cmp = STRCMP(name, global_functions[x].f_name);
1034 if (cmp < 0) 1092 if (cmp < 0)
1035 last = x - 1; 1093 last = x - 1;
1036 else if (cmp > 0) 1094 else if (cmp > 0)
1037 first = x + 1; 1095 first = x + 1;
1096 else if (implemented && global_functions[x].f_func == NULL)
1097 break;
1038 else 1098 else
1039 return x; 1099 return x;
1040 } 1100 }
1041 return -1; 1101 return -1;
1042 } 1102 }
1043 1103
1104 /*
1105 * Find internal function "name" in table "global_functions".
1106 * Return index, or -1 if not found or the function is not implemented.
1107 */
1108 int
1109 find_internal_func(char_u *name)
1110 {
1111 return find_internal_func_opt(name, TRUE);
1112 }
1113
1044 int 1114 int
1045 has_internal_func(char_u *name) 1115 has_internal_func(char_u *name)
1046 { 1116 {
1047 return find_internal_func(name) >= 0; 1117 return find_internal_func_opt(name, TRUE) >= 0;
1118 }
1119
1120 static int
1121 has_internal_func_name(char_u *name)
1122 {
1123 return find_internal_func_opt(name, FALSE) >= 0;
1048 } 1124 }
1049 1125
1050 char * 1126 char *
1051 internal_func_name(int idx) 1127 internal_func_name(int idx)
1052 { 1128 {
2285 n = FALSE; // trailing garbage 2361 n = FALSE; // trailing garbage
2286 } 2362 }
2287 else if (*p == '*') // internal or user defined function 2363 else if (*p == '*') // internal or user defined function
2288 { 2364 {
2289 n = function_exists(p + 1, FALSE); 2365 n = function_exists(p + 1, FALSE);
2366 }
2367 else if (*p == '?') // internal function only
2368 {
2369 n = has_internal_func_name(p + 1);
2290 } 2370 }
2291 else if (*p == ':') 2371 else if (*p == ':')
2292 { 2372 {
2293 n = cmd_exists(p + 1); 2373 n = cmd_exists(p + 1);
2294 } 2374 }