comparison src/evalfunc.c @ 17855:285f7a700185 v8.1.1924

patch 8.1.1924: using empty string for current buffer is unexpected Commit: https://github.com/vim/vim/commit/a8eee21e75324d199acb1663cb5009e03014a13a Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 24 22:14:58 2019 +0200 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().
author Bram Moolenaar <Bram@vim.org>
date Sat, 24 Aug 2019 22:30:03 +0200
parents 73ddc462979d
children 4935244c1128
comparison
equal deleted inserted replaced
17854:9cd094b68fa5 17855:285f7a700185
455 {"browse", 4, 4, 0, f_browse}, 455 {"browse", 4, 4, 0, f_browse},
456 {"browsedir", 2, 2, 0, f_browsedir}, 456 {"browsedir", 2, 2, 0, f_browsedir},
457 {"bufadd", 1, 1, FEARG_1, f_bufadd}, 457 {"bufadd", 1, 1, FEARG_1, f_bufadd},
458 {"bufexists", 1, 1, FEARG_1, f_bufexists}, 458 {"bufexists", 1, 1, FEARG_1, f_bufexists},
459 {"buffer_exists", 1, 1, FEARG_1, f_bufexists}, // obsolete 459 {"buffer_exists", 1, 1, FEARG_1, f_bufexists}, // obsolete
460 {"buffer_name", 1, 1, 0, f_bufname}, // obsolete 460 {"buffer_name", 0, 1, FEARG_1, f_bufname}, // obsolete
461 {"buffer_number", 1, 1, 0, f_bufnr}, // obsolete 461 {"buffer_number", 0, 1, FEARG_1, f_bufnr}, // obsolete
462 {"buflisted", 1, 1, FEARG_1, f_buflisted}, 462 {"buflisted", 1, 1, FEARG_1, f_buflisted},
463 {"bufload", 1, 1, FEARG_1, f_bufload}, 463 {"bufload", 1, 1, FEARG_1, f_bufload},
464 {"bufloaded", 1, 1, FEARG_1, f_bufloaded}, 464 {"bufloaded", 1, 1, FEARG_1, f_bufloaded},
465 {"bufname", 1, 1, FEARG_1, f_bufname}, 465 {"bufname", 0, 1, FEARG_1, f_bufname},
466 {"bufnr", 1, 2, FEARG_1, f_bufnr}, 466 {"bufnr", 0, 2, FEARG_1, f_bufnr},
467 {"bufwinid", 1, 1, FEARG_1, f_bufwinid}, 467 {"bufwinid", 1, 1, FEARG_1, f_bufwinid},
468 {"bufwinnr", 1, 1, FEARG_1, f_bufwinnr}, 468 {"bufwinnr", 1, 1, FEARG_1, f_bufwinnr},
469 {"byte2line", 1, 1, FEARG_1, f_byte2line}, 469 {"byte2line", 1, 1, FEARG_1, f_byte2line},
470 {"byteidx", 2, 2, FEARG_1, f_byteidx}, 470 {"byteidx", 2, 2, FEARG_1, f_byteidx},
471 {"byteidxcomp", 2, 2, FEARG_1, f_byteidxcomp}, 471 {"byteidxcomp", 2, 2, FEARG_1, f_byteidxcomp},
1818 static void 1818 static void
1819 f_bufname(typval_T *argvars, typval_T *rettv) 1819 f_bufname(typval_T *argvars, typval_T *rettv)
1820 { 1820 {
1821 buf_T *buf; 1821 buf_T *buf;
1822 1822
1823 (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ 1823 if (argvars[0].v_type == VAR_UNKNOWN)
1824 ++emsg_off; 1824 buf = curbuf;
1825 buf = tv_get_buf(&argvars[0], FALSE); 1825 else
1826 {
1827 (void)tv_get_number(&argvars[0]); // issue errmsg if type error
1828 ++emsg_off;
1829 buf = tv_get_buf(&argvars[0], FALSE);
1830 --emsg_off;
1831 }
1826 rettv->v_type = VAR_STRING; 1832 rettv->v_type = VAR_STRING;
1827 if (buf != NULL && buf->b_fname != NULL) 1833 if (buf != NULL && buf->b_fname != NULL)
1828 rettv->vval.v_string = vim_strsave(buf->b_fname); 1834 rettv->vval.v_string = vim_strsave(buf->b_fname);
1829 else 1835 else
1830 rettv->vval.v_string = NULL; 1836 rettv->vval.v_string = NULL;
1831 --emsg_off;
1832 } 1837 }
1833 1838
1834 /* 1839 /*
1835 * "bufnr(expr)" function 1840 * "bufnr(expr)" function
1836 */ 1841 */
1839 { 1844 {
1840 buf_T *buf; 1845 buf_T *buf;
1841 int error = FALSE; 1846 int error = FALSE;
1842 char_u *name; 1847 char_u *name;
1843 1848
1844 (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ 1849 if (argvars[0].v_type == VAR_UNKNOWN)
1845 ++emsg_off; 1850 buf = curbuf;
1846 buf = tv_get_buf(&argvars[0], FALSE); 1851 else
1847 --emsg_off; 1852 {
1848 1853 (void)tv_get_number(&argvars[0]); // issue errmsg if type error
1849 /* If the buffer isn't found and the second argument is not zero create a 1854 ++emsg_off;
1850 * new buffer. */ 1855 buf = tv_get_buf(&argvars[0], FALSE);
1856 --emsg_off;
1857 }
1858
1859 // If the buffer isn't found and the second argument is not zero create a
1860 // new buffer.
1851 if (buf == NULL 1861 if (buf == NULL
1852 && argvars[1].v_type != VAR_UNKNOWN 1862 && argvars[1].v_type != VAR_UNKNOWN
1853 && tv_get_number_chk(&argvars[1], &error) != 0 1863 && tv_get_number_chk(&argvars[1], &error) != 0
1854 && !error 1864 && !error
1855 && (name = tv_get_string_chk(&argvars[0])) != NULL 1865 && (name = tv_get_string_chk(&argvars[0])) != NULL