changeset 22002:c9517003821d v8.2.1550

patch 8.2.1550: Vim9: bufname('%') gives an error Commit: https://github.com/vim/vim/commit/02aaad91094939758e053588dd23ebda467eea29 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 30 21:26:57 2020 +0200 patch 8.2.1550: Vim9: bufname('%') gives an error Problem: Vim9: bufname('%') gives an error. Solution: Only give an error for wrong argument type. (closes https://github.com/vim/vim/issues/6807)
author Bram Moolenaar <Bram@vim.org>
date Sun, 30 Aug 2020 21:30:03 +0200
parents b77a58769130
children b22488a6de96
files src/evalbuffer.c src/testdir/test_vim9_func.vim src/version.c
diffstat 3 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -359,15 +359,20 @@ f_bufloaded(typval_T *argvars, typval_T 
 f_bufname(typval_T *argvars, typval_T *rettv)
 {
     buf_T	*buf;
+    typval_T	*tv = &argvars[0];
 
-    if (argvars[0].v_type == VAR_UNKNOWN)
+    if (tv->v_type == VAR_UNKNOWN)
 	buf = curbuf;
     else
     {
-	(void)tv_get_number(&argvars[0]);	// issue errmsg if type error
 	++emsg_off;
-	buf = tv_get_buf(&argvars[0], FALSE);
+	buf = tv_get_buf(tv, FALSE);
 	--emsg_off;
+	if (buf == NULL
+		&& tv->v_type != VAR_NUMBER
+		&& tv->v_type != VAR_STRING)
+	    // issue errmsg for type error
+	    (void)tv_get_number(tv);
     }
     rettv->v_type = VAR_STRING;
     if (buf != NULL && buf->b_fname != NULL)
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1435,6 +1435,14 @@ def Test_setreg()
   assert_equal(reginfo, getreginfo('a'))
 enddef 
 
+def Test_bufname()
+  split SomeFile
+  assert_equal('SomeFile', bufname('%'))
+  edit OtherFile
+  assert_equal('SomeFile', bufname('#'))
+  close
+enddef
+
 def Fibonacci(n: number): number
   if n < 2
     return n
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1550,
+/**/
     1549,
 /**/
     1548,