changeset 17676:14ac8c31e598 v8.1.1835

patch 8.1.1835: cannot use printf() as a method commit https://github.com/vim/vim/commit/fd8ca21b3ff207e44891aef922935d4adcd140cf Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 10 00:13:30 2019 +0200 patch 8.1.1835: cannot use printf() as a method Problem: Cannot use printf() as a method. Solution: Pass the base as the second argument to printf().
author Bram Moolenaar <Bram@vim.org>
date Sat, 10 Aug 2019 00:15:05 +0200
parents 6407bb09ec9b
children f62d6f01c3fa
files runtime/doc/eval.txt src/evalfunc.c src/testdir/test_method.vim src/version.c
diffstat 4 files changed, 17 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -6739,7 +6739,11 @@ printf({fmt}, {expr1} ...)				*printf()*
 <		May result in:
 			"  99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
 
-		Often used items are:
+		When used as a |method| the base is passed as the second
+		argument: >
+			Compute()->printf("result: %d")
+
+<		Often used items are:
 		  %s	string
 		  %6S	string right-aligned in 6 display cells
 		  %6s	string right-aligned in 6 bytes
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -733,7 +733,7 @@ static funcentry_T global_functions[] =
     {"pow",		2, 2, 0,	  f_pow},
 #endif
     {"prevnonblank",	1, 1, 0,	  f_prevnonblank},
-    {"printf",		1, 19, 0,	  f_printf},
+    {"printf",		1, 19, FEARG_2,	  f_printf},
 #ifdef FEAT_JOB_CHANNEL
     {"prompt_setcallback", 2, 2, 0,	  f_prompt_setcallback},
     {"prompt_setinterrupt", 2, 2, 0,	  f_prompt_setinterrupt},
--- a/src/testdir/test_method.vim
+++ b/src/testdir/test_method.vim
@@ -67,13 +67,15 @@ func Test_dict_method()
 endfunc
 
 func Test_string_method()
-  call assert_equal(['1', '2', '3'], '1 2 3'->split())
-  call assert_equal([1, 2, 3], '1 2 3'->split()->map({i, v -> str2nr(v)}))
-  call assert_equal([65, 66, 67], 'ABC'->str2list())
-  call assert_equal(3, 'ABC'->strlen())
-  call assert_equal('a^Mb^[c', "a\rb\ec"->strtrans())
-  call assert_equal(4, "aあb"->strwidth())
-  call assert_equal('axc', 'abc'->substitute('b', 'x', ''))
+  eval '1 2 3'->split()->assert_equal(['1', '2', '3'])
+  eval '1 2 3'->split()->map({i, v -> str2nr(v)})->assert_equal([1, 2, 3])
+  eval 'ABC'->str2list()->assert_equal([65, 66, 67])
+  eval 'ABC'->strlen()->assert_equal(3)
+  eval "a\rb\ec"->strtrans()->assert_equal('a^Mb^[c')
+  eval "aあb"->strwidth()->assert_equal(4)
+  eval 'abc'->substitute('b', 'x', '')->assert_equal('axc')
+
+  eval 'abc'->printf('the %s arg')->assert_equal('the abc arg')
 endfunc
 
 func Test_method_append()
--- 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 */
 /**/
+    1835,
+/**/
     1834,
 /**/
     1833,