# HG changeset patch # User Bram Moolenaar # Date 1622976302 -7200 # Node ID b1093c1ac109042936dfc8ad1d91c883fb2a606a # Parent 8b478ce70f4d89861370ad1259cf9fabd98b4a12 patch 8.2.2948: substitute() accepts a number but not a float expression Commit: https://github.com/vim/vim/commit/7a2217bedd223df4c8bbebe731bf0b5fe8532533 Author: Bram Moolenaar 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) diff --git a/src/testdir/test_substitute.vim b/src/testdir/test_substitute.vim --- 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 diff --git a/src/typval.c b/src/typval.c --- 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) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2948, +/**/ 2947, /**/ 2946,