patch 8.2.4840: heredoc expression evaluated even when skipping
Problem: Heredoc expression evaluated even when skipping.
Solution: Don't evaluate when "skip" is set. (closes #10306)
diff --git a/src/evalvars.c b/src/evalvars.c
index ffa7e93..21a0e5b 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -835,7 +835,7 @@
}
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 2606fa2..32f91f6 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -509,20 +509,24 @@
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 @@
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 @@
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 c3b6326..0570614 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4840,
+/**/
4839,
/**/
4838,