patch 8.1.1924: using empty string for current buffer is unexpected
Problem: Using empty string for current buffer is unexpected.
Solution: Make the argument optional for bufname() and bufnr().
diff --git a/src/evalfunc.c b/src/evalfunc.c
index c5ec21d..07e5993 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -457,13 +457,13 @@
{"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
+ {"buffer_name", 0, 1, FEARG_1, f_bufname}, // obsolete
+ {"buffer_number", 0, 1, FEARG_1, f_bufnr}, // obsolete
{"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},
+ {"bufname", 0, 1, FEARG_1, f_bufname},
+ {"bufnr", 0, 2, FEARG_1, f_bufnr},
{"bufwinid", 1, 1, FEARG_1, f_bufwinid},
{"bufwinnr", 1, 1, FEARG_1, f_bufwinnr},
{"byte2line", 1, 1, FEARG_1, f_byte2line},
@@ -1820,15 +1820,20 @@
{
buf_T *buf;
- (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */
- ++emsg_off;
- buf = tv_get_buf(&argvars[0], FALSE);
+ if (argvars[0].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);
+ --emsg_off;
+ }
rettv->v_type = VAR_STRING;
if (buf != NULL && buf->b_fname != NULL)
rettv->vval.v_string = vim_strsave(buf->b_fname);
else
rettv->vval.v_string = NULL;
- --emsg_off;
}
/*
@@ -1841,13 +1846,18 @@
int error = FALSE;
char_u *name;
- (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */
- ++emsg_off;
- buf = tv_get_buf(&argvars[0], FALSE);
- --emsg_off;
+ if (argvars[0].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);
+ --emsg_off;
+ }
- /* If the buffer isn't found and the second argument is not zero create a
- * new buffer. */
+ // If the buffer isn't found and the second argument is not zero create a
+ // new buffer.
if (buf == NULL
&& argvars[1].v_type != VAR_UNKNOWN
&& tv_get_number_chk(&argvars[1], &error) != 0
diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim
index a382a1a..daed3d4 100644
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -398,10 +398,10 @@
" make sure to use a new buffer number for x when it is loaded
bw! x
new
- let a = bufnr('')
+ let a = bufnr()
argedit x
- call assert_equal(a, bufnr(''))
- call assert_equal('x', bufname(''))
+ call assert_equal(a, bufnr())
+ call assert_equal('x', bufname())
%argd
bw! x
endfunc
diff --git a/src/version.c b/src/version.c
index 8ae3dda..cab79da 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1924,
+/**/
1923,
/**/
1922,