Patch 8.2.2857
Problem:    Vim9: exception in ISN_INSTR caught at wrong level.
Solution:   Set the starting trylevel in exec_instructions(). (closes #8214)
Files:      src/vim9compile.c, src/vim9execute.c, src/globals.h,
            src/testdir/test_vim9_builtin.vim


*** ../vim-8.2.2856/src/vim9compile.c   2021-05-09 23:19:17.093003109 +0200
--- src/vim9compile.c   2021-05-16 15:15:52.488955474 +0200
***************
*** 3131,3137 ****
      s = skipwhite(s);
      trailing_error = *s != NUL;
  
!     if (expr_res == FAIL || trailing_error)
      {
        if (trailing_error)
            semsg(_(e_trailing_arg), s);
--- 3131,3138 ----
      s = skipwhite(s);
      trailing_error = *s != NUL;
  
!     if (expr_res == FAIL || trailing_error
!                                      || ga_grow(&cctx->ctx_instr, 1) == FAIL)
      {
        if (trailing_error)
            semsg(_(e_trailing_arg), s);
***************
*** 3185,3191 ****
            return FAIL;
        ++*argcount;
  
!       if (is_searchpair && *argcount == 5
                && cctx->ctx_instr.ga_len == instr_count + 1)
        {
            isn_T *isn = ((isn_T *)cctx->ctx_instr.ga_data) + instr_count;
--- 3186,3192 ----
            return FAIL;
        ++*argcount;
  
!       if (is_searchpair && *argcount >= 5
                && cctx->ctx_instr.ga_len == instr_count + 1)
        {
            isn_T *isn = ((isn_T *)cctx->ctx_instr.ga_data) + instr_count;
*** ../vim-8.2.2856/src/vim9execute.c   2021-05-09 23:19:17.093003109 +0200
--- src/vim9execute.c   2021-05-16 15:16:01.504916907 +0200
***************
*** 1295,1300 ****
--- 1295,1303 ----
      // Start execution at the first instruction.
      ectx->ec_iidx = 0;
  
+     // Only catch exceptions in this instruction list.
+     ectx->ec_trylevel_at_start = trylevel;
+ 
      for (;;)
      {
        isn_T       *iptr;
***************
*** 4158,4164 ****
      ga_init2(&ectx.ec_trystack, sizeof(trycmd_T), 10);
      ga_init2(&ectx.ec_funcrefs, sizeof(partial_T *), 10);
      ectx.ec_did_emsg_before = did_emsg_before;
-     ectx.ec_trylevel_at_start = trylevel;
  
      idx = argc - ufunc->uf_args.ga_len;
      if (idx > 0 && ufunc->uf_va_name == NULL)
--- 4161,4166 ----
*** ../vim-8.2.2856/src/globals.h       2021-05-09 23:19:17.089003124 +0200
--- src/globals.h       2021-05-16 15:17:04.484647384 +0200
***************
*** 1616,1622 ****
  EXTERN char e_invargval[]     INIT(= N_("E475: Invalid value for argument 
%s"));
  EXTERN char e_invargNval[]    INIT(= N_("E475: Invalid value for argument %s: 
%s"));
  #ifdef FEAT_EVAL
! EXTERN char e_invexpr2[]      INIT(= N_("E15: Invalid expression: %s"));
  #endif
  EXTERN char e_invrange[]      INIT(= N_("E16: Invalid range"));
  #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
--- 1616,1622 ----
  EXTERN char e_invargval[]     INIT(= N_("E475: Invalid value for argument 
%s"));
  EXTERN char e_invargNval[]    INIT(= N_("E475: Invalid value for argument %s: 
%s"));
  #ifdef FEAT_EVAL
! EXTERN char e_invexpr2[]      INIT(= N_("E15: Invalid expression: \"%s\""));
  #endif
  EXTERN char e_invrange[]      INIT(= N_("E16: Invalid range"));
  #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
*** ../vim-8.2.2856/src/testdir/test_vim9_builtin.vim   2021-05-07 
19:44:15.500477283 +0200
--- src/testdir/test_vim9_builtin.vim   2021-05-16 15:22:34.355253740 +0200
***************
*** 1006,1011 ****
--- 1006,1025 ----
    normal 0f{
    assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col'))
  
+   var lines =<< trim END
+       vim9script
+       setline(1, '()')
+       normal gg
+       def Fail()
+         try
+           searchpairpos('(', '', ')', 'nW', '[0]->map("")')
+         catch
+         endtry
+       enddef
+       Fail()
+   END
+   CheckScriptFailure(lines, 'E15:')
+ 
    bwipe!
  enddef
  
*** ../vim-8.2.2856/src/version.c       2021-05-15 23:21:00.799930024 +0200
--- src/version.c       2021-05-16 15:13:46.493494474 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     2857,
  /**/

-- 
Facepalm statement #6: "Estland is a fantasy place, just like Middle Earth and
Madagaskar"

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202105161325.14GDPZ953576295%40masaka.moolenaar.net.

Raspunde prin e-mail lui