patch 8.1.1987: 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 13326e3..676f037 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -684,32 +684,32 @@
 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
     {"pyxeval",		1, 1, FEARG_1,	  f_pyxeval},
 #endif
-    {"range",		1, 3, 0,	  f_range},
-    {"readdir",		1, 2, 0,	  f_readdir},
-    {"readfile",	1, 3, 0,	  f_readfile},
+    {"range",		1, 3, FEARG_1,	  f_range},
+    {"readdir",		1, 2, FEARG_1,	  f_readdir},
+    {"readfile",	1, 3, FEARG_1,	  f_readfile},
     {"reg_executing",	0, 0, 0,	  f_reg_executing},
     {"reg_recording",	0, 0, 0,	  f_reg_recording},
-    {"reltime",		0, 2, 0,	  f_reltime},
+    {"reltime",		0, 2, FEARG_1,	  f_reltime},
 #ifdef FEAT_FLOAT
-    {"reltimefloat",	1, 1, 0,	  f_reltimefloat},
+    {"reltimefloat",	1, 1, FEARG_1,	  f_reltimefloat},
 #endif
-    {"reltimestr",	1, 1, 0,	  f_reltimestr},
-    {"remote_expr",	2, 4, 0,	  f_remote_expr},
-    {"remote_foreground", 1, 1, 0,	  f_remote_foreground},
-    {"remote_peek",	1, 2, 0,	  f_remote_peek},
-    {"remote_read",	1, 2, 0,	  f_remote_read},
-    {"remote_send",	2, 3, 0,	  f_remote_send},
-    {"remote_startserver", 1, 1, 0,	  f_remote_startserver},
+    {"reltimestr",	1, 1, FEARG_1,	  f_reltimestr},
+    {"remote_expr",	2, 4, FEARG_1,	  f_remote_expr},
+    {"remote_foreground", 1, 1, FEARG_1,  f_remote_foreground},
+    {"remote_peek",	1, 2, FEARG_1,	  f_remote_peek},
+    {"remote_read",	1, 2, FEARG_1,	  f_remote_read},
+    {"remote_send",	2, 3, FEARG_1,	  f_remote_send},
+    {"remote_startserver", 1, 1, FEARG_1,  f_remote_startserver},
     {"remove",		2, 3, FEARG_1,	  f_remove},
-    {"rename",		2, 2, 0,	  f_rename},
+    {"rename",		2, 2, FEARG_1,	  f_rename},
     {"repeat",		2, 2, FEARG_1,	  f_repeat},
-    {"resolve",		1, 1, 0,	  f_resolve},
+    {"resolve",		1, 1, FEARG_1,	  f_resolve},
     {"reverse",		1, 1, FEARG_1,	  f_reverse},
 #ifdef FEAT_FLOAT
     {"round",		1, 1, FEARG_1,	  f_round},
 #endif
 #ifdef FEAT_RUBY
-    {"rubyeval",	1, 1, 0,	  f_rubyeval},
+    {"rubyeval",	1, 1, FEARG_1,	  f_rubyeval},
 #endif
     {"screenattr",	2, 2, 0,	  f_screenattr},
     {"screenchar",	2, 2, 0,	  f_screenchar},
diff --git a/src/testdir/test_clientserver.vim b/src/testdir/test_clientserver.vim
index 385ff91..2e4a66e 100644
--- a/src/testdir/test_clientserver.vim
+++ b/src/testdir/test_clientserver.vim
@@ -34,7 +34,7 @@
   " When using valgrind it takes much longer.
   call WaitForAssert({-> assert_match(name, serverlist())})
 
-  call remote_foreground(name)
+  eval name->remote_foreground()
 
   call remote_send(name, ":let testvar = 'yes'\<CR>")
   call WaitFor('remote_expr("' . name . '", "exists(\"testvar\") ? testvar : \"\"", "", 1) == "yes"')
@@ -53,7 +53,7 @@
     endif
     " Wait for the server to be up and answering requests.
     sleep 100m
-    call WaitForAssert({-> assert_true(remote_expr(name, "v:version", "", 1) != "")})
+    call WaitForAssert({-> assert_true(name->remote_expr("v:version", "", 1) != "")})
 
     call remote_send(name, ":let testvar = 'maybe'\<CR>")
     call WaitForAssert({-> assert_equal('maybe', remote_expr(name, "testvar", "", 2))})
@@ -63,7 +63,7 @@
 
   " Expression evaluated locally.
   if v:servername == ''
