Patch 8.2.2107
Problem:    Vim9: some errors not tested.
Solution:   Add tests.  Fix getting the right error.
Files:      src/vim9compile.c, src/testdir/test_vim9_assign.vim,
            src/testdir/test_vim9_expr.vim


*** ../vim-8.2.2106/src/vim9compile.c   2020-12-06 20:12:39.754611585 +0100
--- src/vim9compile.c   2020-12-07 21:36:42.291308500 +0100
***************
*** 2229,2234 ****
--- 2229,2235 ----
  {
      if (may_get_next_line(whitep, arg, cctx) == FAIL)
      {
+       SOURCING_LNUM = cctx->ctx_lnum + 1;
        emsg(_(e_line_incomplete));
        return FAIL;
      }
***************
*** 5300,5306 ****
  
        wp = op + oplen;
        p = skipwhite(wp);
!       if (may_get_next_line(wp, &p, cctx) == FAIL)
            return FAIL;
        if (compile_expr0(&p, cctx) == FAIL)
            return NULL;
--- 5301,5307 ----
  
        wp = op + oplen;
        p = skipwhite(wp);
!       if (may_get_next_line_error(wp, &p, cctx) == FAIL)
            return FAIL;
        if (compile_expr0(&p, cctx) == FAIL)
            return NULL;
*** ../vim-8.2.2106/src/testdir/test_vim9_assign.vim    2020-12-05 
13:40:57.499035073 +0100
--- src/testdir/test_vim9_assign.vim    2020-12-07 21:48:48.149029335 +0100
***************
*** 225,230 ****
--- 225,269 ----
    END
  enddef
  
+ def Test_assign_unpack()
+   var lines =<< trim END
+     var v1: number
+     var v2: number
+     [v1, v2] = [1, 2]
+     assert_equal(1, v1)
+     assert_equal(2, v2)
+   END
+   CheckDefAndScriptSuccess(lines)
+ 
+   lines =<< trim END
+       var v1: number
+       var v2: number
+       [v1, v2] = 
+   END
+   CheckDefFailure(lines, 'E1097:', 5)
+ 
+   lines =<< trim END
+       var v1: number
+       var v2: number
+       [v1, v2] = xxx
+   END
+   CheckDefFailure(lines, 'E1001:', 3)
+ 
+   lines =<< trim END
+       var v1: number
+       var v2: number
+       [v1, v2] = popup_clear()
+   END
+   CheckDefFailure(lines, 'E1031:', 3)
+ 
+   lines =<< trim END
+       var v1: number
+       var v2: number
+       [v1, v2] = ''
+   END
+   CheckDefFailure(lines, 'E1012: Type mismatch; expected list<any> but got 
string', 3)
+ enddef
+ 
  def Test_assign_linebreak()
    var nr: number
    nr =
***************
*** 237,243 ****
    assert_equal(12, nr)
    assert_equal(34, n2)
  
!   CheckDefFailure(["var x = #"], 'E1097:', 2)
  enddef
  
  def Test_assign_index()
--- 276,282 ----
    assert_equal(12, nr)
    assert_equal(34, n2)
  
!   CheckDefFailure(["var x = #"], 'E1097:', 3)
  enddef
  
  def Test_assign_index()
*** ../vim-8.2.2106/src/testdir/test_vim9_expr.vim      2020-12-06 
14:37:04.717124932 +0100
--- src/testdir/test_vim9_expr.vim      2020-12-07 21:43:30.630034576 +0100
***************
*** 188,195 ****
    call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1)
    call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1)
  
!   call CheckDefExecFailure(["var x = false ? "], 'E1097:', 2)
!   call CheckDefExecFailure(["var x = false ? 'one' : "], 'E1097:', 2)
  
    call CheckDefExecFailure(["var x = true ? xxx : 'foo'"], 'E1001:', 1)
    call CheckDefExecFailure(["var x = false ? 'foo' : xxx"], 'E1001:', 1)
--- 188,195 ----
    call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1)
    call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1)
  
!   call CheckDefExecFailure(["var x = false ? "], 'E1097:', 3)
!   call CheckDefExecFailure(["var x = false ? 'one' : "], 'E1097:', 3)
  
    call CheckDefExecFailure(["var x = true ? xxx : 'foo'"], 'E1001:', 1)
    call CheckDefExecFailure(["var x = false ? 'foo' : xxx"], 'E1001:', 1)
***************
*** 352,358 ****
    call CheckDefFailure(["var x = 1 ||2"], msg, 1)
    call CheckDefFailure(["var x = 1|| 2"], msg, 1)
  
!   call CheckDefFailure(["var x = false || "], 'E1097:', 2)
  
    call CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1)
    call CheckDefFailure(["var x = [] || false"], 'E1012:', 1)
--- 352,358 ----
    call CheckDefFailure(["var x = 1 ||2"], msg, 1)
    call CheckDefFailure(["var x = 1|| 2"], msg, 1)
  
!   call CheckDefFailure(["var x = false || "], 'E1097:', 3)
  
    call CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1)
    call CheckDefFailure(["var x = [] || false"], 'E1012:', 1)
***************
*** 587,593 ****
    CheckDefAndScriptSuccess(lines)
  
    CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
!   CheckDefFailure(["var x = 'a' == "], 'E1097:', 2)
  
    CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == 
