patch 8.1.1888: more functions can be used as methods

Problem:    More functions can be used as methods.
Solution:   Make various functions usable as a method.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index a296428..2f66b17 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -419,7 +419,7 @@
     {"acos",		1, 1, FEARG_1,	  f_acos},	// WJMc
 #endif
     {"add",		2, 2, FEARG_1,	  f_add},
-    {"and",		2, 2, 0,	  f_and},
+    {"and",		2, 2, FEARG_1,	  f_and},
     {"append",		2, 2, FEARG_LAST, f_append},
     {"appendbufline",	3, 3, FEARG_LAST, f_appendbufline},
     {"argc",		0, 1, 0,	  f_argc},
@@ -447,23 +447,23 @@
 #endif
 #ifdef FEAT_BEVAL
     {"balloon_gettext",	0, 0, 0,	  f_balloon_gettext},
-    {"balloon_show",	1, 1, 0,	  f_balloon_show},
+    {"balloon_show",	1, 1, FEARG_1,	  f_balloon_show},
 # if defined(FEAT_BEVAL_TERM)
-    {"balloon_split",	1, 1, 0,	  f_balloon_split},
+    {"balloon_split",	1, 1, FEARG_1,	  f_balloon_split},
 # endif
 #endif
     {"browse",		4, 4, 0,	  f_browse},
     {"browsedir",	2, 2, 0,	  f_browsedir},
-    {"bufadd",		1, 1, 0,	  f_bufadd},
-    {"bufexists",	1, 1, 0,	  f_bufexists},
-    {"buffer_exists",	1, 1, 0,	  f_bufexists},	// obsolete
+    {"bufadd",		1, 1, FEARG_1,	  f_bufadd},
+    {"bufexists",	1, 1, FEARG_1,	  f_bufexists},
+    {"buffer_exists",	1, 1, FEARG_1,	  f_bufexists},	// obsolete
     {"buffer_name",	1, 1, 0,	  f_bufname},	// obsolete
     {"buffer_number",	1, 1, 0,	  f_bufnr},	// obsolete
-    {"buflisted",	1, 1, 0,	  f_buflisted},
-    {"bufload",		1, 1, 0,	  f_bufload},
-    {"bufloaded",	1, 1, 0,	  f_bufloaded},
-    {"bufname",		1, 1, 0,	  f_bufname},
-    {"bufnr",		1, 2, 0,	  f_bufnr},
+    {"buflisted",	1, 1, FEARG_1,	  f_buflisted},
+    {"bufload",		1, 1, FEARG_1,	  f_bufload},
+    {"bufloaded",	1, 1, FEARG_1,	  f_bufloaded},
+    {"bufname",		1, 1, FEARG_1,	  f_bufname},
+    {"bufnr",		1, 2, FEARG_1,	  f_bufnr},
     {"bufwinid",	1, 1, 0,	  f_bufwinid},
     {"bufwinnr",	1, 1, 0,	  f_bufwinnr},
     {"byte2line",	1, 1, 0,	  f_byte2line},
@@ -626,7 +626,7 @@
     {"inputsave",	0, 0, 0,	  f_inputsave},
     {"inputsecret",	1, 2, 0,	  f_inputsecret},
     {"insert",		2, 3, FEARG_1,	  f_insert},
-    {"invert",		1, 1, 0,	  f_invert},
+    {"invert",		1, 1, FEARG_1,	  f_invert},
     {"isdirectory",	1, 1, 0,	  f_isdirectory},
 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
     {"isinf",		1, 1, FEARG_1,	  f_isinf},
@@ -690,7 +690,7 @@
 #endif
     {"nextnonblank",	1, 1, 0,	  f_nextnonblank},
     {"nr2char",		1, 2, 0,	  f_nr2char},
-    {"or",		2, 2, 0,	  f_or},
+    {"or",		2, 2, FEARG_1,	  f_or},
     {"pathshorten",	1, 1, 0,	  f_pathshorten},
 #ifdef FEAT_PERL
     {"perleval",	1, 1, 0,	  f_perleval},
@@ -976,7 +976,7 @@
     {"winwidth",	1, 1, 0,	  f_winwidth},
     {"wordcount",	0, 0, 0,	  f_wordcount},
     {"writefile",	2, 3, 0,	  f_writefile},
