summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-08-17 21:36:28 +0200
committerBram Moolenaar <Bram@vim.org>2019-08-17 21:36:28 +0200
commit93cf85f9ef02931de3f8c8e536a137da0b48b7dc (patch)
treee42d65e6b6a2bdf1fe54e2304ba60f7b60c7d7c7 /src
parent9cfe8f6e68de4bfb5942d84f4465de914a747b3f (diff)
patch 8.1.1879: more functions can be used as methodsv8.1.1879
Problem: More functions can be used as methods. Solution: Make float functions usable as a method.
Diffstat (limited to 'src')
-rw-r--r--src/evalfunc.c50
-rw-r--r--src/testdir/test_float_func.vim27
-rw-r--r--src/version.c2
3 files changed, 54 insertions, 25 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 89430937f2..fde51c4bca 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -418,8 +418,8 @@ typedef struct
static funcentry_T global_functions[] =
{
#ifdef FEAT_FLOAT
- {"abs", 1, 1, 0, f_abs},
- {"acos", 1, 1, 0, f_acos}, // WJMc
+ {"abs", 1, 1, FEARG_1, f_abs},
+ {"acos", 1, 1, FEARG_1, f_acos}, // WJMc
#endif
{"add", 2, 2, FEARG_1, f_add},
{"and", 2, 2, 0, f_and},
@@ -430,7 +430,7 @@ static funcentry_T global_functions[] =
{"arglistid", 0, 2, 0, f_arglistid},
{"argv", 0, 2, 0, f_argv},
#ifdef FEAT_FLOAT
- {"asin", 1, 1, 0, f_asin}, // WJMc
+ {"asin", 1, 1, FEARG_1, f_asin}, // WJMc
#endif
{"assert_beeps", 1, 2, FEARG_1, f_assert_beeps},
{"assert_equal", 2, 3, FEARG_2, f_assert_equal},
@@ -445,8 +445,8 @@ static funcentry_T global_functions[] =
{"assert_report", 1, 1, 0, f_assert_report},
{"assert_true", 1, 2, FEARG_1, f_assert_true},
#ifdef FEAT_FLOAT
- {"atan", 1, 1, 0, f_atan},
- {"atan2", 2, 2, 0, f_atan2},
+ {"atan", 1, 1, FEARG_1, f_atan},
+ {"atan2", 2, 2, FEARG_1, f_atan2},
#endif
#ifdef FEAT_BEVAL
{"balloon_gettext", 0, 0, 0, f_balloon_gettext},
@@ -474,7 +474,7 @@ static funcentry_T global_functions[] =
{"byteidxcomp", 2, 2, 0, f_byteidxcomp},
{"call", 2, 3, 0, f_call},
#ifdef FEAT_FLOAT
- {"ceil", 1, 1, 0, f_ceil},
+ {"ceil", 1, 1, FEARG_1, f_ceil},
#endif
#ifdef FEAT_JOB_CHANNEL
{"ch_canread", 1, 1, 0, f_ch_canread},
@@ -511,8 +511,8 @@ static funcentry_T global_functions[] =
{"confirm", 1, 4, 0, f_confirm},
{"copy", 1, 1, FEARG_1, f_copy},
#ifdef FEAT_FLOAT
- {"cos", 1, 1, 0, f_cos},
- {"cosh", 1, 1, 0, f_cosh},
+ {"cos", 1, 1, FEARG_1, f_cos},
+ {"cosh", 1, 1, FEARG_1, f_cosh},
#endif
{"count", 2, 4, FEARG_1, f_count},
{"cscope_connection",0,3, 0, f_cscope_connection},
@@ -536,7 +536,7 @@ static funcentry_T global_functions[] =
{"exepath", 1, 1, 0, f_exepath},
{"exists", 1, 1, 0, f_exists},
#ifdef FEAT_FLOAT
- {"exp", 1, 1, 0, f_exp},
+ {"exp", 1, 1, FEARG_1, f_exp},
#endif
{"expand", 1, 3, 0, f_expand},
{"expandcmd", 1, 1, 0, f_expandcmd},
@@ -549,9 +549,9 @@ static funcentry_T global_functions[] =
{"finddir", 1, 3, 0, f_finddir},
{"findfile", 1, 3, 0, f_findfile},
#ifdef FEAT_FLOAT
- {"float2nr", 1, 1, 0, f_float2nr},
- {"floor", 1, 1, 0, f_floor},
- {"fmod", 2, 2, 0, f_fmod},
+ {"float2nr", 1, 1, FEARG_1, f_float2nr},
+ {"floor", 1, 1, FEARG_1, f_floor},
+ {"fmod", 2, 2, FEARG_1, f_fmod},
#endif
{"fnameescape", 1, 1, 0, f_fnameescape},
{"fnamemodify", 2, 2, 0, f_fnamemodify},
@@ -634,11 +634,11 @@ static funcentry_T global_functions[] =
{"invert", 1, 1, 0, f_invert},
{"isdirectory", 1, 1, 0, f_isdirectory},
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
- {"isinf", 1, 1, 0, f_isinf},
+ {"isinf", 1, 1, FEARG_1, f_isinf},
#endif
{"islocked", 1, 1, 0, f_islocked},
#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
- {"isnan", 1, 1, 0, f_isnan},
+ {"isnan", 1, 1, FEARG_1, f_isnan},
#endif
{"items", 1, 1, FEARG_1, f_items},
#ifdef FEAT_JOB_CHANNEL
@@ -668,8 +668,8 @@ static funcentry_T global_functions[] =
{"listener_remove", 1, 1, 0, f_listener_remove},
{"localtime", 0, 0, 0, f_localtime},
#ifdef FEAT_FLOAT
- {"log", 1, 1, 0, f_log},
- {"log10", 1, 1, 0, f_log10},
+ {"log", 1, 1, FEARG_1, f_log},
+ {"log10", 1, 1, FEARG_1, f_log10},
#endif
#ifdef FEAT_LUA
{"luaeval", 1, 2, 0, f_luaeval},
@@ -722,7 +722,7 @@ static funcentry_T global_functions[] =
{"popup_show", 1, 1, 0, f_popup_show},
#endif
#ifdef FEAT_FLOAT
- {"pow", 2, 2, 0, f_pow},
+ {"pow", 2, 2, FEARG_1, f_pow},
#endif
{"prevnonblank", 1, 1, 0, f_prevnonblank},
{"printf", 1, 19, FEARG_2, f_printf},
@@ -775,7 +775,7 @@ static funcentry_T global_functions[] =
{"resolve", 1, 1, 0, f_resolve},
{"reverse", 1, 1, FEARG_1, f_reverse},
#ifdef FEAT_FLOAT
- {"round", 1, 1, 0, f_round},
+ {"round", 1, 1, FEARG_1, f_round},
#endif
#ifdef FEAT_RUBY
{"rubyeval", 1, 1, 0, f_rubyeval},
@@ -828,8 +828,8 @@ static funcentry_T global_functions[] =
#endif
{"simplify", 1, 1, 0, f_simplify},
#ifdef FEAT_FLOAT
- {"sin", 1, 1, 0, f_sin},
- {"sinh", 1, 1, 0, f_sinh},
+ {"sin", 1, 1, FEARG_1, f_sin},
+ {"sinh", 1, 1, FEARG_1, f_sinh},
#endif
{"sort", 1, 3, FEARG_1, f_sort},
#ifdef FEAT_SOUND
@@ -843,8 +843,8 @@ static funcentry_T global_functions[] =
{"spellsuggest", 1, 3, 0, f_spellsuggest},
{"split", 1, 3, FEARG_1, f_split},
#ifdef FEAT_FLOAT
- {"sqrt", 1, 1, 0, f_sqrt},
- {"str2float", 1, 1, 0, f_str2float},
+ {"sqrt", 1, 1, FEARG_1, f_sqrt},
+ {"str2float", 1, 1, FEARG_1, f_str2float},
#endif
{"str2list", 1, 2, FEARG_1, f_str2list},
{"str2nr", 1, 2, 0, f_str2nr},
@@ -879,8 +879,8 @@ static funcentry_T global_functions[] =
{"tagfiles", 0, 0, 0, f_tagfiles},
{"taglist", 1, 2, 0, f_taglist},
#ifdef FEAT_FLOAT
- {"tan", 1, 1, 0, f_tan},
- {"tanh", 1, 1, 0, f_tanh},
+ {"tan", 1, 1, FEARG_1, f_tan},
+ {"tanh", 1, 1, FEARG_1, f_tanh},
#endif
{"tempname", 0, 0, 0, f_tempname},
#ifdef FEAT_TERMINAL
@@ -952,7 +952,7 @@ static funcentry_T global_functions[] =
{"tr", 3, 3, 0, f_tr},
{"trim", 1, 2, 0, f_trim},
#ifdef FEAT_FLOAT
- {"trunc", 1, 1, 0, f_trunc},
+ {"trunc", 1, 1, FEARG_1, f_trunc},
#endif
{"type", 1, 1, FEARG_1, f_type},
{"undofile", 1, 1, 0, f_undofile},
diff --git a/src/testdir/test_float_func.vim b/src/testdir/test_float_func.vim
index f407f40eb0..17b5cdac96 100644
--- a/src/testdir/test_float_func.vim
+++ b/src/testdir/test_float_func.vim
@@ -6,6 +6,8 @@ CheckFeature float
func Test_abs()
call assert_equal('1.23', string(abs(1.23)))
call assert_equal('1.23', string(abs(-1.23)))
+ eval -1.23->abs()->string()->assert_equal('1.23')
+
call assert_equal('0.0', string(abs(0.0)))
call assert_equal('0.0', string(abs(1.0/(1.0/0.0))))
call assert_equal('0.0', string(abs(-1.0/(1.0/0.0))))
@@ -22,6 +24,7 @@ endfunc
func Test_sqrt()
call assert_equal('0.0', string(sqrt(0.0)))
call assert_equal('1.414214', string(sqrt(2.0)))
+ eval 2.0->sqrt()->string()->assert_equal('1.414214')
call assert_equal('inf', string(sqrt(1.0/0.0)))
call assert_equal('nan', string(sqrt(-1.0)))
call assert_equal('nan', string(sqrt(0.0/0.0)))
@@ -31,6 +34,7 @@ endfunc
func Test_log()
call assert_equal('0.0', string(log(1.0)))
call assert_equal('-0.693147', string(log(0.5)))
+ eval 0.5->log()->string()->assert_equal('-0.693147')
call assert_equal('-inf', string(log(0.0)))
call assert_equal('nan', string(log(-1.0)))
call assert_equal('inf', string(log(1.0/0.0)))
@@ -42,6 +46,7 @@ func Test_log10()
call assert_equal('0.0', string(log10(1.0)))
call assert_equal('2.0', string(log10(100.0)))
call assert_equal('2.079181', string(log10(120.0)))
+ eval 120.0->log10()->string()->assert_equal('2.079181')
call assert_equal('-inf', string(log10(0.0)))
call assert_equal('nan', string(log10(-1.0)))
call assert_equal('inf', string(log10(1.0/0.0)))
@@ -53,6 +58,7 @@ func Test_exp()
call assert_equal('1.0', string(exp(0.0)))
call assert_equal('7.389056', string(exp(2.0)))
call assert_equal('0.367879', string(exp(-1.0)))
+ eval -1.0->exp()->string()->assert_equal('0.367879')
call assert_equal('inf', string(exp(1.0/0.0)))
call assert_equal('0.0', string(exp(-1.0/0.0)))
call assert_equal('nan', string(exp(0.0/0.0)))
@@ -63,6 +69,7 @@ func Test_sin()
call assert_equal('0.0', string(sin(0.0)))
call assert_equal('0.841471', string(sin(1.0)))
call assert_equal('-0.479426', string(sin(-0.5)))
+ eval -0.5->sin()->string()->assert_equal('-0.479426')
call assert_equal('nan', string(sin(0.0/0.0)))
call assert_equal('nan', string(sin(1.0/0.0)))
call assert_equal('0.0', string(sin(1.0/(1.0/0.0))))
@@ -73,6 +80,8 @@ endfunc
func Test_asin()
call assert_equal('0.0', string(asin(0.0)))
call assert_equal('1.570796', string(asin(1.0)))
+ eval 1.0->asin()->string()->assert_equal('1.570796')
+
call assert_equal('-0.523599', string(asin(-0.5)))
call assert_equal('nan', string(asin(1.1)))
call assert_equal('nan', string(asin(1.0/0.0)))
@@ -84,6 +93,7 @@ func Test_sinh()
call assert_equal('0.0', string(sinh(0.0)))
call assert_equal('0.521095', string(sinh(0.5)))
call assert_equal('-1.026517', string(sinh(-0.9)))
+ eval -0.9->sinh()->string()->assert_equal('-1.026517')
call assert_equal('inf', string(sinh(1.0/0.0)))
call assert_equal('-inf', string(sinh(-1.0/0.0)))
call assert_equal('nan', string(sinh(0.0/0.0)))
@@ -94,6 +104,7 @@ func Test_cos()
call assert_equal('1.0', string(cos(0.0)))
call assert_equal('0.540302', string(cos(1.0)))
call assert_equal('0.877583', string(cos(-0.5)))
+ eval -0.5->cos()->string()->assert_equal('0.877583')
call assert_equal('nan', string(cos(0.0/0.0)))
call assert_equal('nan', string(cos(1.0/0.0)))
call assert_fails('call cos("")', 'E808:')
@@ -103,6 +114,7 @@ func Test_acos()
call assert_equal('1.570796', string(acos(0.0)))
call assert_equal('0.0', string(acos(1.0)))
call assert_equal('3.141593', string(acos(-1.0)))
+ eval -1.0->acos()->string()->assert_equal('3.141593')
call assert_equal('2.094395', string(acos(-0.5)))
call assert_equal('nan', string(acos(1.1)))
call assert_equal('nan', string(acos(1.0/0.0)))
@@ -113,6 +125,7 @@ endfunc
func Test_cosh()
call assert_equal('1.0', string(cosh(0.0)))
call assert_equal('1.127626', string(cosh(0.5)))
+ eval 0.5->cosh()->string()->assert_equal('1.127626')
call assert_equal('inf', string(cosh(1.0/0.0)))
call assert_equal('inf', string(cosh(-1.0/0.0)))
call assert_equal('nan', string(cosh(0.0/0.0)))
@@ -123,6 +136,7 @@ func Test_tan()
call assert_equal('0.0', string(tan(0.0)))
call assert_equal('0.546302', string(tan(0.5)))
call assert_equal('-0.546302', string(tan(-0.5)))
+ eval -0.5->tan()->string()->assert_equal('-0.546302')
call assert_equal('nan', string(tan(1.0/0.0)))
call assert_equal('nan', string(cos(0.0/0.0)))
call assert_equal('0.0', string(tan(1.0/(1.0/0.0))))
@@ -134,6 +148,7 @@ func Test_atan()
call assert_equal('0.0', string(atan(0.0)))
call assert_equal('0.463648', string(atan(0.5)))
call assert_equal('-0.785398', string(atan(-1.0)))
+ eval -1.0->atan()->string()->assert_equal('-0.785398')
call assert_equal('1.570796', string(atan(1.0/0.0)))
call assert_equal('-1.570796', string(atan(-1.0/0.0)))
call assert_equal('nan', string(atan(0.0/0.0)))
@@ -144,6 +159,7 @@ func Test_atan2()
call assert_equal('-2.356194', string(atan2(-1, -1)))
call assert_equal('2.356194', string(atan2(1, -1)))
call assert_equal('0.0', string(atan2(1.0, 1.0/0.0)))
+ eval 1.0->atan2(1.0/0.0)->string()->assert_equal('0.0')
call assert_equal('1.570796', string(atan2(1.0/0.0, 1.0)))
call assert_equal('nan', string(atan2(0.0/0.0, 1.0)))
call assert_fails('call atan2("", -1)', 'E808:')
@@ -154,6 +170,7 @@ func Test_tanh()
call assert_equal('0.0', string(tanh(0.0)))
call assert_equal('0.462117', string(tanh(0.5)))
call assert_equal('-0.761594', string(tanh(-1.0)))
+ eval -1.0->tanh()->string()->assert_equal('-0.761594')
call assert_equal('1.0', string(tanh(1.0/0.0)))
call assert_equal('-1.0', string(tanh(-1.0/0.0)))
call assert_equal('nan', string(tanh(0.0/0.0)))
@@ -164,6 +181,7 @@ func Test_fmod()
call assert_equal('0.13', string(fmod(12.33, 1.22)))
call assert_equal('-0.13', string(fmod(-12.33, 1.22)))
call assert_equal('nan', string(fmod(1.0/0.0, 1.0)))
+ eval (1.0/0.0)->fmod(1.0)->string()->assert_equal('nan')
" On Windows we get "nan" instead of 1.0, accept both.
let res = string(fmod(1.0, 1.0/0.0))
if res != 'nan'
@@ -177,6 +195,7 @@ endfunc
func Test_pow()
call assert_equal('1.0', string(pow(0.0, 0.0)))
call assert_equal('8.0', string(pow(2.0, 3.0)))
+ eval 2.0->pow(3.0)->string()->assert_equal('8.0')
call assert_equal('nan', string(pow(2.0, 0.0/0.0)))
call assert_equal('nan', string(pow(0.0/0.0, 3.0)))
call assert_equal('nan', string(pow(0.0/0.0, 3.0)))
@@ -192,6 +211,7 @@ func Test_str2float()
call assert_equal('1.0', string(str2float(' 1.0 ')))
call assert_equal('1.23', string(str2float('1.23')))
call assert_equal('1.23', string(str2float('1.23abc')))
+ eval '1.23abc'->str2float()->string()->assert_equal('1.23')
call assert_equal('1.0e40', string(str2float('1e40')))
call assert_equal('-1.23', string(str2float('-1.23')))
call assert_equal('1.23', string(str2float(' + 1.23 ')))
@@ -228,6 +248,7 @@ func Test_float2nr()
call assert_equal(1, float2nr(1.234))
call assert_equal(123, float2nr(1.234e2))
call assert_equal(12, float2nr(123.4e-1))
+ eval 123.4e-1->float2nr()->assert_equal(12)
let max_number = 1/0
let min_number = -max_number
call assert_equal(max_number/2+1, float2nr(pow(2, 62)))
@@ -242,6 +263,7 @@ func Test_floor()
call assert_equal('2.0', string(floor(2.0)))
call assert_equal('2.0', string(floor(2.11)))
call assert_equal('2.0', string(floor(2.99)))
+ eval 2.99->floor()->string()->assert_equal('2.0')
call assert_equal('-3.0', string(floor(-2.11)))
call assert_equal('-3.0', string(floor(-2.99)))
call assert_equal('nan', string(floor(0.0/0.0)))
@@ -255,6 +277,7 @@ func Test_ceil()
call assert_equal('3.0', string(ceil(2.11)))
call assert_equal('3.0', string(ceil(2.99)))
call assert_equal('-2.0', string(ceil(-2.11)))
+ eval -2.11->ceil()->string()->assert_equal('-2.0')
call assert_equal('-2.0', string(ceil(-2.99)))
call assert_equal('nan', string(ceil(0.0/0.0)))
call assert_equal('inf', string(ceil(1.0/0.0)))
@@ -266,6 +289,7 @@ func Test_round()
call assert_equal('2.0', string(round(2.1)))
call assert_equal('3.0', string(round(2.5)))
call assert_equal('3.0', string(round(2.9)))
+ eval 2.9->round()->string()->assert_equal('3.0')
call assert_equal('-2.0', string(round(-2.1)))
call assert_equal('-3.0', string(round(-2.5)))
call assert_equal('-3.0', string(round(-2.9)))
@@ -279,6 +303,7 @@ func Test_trunc()
call assert_equal('2.0', string(trunc(2.1)))
call assert_equal('2.0', string(trunc(2.5)))
call assert_equal('2.0', string(trunc(2.9)))
+ eval 2.9->trunc()->string()->assert_equal('2.0')
call assert_equal('-2.0', string(trunc(-2.1)))
call assert_equal('-2.0', string(trunc(-2.5)))
call assert_equal('-2.0', string(trunc(-2.9)))
@@ -291,6 +316,7 @@ endfunc
func Test_isinf()
call assert_equal(1, isinf(1.0/0.0))
call assert_equal(-1, isinf(-1.0/0.0))
+ eval (-1.0/0.0)->isinf()->assert_equal(-1)
call assert_false(isinf(1.0))
call assert_false(isinf(0.0/0.0))
call assert_false(isinf('a'))
@@ -302,6 +328,7 @@ func Test_isnan()
call assert_true(isnan(0.0/0.0))
call assert_false(isnan(1.0))
call assert_false(isnan(1.0/0.0))
+ eval (1.0/0.0)->isnan()->assert_false()
call assert_false(isnan(-1.0/0.0))
call assert_false(isnan('a'))
call assert_false(isnan([]))
diff --git a/src/version.c b/src/version.c
index 7242368f96..8005f1f4d5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1879,
+/**/
1878,
/**/
1877,