-    call remote_startserver('MYSELF')
+    eval 'MYSELF'->remote_startserver()
     " May get MYSELF1 when running the test again.
     call assert_match('MYSELF', v:servername)
   endif
@@ -71,11 +71,11 @@
   call assert_equal('myself', remote_expr(v:servername, 'testvar'))
 
   call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
-  call assert_equal('got it', remote_read(g:myserverid, 2))
+  call assert_equal('got it', g:myserverid->remote_read(2))
 
   call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid')
   let peek_result = 'nothing'
-  let r = remote_peek(g:myserverid, 'peek_result')
+  let r = g:myserverid->remote_peek('peek_result')
   " unpredictable whether the result is already available.
   if r > 0
     call assert_equal('another', peek_result)
@@ -89,7 +89,7 @@
   call assert_equal('another', g:peek_result)
   call assert_equal('another', remote_read(g:myserverid, 2))
 
-  call remote_send(name, ":qa!\<CR>")
+  eval name->remote_send(":qa!\<CR>")
   try
     call WaitForAssert({-> assert_equal("dead", job_status(job))})
   finally
diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim
index 82f9cac..b518f5a 100644
--- a/src/testdir/test_eval_stuff.vim
+++ b/src/testdir/test_eval_stuff.vim
@@ -75,7 +75,7 @@
   call setline(1, ['one', 'two', 'three'])
   setlocal ff=dos
   write XReadfile
-  let lines = readfile('XReadfile')
+  let lines = 'XReadfile'->readfile()
   call assert_equal(['one', 'two', 'three'], lines)
   let lines = readfile('XReadfile', '', 2)
   call assert_equal(['one', 'two'], lines)
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index fc22bcd..dfd6a93 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -253,7 +253,7 @@
   call delete('Xlink')
 
   silent !ln -s -f Xlink2/ Xlink1
-  call assert_equal('Xlink2', resolve('Xlink1'))
+  call assert_equal('Xlink2', 'Xlink1'->resolve())
   call assert_equal('Xlink2/', resolve('Xlink1/'))
   call delete('Xlink1')
 
@@ -1413,7 +1413,7 @@
   " is invalid in that buffer.
   call writefile(['just one line'], 'Xfuncrange2')
   new
-  call setline(1, range(10))
+  call setline(1, 10->range())
   write Xfuncrange1
   call assert_fails('5,8call EditAnotherFile()', 'E16:')
 
@@ -1544,7 +1544,7 @@
   call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
 
   " Only results containing "f"
-  let files = readdir('Xdir', { x -> stridx(x, 'f') !=- 1 })
+  let files = 'Xdir'->readdir({ x -> stridx(x, 'f') !=- 1 })
   call assert_equal(['foo.txt'], sort(files))
 
   " Only .txt files
diff --git a/src/testdir/test_reltime.vim b/src/testdir/test_reltime.vim
index 404ea3f..e25c3ce 100644
--- a/src/testdir/test_reltime.vim
+++ b/src/testdir/test_reltime.vim
@@ -8,11 +8,11 @@
   let now = reltime()
   sleep 10m
   let later = reltime()
-  let elapsed = reltime(now)
+  let elapsed = now->reltime()
   call assert_true(reltimestr(elapsed) =~ '0\.0')
-  call assert_true(reltimestr(elapsed) != '0.0')
+  call assert_true(elapsed->reltimestr() != '0.0')
   call assert_true(reltimefloat(elapsed) < 0.1)
-  call assert_true(reltimefloat(elapsed) > 0.0)
+  call assert_true(elapsed->reltimefloat() > 0.0)
 
   let same = reltime(now, now)
   call assert_equal('0.000', split(reltimestr(same))[0][:4])
diff --git a/src/testdir/test_rename.vim b/src/testdir/test_rename.vim
index 2311caf..3887fcf 100644
--- a/src/testdir/test_rename.vim
+++ b/src/testdir/test_rename.vim
@@ -25,7 +25,7 @@
   set fileignorecase
   call writefile(['foo'], 'Xrename')
 
-  call assert_equal(0, rename('Xrename', 'XRENAME'))
+  call assert_equal(0, 'Xrename'->rename('XRENAME'))
 
   call assert_equal(['foo'], readfile('XRENAME'))
 
diff --git a/src/version.c b/src/version.c
index d61b59c..420d1ff 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1987,
+/**/
     1986,
 /**/
     1985,