patch 8.1.2168: heredoc assignment not skipped in if block
Problem: Heredoc assignment not skipped in if block.
Solution: Check if "skip" is set. (closes #5063)
diff --git a/src/evalvars.c b/src/evalvars.c
index 08a9cc2..eb198fd 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -756,10 +756,13 @@
if (l != NULL)
{
rettv_list_set(&rettv, l);
- op[0] = '=';
- op[1] = NUL;
- (void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
+ if (!eap->skip)
+ {
+ op[0] = '=';
+ op[1] = NUL;
+ (void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
is_const, op);
+ }
clear_tv(&rettv);
}
}
diff --git a/src/testdir/test_let.vim b/src/testdir/test_let.vim
index 3bb5748..64d178c 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -295,4 +295,12 @@
app
END
call assert_equal(['something', 'app'], var1)
+
+ let check = []
+ if 0
+ let check =<< trim END
+ from heredoc
+ END
+ endif
+ call assert_equal([], check)
endfunc
diff --git a/src/version.c b/src/version.c
index 3bcd910..4f0e6fa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2168,
+/**/
2167,
/**/
2166,