comparison src/evalfunc.c @ 17377:cb008de2a6ec v8.1.1687

patch 8.1.1687: the evalfunc.c file is too big commit https://github.com/vim/vim/commit/ecaa70ea29c269dd0dabd3cd5acdfa0ce42ccd54 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 14 14:55:39 2019 +0200 patch 8.1.1687: the evalfunc.c file is too big Problem: The evalfunc.c file is too big. Solution: Move testing support to a separate file.
author Bram Moolenaar <Bram@vim.org>
date Sun, 14 Jul 2019 15:00:05 +0200
parents 9843fbfa0ee5
children dfd87ef822aa
comparison
equal deleted inserted replaced
17376:da3299b8b5c0 17377:cb008de2a6ec
39 static void f_appendbufline(typval_T *argvars, typval_T *rettv); 39 static void f_appendbufline(typval_T *argvars, typval_T *rettv);
40 static void f_argc(typval_T *argvars, typval_T *rettv); 40 static void f_argc(typval_T *argvars, typval_T *rettv);
41 static void f_argidx(typval_T *argvars, typval_T *rettv); 41 static void f_argidx(typval_T *argvars, typval_T *rettv);
42 static void f_arglistid(typval_T *argvars, typval_T *rettv); 42 static void f_arglistid(typval_T *argvars, typval_T *rettv);
43 static void f_argv(typval_T *argvars, typval_T *rettv); 43 static void f_argv(typval_T *argvars, typval_T *rettv);
44 static void f_assert_beeps(typval_T *argvars, typval_T *rettv);
45 static void f_assert_equal(typval_T *argvars, typval_T *rettv);
46 static void f_assert_equalfile(typval_T *argvars, typval_T *rettv);
47 static void f_assert_exception(typval_T *argvars, typval_T *rettv);
48 static void f_assert_fails(typval_T *argvars, typval_T *rettv);
49 static void f_assert_false(typval_T *argvars, typval_T *rettv);
50 static void f_assert_inrange(typval_T *argvars, typval_T *rettv);
51 static void f_assert_match(typval_T *argvars, typval_T *rettv);
52 static void f_assert_notequal(typval_T *argvars, typval_T *rettv);
53 static void f_assert_notmatch(typval_T *argvars, typval_T *rettv);
54 static void f_assert_report(typval_T *argvars, typval_T *rettv);
55 static void f_assert_true(typval_T *argvars, typval_T *rettv);
56 #ifdef FEAT_FLOAT 44 #ifdef FEAT_FLOAT
57 static void f_asin(typval_T *argvars, typval_T *rettv); 45 static void f_asin(typval_T *argvars, typval_T *rettv);
58 static void f_atan(typval_T *argvars, typval_T *rettv); 46 static void f_atan(typval_T *argvars, typval_T *rettv);
59 static void f_atan2(typval_T *argvars, typval_T *rettv); 47 static void f_atan2(typval_T *argvars, typval_T *rettv);
60 #endif 48 #endif
394 static void f_tabpagenr(typval_T *argvars, typval_T *rettv); 382 static void f_tabpagenr(typval_T *argvars, typval_T *rettv);
395 static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv); 383 static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv);
396 static void f_taglist(typval_T *argvars, typval_T *rettv); 384 static void f_taglist(typval_T *argvars, typval_T *rettv);
397 static void f_tagfiles(typval_T *argvars, typval_T *rettv); 385 static void f_tagfiles(typval_T *argvars, typval_T *rettv);
398 static void f_tempname(typval_T *argvars, typval_T *rettv); 386 static void f_tempname(typval_T *argvars, typval_T *rettv);
399 static void f_test_alloc_fail(typval_T *argvars, typval_T *rettv);
400 static void f_test_autochdir(typval_T *argvars, typval_T *rettv);
401 static void f_test_feedinput(typval_T *argvars, typval_T *rettv);
402 static void f_test_getvalue(typval_T *argvars, typval_T *rettv);
403 static void f_test_option_not_set(typval_T *argvars, typval_T *rettv);
404 static void f_test_override(typval_T *argvars, typval_T *rettv);
405 static void f_test_refcount(typval_T *argvars, typval_T *rettv);
406 static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv);
407 static void f_test_garbagecollect_soon(typval_T *argvars, typval_T *rettv);
408 static void f_test_ignore_error(typval_T *argvars, typval_T *rettv);
409 static void f_test_null_blob(typval_T *argvars, typval_T *rettv);
410 #ifdef FEAT_JOB_CHANNEL
411 static void f_test_null_channel(typval_T *argvars, typval_T *rettv);
412 #endif
413 static void f_test_null_dict(typval_T *argvars, typval_T *rettv);
414 #ifdef FEAT_JOB_CHANNEL
415 static void f_test_null_job(typval_T *argvars, typval_T *rettv);
416 #endif
417 static void f_test_null_list(typval_T *argvars, typval_T *rettv);
418 static void f_test_null_partial(typval_T *argvars, typval_T *rettv);
419 static void f_test_null_string(typval_T *argvars, typval_T *rettv);
420 #ifdef FEAT_GUI
421 static void f_test_scrollbar(typval_T *argvars, typval_T *rettv);
422 #endif
423 #ifdef FEAT_MOUSE
424 static void f_test_setmouse(typval_T *argvars, typval_T *rettv);
425 #endif
426 static void f_test_settime(typval_T *argvars, typval_T *rettv);
427 #ifdef FEAT_FLOAT 387 #ifdef FEAT_FLOAT
428 static void f_tan(typval_T *argvars, typval_T *rettv); 388 static void f_tan(typval_T *argvars, typval_T *rettv);
429 static void f_tanh(typval_T *argvars, typval_T *rettv); 389 static void f_tanh(typval_T *argvars, typval_T *rettv);
430 #endif 390 #endif
431 #ifdef FEAT_TIMERS 391 #ifdef FEAT_TIMERS
1607 } 1567 }
1608 else 1568 else
1609 get_arglist_as_rettv(ARGLIST, ARGCOUNT, rettv); 1569 get_arglist_as_rettv(ARGLIST, ARGCOUNT, rettv);
1610 } 1570 }
1611 1571
1612 /*
1613 * "assert_beeps(cmd [, error])" function
1614 */
1615 static void
1616 f_assert_beeps(typval_T *argvars, typval_T *rettv)
1617 {
1618 rettv->vval.v_number = assert_beeps(argvars);
1619 }
1620
1621 /*
1622 * "assert_equal(expected, actual[, msg])" function
1623 */
1624 static void
1625 f_assert_equal(typval_T *argvars, typval_T *rettv)
1626 {
1627 rettv->vval.v_number = assert_equal_common(argvars, ASSERT_EQUAL);
1628 }
1629
1630 /*
1631 * "assert_equalfile(fname-one, fname-two)" function
1632 */
1633 static void
1634 f_assert_equalfile(typval_T *argvars, typval_T *rettv)
1635 {
1636 rettv->vval.v_number = assert_equalfile(argvars);
1637 }
1638
1639 /*
1640 * "assert_notequal(expected, actual[, msg])" function
1641 */
1642 static void
1643 f_assert_notequal(typval_T *argvars, typval_T *rettv)
1644 {
1645 rettv->vval.v_number = assert_equal_common(argvars, ASSERT_NOTEQUAL);
1646 }
1647
1648 /*
1649 * "assert_exception(string[, msg])" function
1650 */
1651 static void
1652 f_assert_exception(typval_T *argvars, typval_T *rettv)
1653 {
1654 rettv->vval.v_number = assert_exception(argvars);
1655 }
1656
1657 /*
1658 * "assert_fails(cmd [, error[, msg]])" function
1659 */
1660 static void
1661 f_assert_fails(typval_T *argvars, typval_T *rettv)
1662 {
1663 rettv->vval.v_number = assert_fails(argvars);
1664 }
1665
1666 /*
1667 * "assert_false(actual[, msg])" function
1668 */
1669 static void
1670 f_assert_false(typval_T *argvars, typval_T *rettv)
1671 {
1672 rettv->vval.v_number = assert_bool(argvars, FALSE);
1673 }
1674
1675 /*
1676 * "assert_inrange(lower, upper[, msg])" function
1677 */
1678 static void
1679 f_assert_inrange(typval_T *argvars, typval_T *rettv)
1680 {
1681 rettv->vval.v_number = assert_inrange(argvars);
1682 }
1683
1684 /*
1685 * "assert_match(pattern, actual[, msg])" function
1686 */
1687 static void
1688 f_assert_match(typval_T *argvars, typval_T *rettv)
1689 {
1690 rettv->vval.v_number = assert_match_common(argvars, ASSERT_MATCH);
1691 }
1692
1693 /*
1694 * "assert_notmatch(pattern, actual[, msg])" function
1695 */
1696 static void
1697 f_assert_notmatch(typval_T *argvars, typval_T *rettv)
1698 {
1699 rettv->vval.v_number = assert_match_common(argvars, ASSERT_NOTMATCH);
1700 }
1701
1702 /*
1703 * "assert_report(msg)" function
1704 */
1705 static void
1706 f_assert_report(typval_T *argvars, typval_T *rettv)
1707 {
1708 rettv->vval.v_number = assert_report(argvars);
1709 }
1710
1711 /*
1712 * "assert_true(actual[, msg])" function
1713 */
1714 static void
1715 f_assert_true(typval_T *argvars, typval_T *rettv)
1716 {
1717 rettv->vval.v_number = assert_bool(argvars, TRUE);
1718 }
1719
1720 #ifdef FEAT_FLOAT 1572 #ifdef FEAT_FLOAT
1721 /* 1573 /*
1722 * "asin()" function 1574 * "asin()" function
1723 */ 1575 */
1724 static void 1576 static void
13545 rettv->vval.v_float = 0.0; 13397 rettv->vval.v_float = 0.0;
13546 } 13398 }
13547 #endif 13399 #endif
13548 13400
13549 /* 13401 /*
13550 * "test_alloc_fail(id, countdown, repeat)" function
13551 */
13552 static void
13553 f_test_alloc_fail(typval_T *argvars, typval_T *rettv UNUSED)
13554 {
13555 if (argvars[0].v_type != VAR_NUMBER
13556 || argvars[0].vval.v_number <= 0
13557 || argvars[1].v_type != VAR_NUMBER
13558 || argvars[1].vval.v_number < 0
13559 || argvars[2].v_type != VAR_NUMBER)
13560 emsg(_(e_invarg));
13561 else
13562 {
13563 alloc_fail_id = argvars[0].vval.v_number;
13564 if (alloc_fail_id >= aid_last)
13565 emsg(_(e_invarg));
13566 alloc_fail_countdown = argvars[1].vval.v_number;
13567 alloc_fail_repeat = argvars[2].vval.v_number;
13568 did_outofmem_msg = FALSE;
13569 }
13570 }
13571
13572 /*
13573 * "test_autochdir()"
13574 */
13575 static void
13576 f_test_autochdir(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
13577 {
13578 #if defined(FEAT_AUTOCHDIR)
13579 test_autochdir = TRUE;
13580 #endif
13581 }
13582
13583 /*
13584 * "test_feedinput()"
13585 */
13586 static void
13587 f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED)
13588 {
13589 #ifdef USE_INPUT_BUF
13590 char_u *val = tv_get_string_chk(&argvars[0]);
13591
13592 if (val != NULL)
13593 {
13594 trash_input_buf();
13595 add_to_input_buf_csi(val, (int)STRLEN(val));
13596 }
13597 #endif
13598 }
13599
13600 /*
13601 * "test_getvalue({name})" function
13602 */
13603 static void
13604 f_test_getvalue(typval_T *argvars, typval_T *rettv)
13605 {
13606 if (argvars[0].v_type != VAR_STRING)
13607 emsg(_(e_invarg));
13608 else
13609 {
13610 char_u *name = tv_get_string(&argvars[0]);
13611
13612 if (STRCMP(name, (char_u *)"need_fileinfo") == 0)
13613 rettv->vval.v_number = need_fileinfo;
13614 else
13615 semsg(_(e_invarg2), name);
13616 }
13617 }
13618
13619 /*
13620 * "test_option_not_set({name})" function
13621 */
13622 static void
13623 f_test_option_not_set(typval_T *argvars, typval_T *rettv UNUSED)
13624 {
13625 char_u *name = (char_u *)"";
13626
13627 if (argvars[0].v_type != VAR_STRING)
13628 emsg(_(e_invarg));
13629 else
13630 {
13631 name = tv_get_string(&argvars[0]);
13632 if (reset_option_was_set(name) == FAIL)
13633 semsg(_(e_invarg2), name);
13634 }
13635 }
13636
13637 /*
13638 * "test_override({name}, {val})" function
13639 */
13640 static void
13641 f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
13642 {
13643 char_u *name = (char_u *)"";
13644 int val;
13645 static int save_starting = -1;
13646
13647 if (argvars[0].v_type != VAR_STRING
13648 || (argvars[1].v_type) != VAR_NUMBER)
13649 emsg(_(e_invarg));
13650 else
13651 {
13652 name = tv_get_string(&argvars[0]);
13653 val = (int)tv_get_number(&argvars[1]);
13654
13655 if (STRCMP(name, (char_u *)"redraw") == 0)
13656 disable_redraw_for_testing = val;
13657 else if (STRCMP(name, (char_u *)"redraw_flag") == 0)
13658 ignore_redraw_flag_for_testing = val;
13659 else if (STRCMP(name, (char_u *)"char_avail") == 0)
13660 disable_char_avail_for_testing = val;
13661 else if (STRCMP(name, (char_u *)"starting") == 0)
13662 {
13663 if (val)
13664 {
13665 if (save_starting < 0)
13666 save_starting = starting;
13667 starting = 0;
13668 }
13669 else
13670 {
13671 starting = save_starting;
13672 save_starting = -1;
13673 }
13674 }
13675 else if (STRCMP(name, (char_u *)"nfa_fail") == 0)
13676 nfa_fail_for_testing = val;
13677 else if (STRCMP(name, (char_u *)"no_query_mouse") == 0)
13678 no_query_mouse_for_testing = val;
13679 else if (STRCMP(name, (char_u *)"no_wait_return") == 0)
13680 no_wait_return = val;
13681 else if (STRCMP(name, (char_u *)"ALL") == 0)
13682 {
13683 disable_char_avail_for_testing = FALSE;
13684 disable_redraw_for_testing = FALSE;
13685 ignore_redraw_flag_for_testing = FALSE;
13686 nfa_fail_for_testing = FALSE;
13687 no_query_mouse_for_testing = FALSE;
13688 if (save_starting >= 0)
13689 {
13690 starting = save_starting;
13691 save_starting = -1;
13692 }
13693 }
13694 else
13695 semsg(_(e_invarg2), name);
13696 }
13697 }
13698
13699 /*
13700 * "test_refcount({expr})" function
13701 */
13702 static void
13703 f_test_refcount(typval_T *argvars, typval_T *rettv)
13704 {
13705 int retval = -1;
13706
13707 switch (argvars[0].v_type)
13708 {
13709 case VAR_UNKNOWN:
13710 case VAR_NUMBER:
13711 case VAR_FLOAT:
13712 case VAR_SPECIAL:
13713 case VAR_STRING:
13714 break;
13715 case VAR_JOB:
13716 #ifdef FEAT_JOB_CHANNEL
13717 if (argvars[0].vval.v_job != NULL)
13718 retval = argvars[0].vval.v_job->jv_refcount - 1;
13719 #endif
13720 break;
13721 case VAR_CHANNEL:
13722 #ifdef FEAT_JOB_CHANNEL
13723 if (argvars[0].vval.v_channel != NULL)
13724 retval = argvars[0].vval.v_channel->ch_refcount - 1;
13725 #endif
13726 break;
13727 case VAR_FUNC:
13728 if (argvars[0].vval.v_string != NULL)
13729 {
13730 ufunc_T *fp;
13731
13732 fp = find_func(argvars[0].vval.v_string);
13733 if (fp != NULL)
13734 retval = fp->uf_refcount;
13735 }
13736 break;
13737 case VAR_PARTIAL:
13738 if (argvars[0].vval.v_partial != NULL)
13739 retval = argvars[0].vval.v_partial->pt_refcount - 1;
13740 break;
13741 case VAR_BLOB:
13742 if (argvars[0].vval.v_blob != NULL)
13743 retval = argvars[0].vval.v_blob->bv_refcount - 1;
13744 break;
13745 case VAR_LIST:
13746 if (argvars[0].vval.v_list != NULL)
13747 retval = argvars[0].vval.v_list->lv_refcount - 1;
13748 break;
13749 case VAR_DICT:
13750 if (argvars[0].vval.v_dict != NULL)
13751 retval = argvars[0].vval.v_dict->dv_refcount - 1;
13752 break;
13753 }
13754
13755 rettv->v_type = VAR_NUMBER;
13756 rettv->vval.v_number = retval;
13757
13758 }
13759
13760 /*
13761 * "test_garbagecollect_now()" function
13762 */
13763 static void
13764 f_test_garbagecollect_now(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
13765 {
13766 /* This is dangerous, any Lists and Dicts used internally may be freed
13767 * while still in use. */
13768 garbage_collect(TRUE);
13769 }
13770
13771 /*
13772 * "test_garbagecollect_soon()" function
13773 */
13774 static void
13775 f_test_garbagecollect_soon(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
13776 {
13777 may_garbage_collect = TRUE;
13778 }
13779
13780 /*
13781 * "test_ignore_error()" function
13782 */
13783 static void
13784 f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED)
13785 {
13786 ignore_error_for_testing(tv_get_string(&argvars[0]));
13787 }
13788
13789 static void
13790 f_test_null_blob(typval_T *argvars UNUSED, typval_T *rettv)
13791 {
13792 rettv->v_type = VAR_BLOB;
13793 rettv->vval.v_blob = NULL;
13794 }
13795
13796 #ifdef FEAT_JOB_CHANNEL
13797 static void
13798 f_test_null_channel(typval_T *argvars UNUSED, typval_T *rettv)
13799 {
13800 rettv->v_type = VAR_CHANNEL;
13801 rettv->vval.v_channel = NULL;
13802 }
13803 #endif
13804
13805 static void
13806 f_test_null_dict(typval_T *argvars UNUSED, typval_T *rettv)
13807 {
13808 rettv_dict_set(rettv, NULL);
13809 }
13810
13811 #ifdef FEAT_JOB_CHANNEL
13812 static void
13813 f_test_null_job(typval_T *argvars UNUSED, typval_T *rettv)
13814 {
13815 rettv->v_type = VAR_JOB;
13816 rettv->vval.v_job = NULL;
13817 }
13818 #endif
13819
13820 static void
13821 f_test_null_list(typval_T *argvars UNUSED, typval_T *rettv)
13822 {
13823 rettv_list_set(rettv, NULL);
13824 }
13825
13826 static void
13827 f_test_null_partial(typval_T *argvars UNUSED, typval_T *rettv)
13828 {
13829 rettv->v_type = VAR_PARTIAL;
13830 rettv->vval.v_partial = NULL;
13831 }
13832
13833 static void
13834 f_test_null_string(typval_T *argvars UNUSED, typval_T *rettv)
13835 {
13836 rettv->v_type = VAR_STRING;
13837 rettv->vval.v_string = NULL;
13838 }
13839
13840 #ifdef FEAT_GUI
13841 static void
13842 f_test_scrollbar(typval_T *argvars, typval_T *rettv UNUSED)
13843 {
13844 char_u *which;
13845 long value;
13846 int dragging;
13847 scrollbar_T *sb = NULL;
13848
13849 if (argvars[0].v_type != VAR_STRING
13850 || (argvars[1].v_type) != VAR_NUMBER
13851 || (argvars[2].v_type) != VAR_NUMBER)
13852 {
13853 emsg(_(e_invarg));
13854 return;
13855 }
13856 which = tv_get_string(&argvars[0]);
13857 value = tv_get_number(&argvars[1]);
13858 dragging = tv_get_number(&argvars[2]);
13859
13860 if (STRCMP(which, "left") == 0)
13861 sb = &curwin->w_scrollbars[SBAR_LEFT];
13862 else if (STRCMP(which, "right") == 0)
13863 sb = &curwin->w_scrollbars[SBAR_RIGHT];
13864 else if (STRCMP(which, "hor") == 0)
13865 sb = &gui.bottom_sbar;
13866 if (sb == NULL)
13867 {
13868 semsg(_(e_invarg2), which);
13869 return;
13870 }
13871 gui_drag_scrollbar(sb, value, dragging);
13872 # ifndef USE_ON_FLY_SCROLL
13873 // need to loop through normal_cmd() to handle the scroll events
13874 exec_normal(FALSE, TRUE, FALSE);
13875 # endif
13876 }
13877 #endif
13878
13879 #ifdef FEAT_MOUSE
13880 static void
13881 f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED)
13882 {
13883 mouse_row = (time_t)tv_get_number(&argvars[0]) - 1;
13884 mouse_col = (time_t)tv_get_number(&argvars[1]) - 1;
13885 }
13886 #endif
13887
13888 static void
13889 f_test_settime(typval_T *argvars, typval_T *rettv UNUSED)
13890 {
13891 time_for_testing = (time_t)tv_get_number(&argvars[0]);
13892 }
13893
13894 /*
13895 * Get a callback from "arg". It can be a Funcref or a function name. 13402 * Get a callback from "arg". It can be a Funcref or a function name.
13896 * When "arg" is zero return an empty string. 13403 * When "arg" is zero return an empty string.
13897 * "cb_name" is not allocated. 13404 * "cb_name" is not allocated.
13898 * "cb_name" is set to NULL for an invalid argument. 13405 * "cb_name" is set to NULL for an invalid argument.
13899 */ 13406 */