changeset 25883:826c36b4640b v8.2.3475

patch 8.2.3475: expression register set by not executed put command Commit: https://github.com/vim/vim/commit/08d7b1c82866a61b61a55e55b6c190dba04e54ea Author: kuuote <znmxodq1@gmail.com> Date: Mon Oct 4 22:17:36 2021 +0100 patch 8.2.3475: expression register set by not executed put command Problem: Expression register set by not executed put command. Solution: Do not set the register if the command is skipped. (closes https://github.com/vim/vim/issues/8909)
author Bram Moolenaar <Bram@vim.org>
date Mon, 04 Oct 2021 23:30:03 +0200
parents c7830dd110a7
children 25fbd356bb09
files src/ex_docmd.c src/testdir/test_excmd.vim src/version.c
diffstat 3 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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
--- 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,