Patch 8.2.1099
Problem:    Vim9: cannot use line break in :cexpr argument.
Solution:   Check for line break.
Files:      src/eval.c, src/testdir/test_vim9_script.vim


*** ../vim-8.2.1098/src/eval.c  2020-06-30 20:55:11.332334734 +0200
--- src/eval.c  2020-06-30 21:17:39.048857842 +0200
***************
*** 153,158 ****
--- 153,170 ----
  }
  #endif
  
+     static void
+ fill_evalarg_from_eap(evalarg_T *evalarg, exarg_T *eap, int skip)
+ {
+     CLEAR_FIELD(*evalarg);
+     evalarg->eval_flags = skip ? 0 : EVAL_EVALUATE;
+     if (eap != NULL && getline_equal(eap->getline, eap->cookie, 
getsourceline))
+     {
+       evalarg->eval_getline = eap->getline;
+       evalarg->eval_cookie = eap->cookie;
+     }
+ }
+ 
  /*
   * Top level evaluation function, returning a boolean.
   * Sets "error" to TRUE if there was an error.
***************
*** 169,181 ****
      varnumber_T       retval = FALSE;
      evalarg_T evalarg;
  
!     CLEAR_FIELD(evalarg);
!     evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE;
!     if (eap != NULL && getline_equal(eap->getline, eap->cookie, 
getsourceline))
!     {
!       evalarg.eval_getline = eap->getline;
!       evalarg.eval_cookie = eap->cookie;
!     }
  
      if (skip)
        ++emsg_skip;
--- 181,187 ----
      varnumber_T       retval = FALSE;
      evalarg_T evalarg;
  
!     fill_evalarg_from_eap(&evalarg, eap, skip);
  
      if (skip)
        ++emsg_skip;
***************
*** 335,347 ****
      char_u    *retval;
      evalarg_T evalarg;
  
!     CLEAR_FIELD(evalarg);
!     evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE;
!     if (eap != NULL && getline_equal(eap->getline, eap->cookie, 
getsourceline))
!     {
!       evalarg.eval_getline = eap->getline;
!       evalarg.eval_cookie = eap->cookie;
!     }
      if (skip)
        ++emsg_skip;
      if (eval0(arg, &tv, eap, &evalarg) == FAIL || skip)
--- 341,347 ----
      char_u    *retval;
      evalarg_T evalarg;
  
!     fill_evalarg_from_eap(&evalarg, eap, skip);
      if (skip)
        ++emsg_skip;
      if (eval0(arg, &tv, eap, &evalarg) == FAIL || skip)
***************
*** 535,546 ****
  eval_expr(char_u *arg, exarg_T *eap)
  {
      typval_T  *tv;
  
      tv = ALLOC_ONE(typval_T);
!     if (tv != NULL && eval0(arg, tv, eap, &EVALARG_EVALUATE) == FAIL)
        VIM_CLEAR(tv);
-     clear_evalarg(&EVALARG_EVALUATE, eap);
  
      return tv;
  }
  
--- 535,549 ----
  eval_expr(char_u *arg, exarg_T *eap)
  {
      typval_T  *tv;
+     evalarg_T evalarg;
+ 
+     fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip);
  
      tv = ALLOC_ONE(typval_T);
!     if (tv != NULL && eval0(arg, tv, eap, &evalarg) == FAIL)
        VIM_CLEAR(tv);
  
+     clear_evalarg(&evalarg, eap);
      return tv;
  }
  
***************
*** 5239,5251 ****
      int               called_emsg_before = called_emsg;
      evalarg_T evalarg;
  
!     CLEAR_FIELD(evalarg);
!     evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
!     if (getline_equal(eap->getline, eap->cookie, getsourceline))
!     {
!       evalarg.eval_getline = eap->getline;
!       evalarg.eval_cookie = eap->cookie;
!     }
  
      if (eap->skip)
        ++emsg_skip;
--- 5242,5248 ----
      int               called_emsg_before = called_emsg;
      evalarg_T evalarg;
  
!     fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip);
  
      if (eap->skip)
        ++emsg_skip;
*** ../vim-8.2.1098/src/testdir/test_vim9_script.vim    2020-06-30 
20:55:11.336334711 +0200
--- src/testdir/test_vim9_script.vim    2020-06-30 21:08:36.935859185 +0200
***************
*** 599,604 ****
--- 599,618 ----
    CheckScriptSuccess(lines)
  enddef
  
+ def Test_cexpr_vimscript()
+   " only checks line continuation
+   set errorformat=File\ %f\ line\ %l
+   let lines =<< trim END
+       vim9script
+       cexpr 'File'
+                 .. ' someFile' ..
+                    ' line 19'
+       assert_equal(19, getqflist()[0].lnum)
+   END
+   CheckScriptSuccess(lines)
+   set errorformat&
+ enddef
+ 
  if has('channel')
    let someJob = test_null_job()
  
*** ../vim-8.2.1098/src/version.c       2020-06-30 20:55:11.336334711 +0200
--- src/version.c       2020-06-30 21:09:02.243723196 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1099,
  /**/

-- 
Computers make very fast, very accurate, mistakes.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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/202006301919.05UJJ1A9972263%40masaka.moolenaar.net.

Raspunde prin e-mail lui