-    {"xor",		2, 2, 0,	  f_xor},
+    {"xor",		2, 2, FEARG_1,	  f_xor},
 };
 
 /*
diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim
index fc086fa..a382a1a 100644
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -90,8 +90,8 @@
   call assert_equal('', bufname('%'))
   call assert_equal(1, line('$'))
   rew
-  call assert_notequal(curbuf, bufnr('%'))
-  call assert_equal('Xargadd', bufname('%'))
+  call assert_notequal(curbuf, '%'->bufnr())
+  call assert_equal('Xargadd', '%'->bufname())
   call assert_equal(2, line('$'))
 
   call delete('Xargadd')
diff --git a/src/testdir/test_balloon_gui.vim b/src/testdir/test_balloon_gui.vim
index 5b486c0..70a88f3 100644
--- a/src/testdir/test_balloon_gui.vim
+++ b/src/testdir/test_balloon_gui.vim
@@ -12,7 +12,7 @@
   call balloon_show('')
 
   let msg = 'that that'
-  call balloon_show(msg)
+  eval msg->balloon_show()
   call assert_equal(msg, balloon_gettext())
   sleep 10m
   call balloon_show('')
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 474e638..5249d4e 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1537,12 +1537,12 @@
 
   let curbuf = bufnr('')
   call writefile(['some', 'text'], 'XotherName')
-  let buf = bufadd('XotherName')
+  let buf = 'XotherName'->bufadd()
   call assert_notequal(0, buf)
-  call assert_equal(1, bufexists('XotherName'))
+  eval 'XotherName'->bufexists()->assert_equal(1)
   call assert_equal(0, getbufvar(buf, '&buflisted'))
   call assert_equal(0, bufloaded(buf))
-  call bufload(buf)
+  eval buf->bufload()
   call assert_equal(1, bufloaded(buf))
   call assert_equal(['some', 'text'], getbufline(buf, 1, '$'))
   call assert_equal(curbuf, bufnr(''))
diff --git a/src/testdir/test_hide.vim b/src/testdir/test_hide.vim
index 128b8ff..41b1a4a 100644
--- a/src/testdir/test_hide.vim
+++ b/src/testdir/test_hide.vim
@@ -37,7 +37,7 @@
   " :hide as a command
   hide
   call assert_equal([orig_bname, orig_winnr], [bufname(''), winnr('$')])
-  call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+  call assert_equal([1, 1], ['Xf1'->buflisted(), 'Xf1'->bufloaded()])
   bwipeout! Xf1
 
   new Xf1
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index d9f561b..6c86d69 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -758,9 +758,8 @@
 endfunc
 
 func Test_balloon_split()
-  if !exists('*balloon_split')
-    return
-  endif
+  CheckFunction balloon_split
+
   call assert_equal([
         \ 'tempname: 0x555555e380a0 "/home/mool/.viminfz.tmp"',
         \ ], balloon_split(
@@ -771,13 +770,14 @@
         \ ], balloon_split(
         \ 'one two three four one two three four one two three four'))
 
-  call assert_equal([
-        \ 'struct = {',
-        \ '  one = 1,',
-        \ '  two = 2,',
-        \ '  three = 3}',
-        \ ], balloon_split(
-        \ 'struct = {one = 1, two = 2, three = 3}'))
+  eval 'struct = {one = 1, two = 2, three = 3}'
+        \ ->balloon_split()
+        \ ->assert_equal([
+        \   'struct = {',
+        \   '  one = 1,',
+        \   '  two = 2,',
+        \   '  three = 3}',
+        \ ])
 
   call assert_equal([
         \ 'struct = {',
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 69a2eba..dc4df44 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1330,6 +1330,7 @@
     " and
     call assert_equal(127, and(127, 127))
     call assert_equal(16, and(127, 16))
+    eval 127->and(16)->assert_equal(16)
     call assert_equal(0, and(127, 128))
     call assert_fails("call and(1.0, 1)", 'E805:')
     call assert_fails("call and([], 1)", 'E745:')
@@ -1340,6 +1341,7 @@
     " or
     call assert_equal(23, or(16, 7))
     call assert_equal(15, or(8, 7))
+    eval 8->or(7)->assert_equal(15)
     call assert_equal(123, or(0, 123))
     call assert_fails("call or(1.0, 1)", 'E805:')
     call assert_fails("call or([], 1)", 'E745:')
@@ -1350,6 +1352,7 @@
     " xor
     call assert_equal(0, xor(127, 127))
     call assert_equal(111, xor(127, 16))
+    eval 127->xor(16)->assert_equal(111)
     call assert_equal(255, xor(127, 128))
     call assert_fails("call xor(1.0, 1)", 'E805:')
     call assert_fails("call xor([], 1)", 'E745:')
@@ -1359,6 +1362,7 @@
     call assert_fails("call xor(1, {})", 'E728:')
     " invert
     call assert_equal(65408, and(invert(127), 65535))
+    eval 127->invert()->and(65535)->assert_equal(65408)
     call assert_equal(65519, and(invert(16), 65535))
     call assert_equal(65407, and(invert(128), 65535))
     call assert_fails("call invert(1.0)", 'E805:')
diff --git a/src/version.c b/src/version.c
index eb4106f..85d481a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -766,6 +766,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1888,
+/**/
     1887,
 /**/
     1886,