Patch 8.2.2810

7 views
Skip to first unread message

Bram Moolenaar

unread,
Apr 25, 2021, 8:49:46 AM4/25/21
to vim...@googlegroups.com

Patch 8.2.2810
Problem: Vim9: crash when calling a function in a substitute expression.
Solution: Set the instructions back to the substitute expression
instrunctions. (closes #8148)
Files: src/vim9execute.c, src/testdir/test_vim9_cmd.vim


*** ../vim-8.2.2809/src/vim9execute.c 2021-04-20 22:16:35.355248931 +0200
--- src/vim9execute.c 2021-04-25 14:39:14.067244567 +0200
***************
*** 601,606 ****
--- 601,612 ----
+ STACK_FRAME_IDX_OFF)->vval.v_number;
ectx->ec_instr = INSTRUCTIONS(prev_dfunc);

+ // If the call was inside an ISN_SUBSTITUTE instruction need to use its
+ // list of instructions.
+ if (ectx->ec_instr[ectx->ec_iidx - 1].isn_type == ISN_SUBSTITUTE)
+ ectx->ec_instr = ectx->ec_instr[ectx->ec_iidx - 1]
+ .isn_arg.subs.subs_instr;
+
if (floc == NULL)
ectx->ec_funclocal.floc_restore_cmdmod = FALSE;
else
*** ../vim-8.2.2809/src/testdir/test_vim9_cmd.vim 2021-04-21 16:00:06.711976510 +0200
--- src/testdir/test_vim9_cmd.vim 2021-04-25 14:47:07.125192407 +0200
***************
*** 1194,1203 ****
endfor
assert_equal('yes no abc', getline(1))

CheckDefFailure(['s/from/\="x")/'], 'E488:')
CheckDefFailure(['s/from/\="x"/9'], 'E488:')

! bwipe!
enddef

def Test_redir_to_var()
--- 1194,1224 ----
endfor
assert_equal('yes no abc', getline(1))

+ bwipe!
+
CheckDefFailure(['s/from/\="x")/'], 'E488:')
CheckDefFailure(['s/from/\="x"/9'], 'E488:')

! # When calling a function the right instruction list needs to be restored.
! var lines =<< trim END
! vim9script
! def Foo()
! Bar([])
! enddef
! def Bar(l: list<number>)
! s/^/\=Rep()/
! for n in l[:]
! endfor
! enddef
! def Rep(): string
! return 'rep'
! enddef
! new
! Foo()
! assert_equal('rep', getline(1))
! bwipe!
! END
! CheckScriptSuccess(lines)
enddef

def Test_redir_to_var()
*** ../vim-8.2.2809/src/version.c 2021-04-25 13:54:38.992836747 +0200
--- src/version.c 2021-04-25 14:44:18.417893652 +0200
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 2810,
/**/

--
Living in Hollywood is like living in a bowl of granola. What ain't
fruits and nuts is flakes.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages