patch 8.2.4319: :put does not work properly in compiled function
Problem: :put does not work properly in compiled function. (John Beckett)
Solution: Adjust the direction when using line zero.
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 51a62e0..0ac69e8 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -1156,7 +1156,13 @@
:2put =['a', 'b', 'c']
assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
+ :0put ='first'
+ assert_equal('first', getline(1))
+ :1put! ='first again'
+ assert_equal('first again', getline(1))
+
# compute range at runtime
+ :%del
setline(1, range(1, 8))
@a = 'aaa'
:$-2put a
diff --git a/src/version.c b/src/version.c
index f30ba25..3535adb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4319,
+/**/
4318,
/**/
4317,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 6c79ff7..961e450 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -4617,7 +4617,12 @@
// :put! above cursor
dir = BACKWARD;
else if (lnum >= 0)
- curwin->w_cursor.lnum = iptr->isn_arg.put.put_lnum;
+ {
+ curwin->w_cursor.lnum = lnum;
+ if (lnum == 0)
+ // check_cursor() below will move to line 1
+ dir = BACKWARD;
+ }
if (regname == '=')
{