Mercurial > vim
diff src/evalfunc.c @ 18080:a6d218f99ff7 v8.1.2035
patch 8.1.2035: recognizing octal numbers is confusing
Commit: https://github.com/vim/vim/commit/60a8de28d11595f4df0419ece8afa7d6accc9fbd
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Sep 15 14:33:22 2019 +0200
patch 8.1.2035: recognizing octal numbers is confusing
Problem: Recognizing octal numbers is confusing.
Solution: Introduce scriptversion 4: do not use octal and allow for single
quote inside numbers.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 15 Sep 2019 14:45:04 +0200 |
parents | a9f1656f13c9 |
children | 9d6832a5426f |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -728,7 +728,7 @@ static funcentry_T global_functions[] = {"str2float", 1, 1, FEARG_1, f_str2float}, #endif {"str2list", 1, 2, FEARG_1, f_str2list}, - {"str2nr", 1, 2, FEARG_1, f_str2nr}, + {"str2nr", 1, 3, FEARG_1, f_str2nr}, {"strcharpart", 2, 3, FEARG_1, f_strcharpart}, {"strchars", 1, 2, FEARG_1, f_strchars}, {"strdisplaywidth", 1, 2, FEARG_1, f_strdisplaywidth}, @@ -7323,7 +7323,7 @@ f_str2nr(typval_T *argvars, typval_T *re int base = 10; char_u *p; varnumber_T n; - int what; + int what = 0; int isneg; if (argvars[1].v_type != VAR_UNKNOWN) @@ -7334,6 +7334,8 @@ f_str2nr(typval_T *argvars, typval_T *re emsg(_(e_invarg)); return; } + if (argvars[2].v_type != VAR_UNKNOWN && tv_get_number(&argvars[2])) + what |= STR2NR_QUOTE; } p = skipwhite(tv_get_string(&argvars[0])); @@ -7342,10 +7344,9 @@ f_str2nr(typval_T *argvars, typval_T *re p = skipwhite(p + 1); switch (base) { - case 2: what = STR2NR_BIN + STR2NR_FORCE; break; - case 8: what = STR2NR_OCT + STR2NR_FORCE; break; - case 16: what = STR2NR_HEX + STR2NR_FORCE; break; - default: what = 0; + case 2: what |= STR2NR_BIN + STR2NR_FORCE; break; + case 8: what |= STR2NR_OCT + STR2NR_FORCE; break; + case 16: what |= STR2NR_HEX + STR2NR_FORCE; break; } vim_str2nr(p, NULL, NULL, what, &n, NULL, 0, FALSE); // Text after the number is silently ignored.