[]', 'endif'], 'E691:', 4)
  enddef
--- 587,593 ----
    CheckDefAndScriptSuccess(lines)
  
    CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
!   CheckDefFailure(["var x = 'a' == "], 'E1097:', 3)
  
    CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == 
[]', 'endif'], 'E691:', 4)
  enddef
***************
*** 1359,1365 ****
    CheckDefAndScriptSuccess(lines)
  
    CheckDefFailure(["var x = 6 * xxx"], 'E1001:', 1)
!   CheckDefFailure(["var d = 6 * "], 'E1097:', 2)
  enddef
  
  def Test_expr6_vim9script()
--- 1359,1365 ----
    CheckDefAndScriptSuccess(lines)
  
    CheckDefFailure(["var x = 6 * xxx"], 'E1001:', 1)
!   CheckDefFailure(["var d = 6 * "], 'E1097:', 3)
  enddef
  
  def Test_expr6_vim9script()
***************
*** 1531,1537 ****
    assert_equal(234, nr)
  
    CheckDefFailure(["var x = <nr>123"], 'E1010:', 1)
!   CheckDefFailure(["var x = <number>"], 'E1097:', 2)
    CheckDefFailure(["var x = <number >123"], 'E1068:', 1)
    CheckDefFailure(["var x = <number 123"], 'E1104:', 1)
  enddef
--- 1531,1537 ----
    assert_equal(234, nr)
  
    CheckDefFailure(["var x = <nr>123"], 'E1010:', 1)
!   CheckDefFailure(["var x = <number>"], 'E1097:', 3)
    CheckDefFailure(["var x = <number >123"], 'E1068:', 1)
    CheckDefFailure(["var x = <number 123"], 'E1104:', 1)
  enddef
***************
*** 1684,1691 ****
    CheckDefExecFailure(["echo 1", "var x = [][0]", "echo 3"], 'E684:', 2)
  
    CheckDefExecFailure(["var x = g:list_mixed['xx']"], 'E1012:', 1)
!   CheckDefFailure(["var x = g:list_mixed["], 'E1097:', 2)
!   CheckDefFailure(["var x = g:list_mixed[0"], 'E1097:', 2)
    CheckDefExecFailure(["var x = g:list_empty[3]"], 'E684:', 1)
    CheckDefExecFailure(["var l: list<number> = [234, 'x']"], 'E1012:', 1)
    CheckDefExecFailure(["var l: list<number> = ['x', 234]"], 'E1012:', 1)
--- 1684,1691 ----
    CheckDefExecFailure(["echo 1", "var x = [][0]", "echo 3"], 'E684:', 2)
  
    CheckDefExecFailure(["var x = g:list_mixed['xx']"], 'E1012:', 1)
!   CheckDefFailure(["var x = g:list_mixed["], 'E1097:', 3)
!   CheckDefFailure(["var x = g:list_mixed[0"], 'E1097:', 3)
    CheckDefExecFailure(["var x = g:list_empty[3]"], 'E684:', 1)
    CheckDefExecFailure(["var l: list<number> = [234, 'x']"], 'E1012:', 1)
    CheckDefExecFailure(["var l: list<number> = ['x', 234]"], 'E1012:', 1)
***************
*** 1948,1955 ****
    CheckDefAndScriptSuccess(lines)
   
    # legacy syntax doesn't work
!   CheckDefFailure(["var x = #{key: 8}"], 'E1097:', 2)
!   CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1097:', 2)
  
    CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
    CheckDefFailure(["var x = {a : 8}"], 'E1059:', 1)
--- 1948,1955 ----
    CheckDefAndScriptSuccess(lines)
   
    # legacy syntax doesn't work
!   CheckDefFailure(["var x = #{key: 8}"], 'E1097:', 3)
!   CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1097:', 3)
  
    CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
    CheckDefFailure(["var x = {a : 8}"], 'E1059:', 1)
***************
*** 2609,2615 ****
    lines =<< trim END
        var d = 'asdf'[1:
    END
!   CheckDefFailure(lines, 'E1097:', 2)
    lines =<< trim END
        var d = 'asdf'[1:xxx]
    END
--- 2609,2615 ----
    lines =<< trim END
        var d = 'asdf'[1:
    END
!   CheckDefFailure(lines, 'E1097:', 3)
    lines =<< trim END
        var d = 'asdf'[1:xxx]
    END
***************
*** 2617,2623 ****
    lines =<< trim END
        var d = 'asdf'[1:2
    END
!   CheckDefFailure(lines, 'E1097:', 2)
    lines =<< trim END
        var d = 'asdf'[1:2
        echo d
--- 2617,2623 ----
    lines =<< trim END
        var d = 'asdf'[1:2
    END
!   CheckDefFailure(lines, 'E1097:', 3)
    lines =<< trim END
        var d = 'asdf'[1:2
        echo d
*** ../vim-8.2.2106/src/version.c       2020-12-07 18:04:59.373997754 +0100
--- src/version.c       2020-12-07 21:28:36.184763187 +0100
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     2107,
  /**/

-- 
Every exit is an entrance into something else.

 /// Bram Moolenaar -- b...@moolenaar.net -- 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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202012072050.0B7KoLM11455580%40masaka.moolenaar.net.

Raspunde prin e-mail lui