Mercurial > vim
changeset 24820:b1093c1ac109 v8.2.2948
patch 8.2.2948: substitute() accepts a number but not a float expression
Commit: https://github.com/vim/vim/commit/7a2217bedd223df4c8bbebe731bf0b5fe8532533
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jun 6 12:33:49 2021 +0200
patch 8.2.2948: substitute() accepts a number but not a float expression
Problem: Substitute() accepts a number but not a float expression.
Solution: Also accept a float. (closes https://github.com/vim/vim/issues/8331)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 06 Jun 2021 12:45:02 +0200 |
parents | 8b478ce70f4d |
children | 0218caefb9b8 |
files | src/testdir/test_substitute.vim src/typval.c src/version.c |
diffstat | 3 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_substitute.vim +++ b/src/testdir/test_substitute.vim @@ -1,6 +1,7 @@ " Tests for multi-line regexps with ":s". source shared.vim +source check.vim func Test_multiline_subst() enew! @@ -453,6 +454,13 @@ func Test_substitute_partial() call assert_fails("call substitute('123', '2', Replacer, 'g')", 'E118:') endfunc +func Test_substitute_float() + CheckFeature float + + call assert_equal('number 1.23', substitute('number ', '$', { -> 1.23 }, '')) + vim9 assert_equal('number 1.23', substitute('number ', '$', () => 1.23, '')) +endfunc + " Tests for *sub-replace-special* and *sub-replace-expression* on :substitute. " Execute a list of :substitute command tests
--- a/src/typval.c +++ b/src/typval.c @@ -462,8 +462,13 @@ tv_get_string_buf_chk_strict(typval_T *v break; case VAR_FLOAT: #ifdef FEAT_FLOAT - emsg(_(e_float_as_string)); - break; + if (strict) + { + emsg(_(e_float_as_string)); + break; + } + vim_snprintf((char *)buf, NUMBUFLEN, "%g", varp->vval.v_float); + return buf; #endif case VAR_STRING: if (varp->vval.v_string != NULL)