From: Bram Moolenaar Date: Sun, 6 Jun 2021 10:33:49 +0000 (+0200) Subject: patch 8.2.2948: substitute() accepts a number but not a float expression X-Git-Tag: v8.2.2948 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7a2217bedd223df4c8bbebe731bf0b5fe8532533;p=vim 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 #8331) --- diff --git a/src/testdir/test_substitute.vim b/src/testdir/test_substitute.vim index 4c99f8187..0c367485b 100644 --- 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 index f08d1aa42..a17dbef7e 100644 --- a/src/typval.c +++ b/src/typval.c @@ -462,8 +462,13 @@ tv_get_string_buf_chk_strict(typval_T *varp, char_u *buf, int strict) 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 index 7bc2afcec..b9df68801 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2948, /**/ 2947, /**/