summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkuuote <znmxodq1@gmail.com>2021-10-04 22:17:36 +0100
committerBram Moolenaar <Bram@vim.org>2021-10-04 22:17:36 +0100
commit08d7b1c82866a61b61a55e55b6c190dba04e54ea (patch)
treed611343ead8155cda84d941ee25c6e6127814915
parent965d2edbce1a8ccba96925be5ac4575981f68949 (diff)
downloadvim-git-08d7b1c82866a61b61a55e55b6c190dba04e54ea.tar.gz
patch 8.2.3475: expression register set by not executed put commandv8.2.3475
Problem: Expression register set by not executed put command. Solution: Do not set the register if the command is skipped. (closes #8909)
-rw-r--r--src/ex_docmd.c7
-rw-r--r--src/testdir/test_excmd.vim8
-rw-r--r--src/version.c2
3 files changed, 15 insertions, 2 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 617de6f06..2c55e67bc 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2382,9 +2382,12 @@ do_one_cmd(
// for '=' register: accept the rest of the line as an expression
if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
{
- set_expr_line(vim_strsave(ea.arg), &ea);
+ if (!ea.skip)
+ {
+ set_expr_line(vim_strsave(ea.arg), &ea);
+ did_set_expr_line = TRUE;
+ }
ea.arg += STRLEN(ea.arg);
- did_set_expr_line = TRUE;
}
#endif
ea.arg = skipwhite(ea.arg);
diff --git a/src/testdir/test_excmd.vim b/src/testdir/test_excmd.vim
index b080575e4..c3a911f6c 100644
--- a/src/testdir/test_excmd.vim
+++ b/src/testdir/test_excmd.vim
@@ -647,4 +647,12 @@ func Test_command_not_implemented_E319()
endif
endfunc
+func Test_not_break_expression_register()
+ call setreg('=', '1+1')
+ if 0
+ put =1
+ endif
+ call assert_equal('1+1', getreg('=', 1))
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index e92719172..e6a4b1ad5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3475,
+/**/
3474,
/**/
3473,