summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-04-28 16:51:41 +0100
committerBram Moolenaar <Bram@vim.org>2022-04-28 16:51:41 +0100
commit05c7f5d3d03440da6f69604f8c06c4e3d90d2a26 (patch)
tree2d91131156c98374b6a9b092307331f6fcceac11
parent0a748d91846a4c3422975acc0af78c806623c191 (diff)
patch 8.2.4840: heredoc expression evaluated even when skippingv8.2.4840
Problem: Heredoc expression evaluated even when skipping. Solution: Don't evaluate when "skip" is set. (closes #10306)
-rw-r--r--src/evalvars.c2
-rw-r--r--src/testdir/test_let.vim13
-rw-r--r--src/version.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/evalvars.c b/src/evalvars.c
index ffa7e93f71..21a0e5b79f 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -835,7 +835,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get, int vim9compile)
}
else
{
- if (evalstr)
+ if (evalstr && !eap->skip)
{
str = eval_all_expr_in_str(str);
if (str == NULL)
diff --git a/src/testdir/test_let.vim b/src/testdir/test_let.vim
index 2606fa276b..32f91f65bc 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -509,20 +509,24 @@ func Test_let_heredoc_eval()
let c = "abc`=str`d"
END
call assert_equal(['let a = 15', 'let b = 6 + 6', '', 'let c = "abcd"'], code)
+
let $TESTVAR = "Hello"
let code =<< eval trim END
let s = "`=$TESTVAR`"
END
call assert_equal(['let s = "Hello"'], code)
+
let code =<< eval END
let s = "`=$TESTVAR`"
END
call assert_equal([' let s = "Hello"'], code)
+
let a = 10
let data =<< eval END
`=a`
END
call assert_equal(['10'], data)
+
let x = 'X'
let code =<< eval trim END
let a = `abc`
@@ -530,12 +534,14 @@ END
let c = `
END
call assert_equal(['let a = `abc`', 'let b = X', 'let c = `'], code)
+
let code = 'xxx'
let code =<< eval trim END
let n = `=5 +
6`
END
call assert_equal('xxx', code)
+
let code =<< eval trim END
let n = `=min([1, 2]` + `=max([3, 4])`
END
@@ -562,6 +568,13 @@ END
LINES
call v9.CheckScriptFailure(lines, 'E15:')
+ " skipped heredoc
+ if 0
+ let msg =<< trim eval END
+ n is: `=n`
+ END
+ endif
+
" Test for sourcing a script containing a heredoc with invalid expression.
" Variable assignment should fail, if expression evaluation fails
new
diff --git a/src/version.c b/src/version.c
index c3b6326669..0570614fc8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4840,
+/**/
4839,
/**/
4838,