Patch 8.2.1756
Problem:    Vim9: :let will soon be disallowed.
Solution:   Add v:disallow_let temporarily.  Fix tests.
Files:      src/vim.h, src/errors.h, src/evalvars.c, src/vim9compile.c,
            src/userfunc.c, src/testdir/test_vim9_script.vim


*** ../vim-8.2.1755/src/vim.h   2020-09-26 15:08:52.885779899 +0200
--- src/vim.h   2020-09-27 14:31:28.181237171 +0200
***************
*** 1992,1998 ****
  #define VV_ECHOSPACE  93
  #define VV_ARGV               94
  #define VV_COLLATE      95
! #define VV_LEN                96      // number of v: vars
  
  // used for v_number in VAR_BOOL and VAR_SPECIAL
  #define VVAL_FALSE    0L      // VAR_BOOL
--- 1992,1999 ----
  #define VV_ECHOSPACE  93
  #define VV_ARGV               94
  #define VV_COLLATE      95
! #define VV_DISALLOW_LET 96    // TODO: remove again
! #define VV_LEN                97      // number of v: vars
  
  // used for v_number in VAR_BOOL and VAR_SPECIAL
  #define VVAL_FALSE    0L      // VAR_BOOL
*** ../vim-8.2.1755/src/errors.h        2020-09-26 15:08:52.881779910 +0200
--- src/errors.h        2020-09-27 14:33:13.360937745 +0200
***************
*** 274,277 ****
--- 274,279 ----
        INIT(= N_("E1124: \"%s\" cannot be used in legacy Vim script"));
  EXTERN char e_final_requires_a_value[]
        INIT(= N_("E1125: Final requires a value"));
+ EXTERN char e_cannot_use_let_in_vim9_script[]
+       INIT(= N_("E1126: Cannot use :let in Vim9 script"));
  #endif
*** ../vim-8.2.1755/src/evalvars.c      2020-09-27 14:22:45.006688671 +0200
--- src/evalvars.c      2020-09-27 14:42:47.575282572 +0200
***************
*** 146,151 ****
--- 146,152 ----
      {VV_NAME("echospace",      VAR_NUMBER), VV_RO},
      {VV_NAME("argv",           VAR_LIST), VV_RO},
      {VV_NAME("collate",                VAR_STRING), VV_RO},
+     {VV_NAME("disallow_let",   VAR_NUMBER), 0}, // TODO: remove
  };
  
  // shorthand
***************
*** 734,739 ****
--- 735,746 ----
            ex_finally(eap);
            return;
      }
+     if (get_vim_var_nr(VV_DISALLOW_LET)
+                                     && eap->cmdidx == CMD_let && vim9script)
+     {
+       emsg(_(e_cannot_use_let_in_vim9_script));
+       return;
+     }
      if (eap->cmdidx == CMD_const && !vim9script && !eap->forceit)
        // In legacy Vim script ":const" works like ":final".
        eap->cmdidx = CMD_final;
*** ../vim-8.2.1755/src/vim9compile.c   2020-09-27 14:22:45.006688671 +0200
--- src/vim9compile.c   2020-09-27 14:37:05.980270494 +0200
***************
*** 6979,6984 ****
--- 6979,6990 ----
                    break;
  
            case CMD_let:
+                   if (get_vim_var_nr(VV_DISALLOW_LET))
+                   {
+                       emsg(_(e_cannot_use_let_in_vim9_script));
+                       break;
+                   }
+                   // FALLTHROUGH
            case CMD_var:
            case CMD_final:
            case CMD_const:
*** ../vim-8.2.1755/src/userfunc.c      2020-09-21 22:02:44.276720646 +0200
--- src/userfunc.c      2020-09-27 15:00:15.681046658 +0200
***************
*** 3214,3232 ****
                is_heredoc = TRUE;
            }
  
!           // Check for ":let v =<< [trim] EOF"
!           //       and ":let [a, b] =<< [trim] EOF"
            arg = skipwhite(skiptowhite(p));
            if (*arg == '[')
                arg = vim_strchr(arg, ']');
            if (arg != NULL)
            {
                arg = skipwhite(skiptowhite(arg));
!               if ( arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
!                       && ((p[0] == 'l'
!                               && p[1] == 'e'
!                               && (!ASCII_ISALNUM(p[2])
!                                   || (p[2] == 't' && !ASCII_ISALNUM(p[3]))))))
                {
                    p = skipwhite(arg + 3);
                    if (STRNCMP(p, "trim", 4) == 0)
--- 3214,3233 ----
                is_heredoc = TRUE;
            }
  
!           // Check for ":cmd v =<< [trim] EOF"
!           //       and ":cmd [a, b] =<< [trim] EOF"
!           // Where "cmd" can be "let", "var", "final" or "const".
            arg = skipwhite(skiptowhite(p));
            if (*arg == '[')
                arg = vim_strchr(arg, ']');
            if (arg != NULL)
            {
                arg = skipwhite(skiptowhite(arg));
!               if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
!                       && (checkforcmd(&p, "let", 2)
!                           || checkforcmd(&p, "var", 3)
!                           || checkforcmd(&p, "final", 5)
!                           || checkforcmd(&p, "const", 5)))
                {
                    p = skipwhite(arg + 3);
                    if (STRNCMP(p, "trim", 4) == 0)
*** ../vim-8.2.1755/src/testdir/test_vim9_script.vim    2020-09-26 
17:20:49.693186820 +0200
--- src/testdir/test_vim9_script.vim    2020-09-27 15:10:01.431599549 +0200
***************
*** 6,11 ****
--- 6,14 ----
  source vim9.vim
  source shared.vim
  
+ " TODO: remove later
+ let v:disallow_let = 1
+ 
  def Test_range_only()
    new
    setline(1, ['blah', 'Blah'])
***************
*** 45,61 ****
  
    CheckScriptFailure([
     'vim9script',
!    'let svar = 123',
     'unlet svar',
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'let svar = 123',
     'unlet s:svar',
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'let svar = 123',
     'def Func()',
     '  unlet svar',
     'enddef',
--- 48,64 ----
  
    CheckScriptFailure([
     'vim9script',
!    'var svar = 123',
     'unlet svar',
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'var svar = 123',
     'unlet s:svar',
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'var svar = 123',
     'def Func()',
     '  unlet svar',
     'enddef',
***************
*** 63,69 ****
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'let svar = 123',
     'def Func()',
     '  unlet s:svar',
     'enddef',
--- 66,72 ----
     ], 'E1081:')
    CheckScriptFailure([
     'vim9script',
!    'var svar = 123',
     'def Func()',
     '  unlet s:svar',
     'enddef',
***************
*** 119,125 ****
        ], 'E1084:')
  
    # Check that global :def function can be replaced and deleted
!   let lines =<< trim END
        vim9script
        def g:Global(): string
          return "yes"
--- 122,128 ----
        ], 'E1084:')
  
    # Check that global :def function can be replaced and deleted
!   var lines =<< trim END
        vim9script
        def g:Global(): string
          return "yes"
***************
*** 168,226 ****
  enddef
  
  def Test_wrong_type()
!   CheckDefFailure(['let var: list<nothing>'], 'E1010:')
!   CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
!   CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
!   CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
! 
!   CheckDefFailure(['let var: dict<number'], 'E1009:')
!   CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
! 
!   CheckDefFailure(['let var: ally'], 'E1010:')
!   CheckDefFailure(['let var: bram'], 'E1010:')
!   CheckDefFailure(['let var: cathy'], 'E1010:')
!   CheckDefFailure(['let var: dom'], 'E1010:')
!   CheckDefFailure(['let var: freddy'], 'E1010:')
!   CheckDefFailure(['let var: john'], 'E1010:')
!   CheckDefFailure(['let var: larry'], 'E1010:')
!   CheckDefFailure(['let var: ned'], 'E1010:')
!   CheckDefFailure(['let var: pam'], 'E1010:')
!   CheckDefFailure(['let var: sam'], 'E1010:')
!   CheckDefFailure(['let var: vim'], 'E1010:')
  
!   CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:')
!   CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:')
  enddef
  
  def Test_const()
!   CheckDefFailure(['final var = 234', 'var = 99'], 'E1018:')
!   CheckDefFailure(['final one = 234', 'let one = 99'], 'E1017:')
!   CheckDefFailure(['final list = [1, 2]', 'let list = [3, 4]'], 'E1017:')
    CheckDefFailure(['final two'], 'E1125:')
    CheckDefFailure(['final &option'], 'E996:')
  
!   let lines =<< trim END
      final list = [1, 2, 3]
      list[0] = 4
      list->assert_equal([4, 2, 3])
      const other = [5, 6, 7]
      other->assert_equal([5, 6, 7])
  
!     let varlist = [7, 8]
      const constlist = [1, varlist, 3]
      varlist[0] = 77
      # TODO: does not work yet
      # constlist[1][1] = 88
!     let cl = constlist[1]
      cl[1] = 88
      constlist->assert_equal([1, [77, 88], 3])
  
!     let vardict = #{five: 5, six: 6}
      const constdict = #{one: 1, two: vardict, three: 3}
      vardict['five'] = 55
      # TODO: does not work yet
      # constdict['two']['six'] = 66
!     let cd = constdict['two']
      cd['six'] = 66
      constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3})
    END
--- 171,229 ----
  enddef
  
  def Test_wrong_type()
!   CheckDefFailure(['var name: list<nothing>'], 'E1010:')
!   CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:')
!   CheckDefFailure(['var name: dict<nothing>'], 'E1010:')
!   CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:')
! 
!   CheckDefFailure(['var name: dict<number'], 'E1009:')
!   CheckDefFailure(['var name: dict<list<number>'], 'E1009:')
! 
!   CheckDefFailure(['var name: ally'], 'E1010:')
!   CheckDefFailure(['var name: bram'], 'E1010:')
!   CheckDefFailure(['var name: cathy'], 'E1010:')
!   CheckDefFailure(['var name: dom'], 'E1010:')
!   CheckDefFailure(['var name: freddy'], 'E1010:')
!   CheckDefFailure(['var name: john'], 'E1010:')
!   CheckDefFailure(['var name: larry'], 'E1010:')
!   CheckDefFailure(['var name: ned'], 'E1010:')
!   CheckDefFailure(['var name: pam'], 'E1010:')
!   CheckDefFailure(['var name: sam'], 'E1010:')
!   CheckDefFailure(['var name: vim'], 'E1010:')
  
!   CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:')
!   CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:')
  enddef
  
  def Test_const()
!   CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:')
!   CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:')
!   CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:')
    CheckDefFailure(['final two'], 'E1125:')
    CheckDefFailure(['final &option'], 'E996:')
  
!   var lines =<< trim END
      final list = [1, 2, 3]
      list[0] = 4
      list->assert_equal([4, 2, 3])
      const other = [5, 6, 7]
      other->assert_equal([5, 6, 7])
  
!     var varlist = [7, 8]
      const constlist = [1, varlist, 3]
      varlist[0] = 77
      # TODO: does not work yet
      # constlist[1][1] = 88
!     var cl = constlist[1]
      cl[1] = 88
      constlist->assert_equal([1, [77, 88], 3])
  
!     var vardict = #{five: 5, six: 6}
      const constdict = #{one: 1, two: vardict, three: 3}
      vardict['five'] = 55
      # TODO: does not work yet
      # constdict['two']['six'] = 66
!     var cd = constdict['two']
      cd['six'] = 66
      constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3})
    END
***************
*** 228,234 ****
  enddef
  
  def Test_const_bang()
!   let lines =<< trim END
        const var = 234
        var = 99
    END
--- 231,237 ----
  enddef
  
  def Test_const_bang()
!   var lines =<< trim END
        const var = 234
        var = 99
    END
***************
*** 273,281 ****
  
  
  def Test_block()
!   let outer = 1
    {
!     let inner = 2
      assert_equal(1, outer)
      assert_equal(2, inner)
    }
--- 276,284 ----
  
  
  def Test_block()
!   var outer = 1
    {
!     var inner = 2
      assert_equal(1, outer)
      assert_equal(2, inner)
    }
***************
*** 283,289 ****
  enddef
  
  def Test_block_failure()
!   CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
    CheckDefFailure(['}'], 'E1025:')
    CheckDefFailure(['{', 'echo 1'], 'E1026:')
  enddef
--- 286,292 ----
  enddef
  
  def Test_block_failure()
!   CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:')
    CheckDefFailure(['}'], 'E1025:')
    CheckDefFailure(['{', 'echo 1'], 'E1026:')
  enddef
***************
*** 293,299 ****
  endfunc
  
  def Test_try_catch()
!   let l = []
    try # comment
      add(l, '1')
      throw 'wrong'
--- 296,302 ----
  endfunc
  
  def Test_try_catch()
!   var l = []
    try # comment
      add(l, '1')
      throw 'wrong'
***************
*** 321,327 ****
    endtry
    assert_equal(['1', 'caught', 'finally'], l)
  
!   let n: number
    try
      n = l[3]
    catch /E684:/
--- 324,330 ----
    endtry
    assert_equal(['1', 'caught', 'finally'], l)
  
!   var n: number
    try
      n = l[3]
    catch /E684:/
***************
*** 358,364 ****
    endtry
    assert_equal(121, n)
  
!   let d = #{one: 1}
    try
      n = d[g:astring]
    catch /E716:/
--- 361,367 ----
    endtry
    assert_equal(121, n)
  
!   var d = #{one: 1}
    try
      n = d[g:astring]
    catch /E716:/
***************
*** 387,393 ****
    endtry
    assert_equal(255, n)
  
!   let nd: dict<any>
    try
      nd = {g:anumber: 1}
    catch /E1012:/
--- 390,396 ----
    endtry
    assert_equal(255, n)
  
!   var nd: dict<any>
    try
      nd = {g:anumber: 1}
    catch /E1012:/
***************
*** 452,458 ****
    endtry
    assert_equal(355, n)
  
!   let P = function('g:NoSuchFunc')
    delfunc g:NoSuchFunc
    try
      echo P()
--- 455,461 ----
    endtry
    assert_equal(355, n)
  
!   var P = function('g:NoSuchFunc')
    delfunc g:NoSuchFunc
    try
      echo P()
***************
*** 553,559 ****
  
  def TryTwo(n: number): string
    try
!     let x = {}
    catch
    endtry
    return 'text'
--- 556,562 ----
  
  def TryTwo(n: number): string
    try
!     var x = {}
    catch
    endtry
    return 'text'
***************
*** 564,570 ****
  enddef
  
  def Test_try_catch_match()
!   let seq = 'a'
    try
      throw 'something'
    catch /nothing/
--- 567,573 ----
  enddef
  
  def Test_try_catch_match()
!   var seq = 'a'
    try
      throw 'something'
    catch /nothing/
***************
*** 599,605 ****
  
  def Test_throw_vimscript()
    # only checks line continuation
!   let lines =<< trim END
        vim9script
        try
          throw 'one'
--- 602,608 ----
  
  def Test_throw_vimscript()
    # only checks line continuation
!   var lines =<< trim END
        vim9script
        try
          throw 'one'
***************
*** 613,619 ****
  
  def Test_error_in_nested_function()
    # an error in a nested :function aborts executin in the calling :def 
function
!   let lines =<< trim END
        vim9script
        def Func()
          Error()
--- 616,622 ----
  
  def Test_error_in_nested_function()
    # an error in a nested :function aborts executin in the calling :def 
function
!   var lines =<< trim END
        vim9script
        def Func()
          Error()
***************
*** 632,638 ****
  def Test_cexpr_vimscript()
    # only checks line continuation
    set errorformat=File\ %f\ line\ %l
!   let lines =<< trim END
        vim9script
        cexpr 'File'
                  .. ' someFile' ..
--- 635,641 ----
  def Test_cexpr_vimscript()
    # only checks line continuation
    set errorformat=File\ %f\ line\ %l
!   var lines =<< trim END
        vim9script
        cexpr 'File'
                  .. ' someFile' ..
***************
*** 645,651 ****
  
  def Test_statusline_syntax()
    # legacy syntax is used for 'statusline'
!   let lines =<< trim END
        vim9script
        func g:Status()
          return '%{"x" is# "x"}'
--- 648,654 ----
  
  def Test_statusline_syntax()
    # legacy syntax is used for 'statusline'
!   var lines =<< trim END
        vim9script
        func g:Status()
          return '%{"x" is# "x"}'
***************
*** 659,667 ****
  
  def Test_list_vimscript()
    # checks line continuation and comments
!   let lines =<< trim END
        vim9script
!       let mylist = [
              'one',
              # comment
              'two', # empty line follows
--- 662,670 ----
  
  def Test_list_vimscript()
    # checks line continuation and comments
!   var lines =<< trim END
        vim9script
!       var mylist = [
              'one',
              # comment
              'two', # empty line follows
***************
*** 702,708 ****
  
  let s:export_script_lines =<< trim END
    vim9script
!   let name: string = 'bob'
    def Concat(arg: string): string
      return name .. arg
    enddef
--- 705,711 ----
  
  let s:export_script_lines =<< trim END
    vim9script
!   var name: string = 'bob'
    def Concat(arg: string): string
      return name .. arg
    enddef
***************
*** 710,717 ****
    g:localname = name
  
    export const CONST = 1234
!   export let exported = 9876
!   export let exp_name = 'John'
    export def Exported(): string
      return 'Exported'
    enddef
--- 713,720 ----
    g:localname = name
  
    export const CONST = 1234
!   export var exported = 9876
!   export var exp_name = 'John'
    export def Exported(): string
      return 'Exported'
    enddef
***************
*** 723,729 ****
  enddef
  
  def Test_vim9_import_export()
!   let import_script_lines =<< trim END
      vim9script
      import {exported, Exported} from './Xexport.vim'
      g:imported = exported
--- 726,732 ----
  enddef
  
  def Test_vim9_import_export()
!   var import_script_lines =<< trim END
      vim9script
      import {exported, Exported} from './Xexport.vim'
      g:imported = exported
***************
*** 732,738 ****
      g:imported_func = Exported()
  
      def GetExported(): string
!       let local_dict = #{ref: Exported}
        return local_dict.ref()
      enddef
      g:funcref_result = GetExported()
--- 735,741 ----
      g:imported_func = Exported()
  
      def GetExported(): string
!       var local_dict = #{ref: Exported}
        return local_dict.ref()
      enddef
      g:funcref_result = GetExported()
***************
*** 769,775 ****
    delete('Ximport.vim')
  
    # similar, with line breaks
!   let import_line_break_script_lines =<< trim END
      vim9script
      import {
          exported,
--- 772,778 ----
    delete('Ximport.vim')
  
    # similar, with line breaks
!   var import_line_break_script_lines =<< trim END
      vim9script
      import {
          exported,
***************
*** 797,803 ****
    delete('Ximport_lbr.vim')
  
    # import inside :def function
!   let import_in_def_lines =<< trim END
      vim9script
      def ImportInDef()
        import exported from './Xexport.vim'
--- 800,806 ----
    delete('Ximport_lbr.vim')
  
    # import inside :def function
!   var import_in_def_lines =<< trim END
      vim9script
      def ImportInDef()
        import exported from './Xexport.vim'
***************
*** 816,822 ****
    unlet g:imported_added
    delete('Ximport2.vim')
  
!   let import_star_as_lines =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def UseExport()
--- 819,825 ----
    unlet g:imported_added
    delete('Ximport2.vim')
  
!   var import_star_as_lines =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def UseExport()
***************
*** 828,868 ****
    source Ximport.vim
    assert_equal(9883, g:imported)
  
!   let import_star_as_lines_no_dot =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       let dummy = 1
!       let imported = Export + dummy
      enddef
      defcompile
    END
    writefile(import_star_as_lines_no_dot, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
  
!   let import_star_as_lines_dot_space =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       let imported = Export . exported
      enddef
      defcompile
    END
    writefile(import_star_as_lines_dot_space, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
  
!   let import_star_as_lines_missing_name =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       let imported = Export.
      enddef
      defcompile
    END
    writefile(import_star_as_lines_missing_name, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
  
!   let import_star_as_lbr_lines =<< trim END
      vim9script
      import *
          as Export
--- 831,871 ----
    source Ximport.vim
    assert_equal(9883, g:imported)
  
!   var import_star_as_lines_no_dot =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       var dummy = 1
!       var imported = Export + dummy
      enddef
      defcompile
    END
    writefile(import_star_as_lines_no_dot, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
  
!   var import_star_as_lines_dot_space =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       var imported = Export . exported
      enddef
      defcompile
    END
    writefile(import_star_as_lines_dot_space, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
  
!   var import_star_as_lines_missing_name =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
      def Func()
!       var imported = Export.
      enddef
      defcompile
    END
    writefile(import_star_as_lines_missing_name, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
  
!   var import_star_as_lbr_lines =<< trim END
      vim9script
      import *
          as Export
***************
*** 877,883 ****
    source Ximport.vim
    assert_equal(9883, g:imported)
  
!   let import_star_lines =<< trim END
      vim9script
      import * from './Xexport.vim'
    END
--- 880,886 ----
    source Ximport.vim
    assert_equal(9883, g:imported)
  
!   var import_star_lines =<< trim END
      vim9script
      import * from './Xexport.vim'
    END
***************
*** 885,891 ****
    assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
  
    # try to import something that exists but is not exported
!   let import_not_exported_lines =<< trim END
      vim9script
      import name from './Xexport.vim'
    END
--- 888,894 ----
    assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
  
    # try to import something that exists but is not exported
!   var import_not_exported_lines =<< trim END
      vim9script
      import name from './Xexport.vim'
    END
***************
*** 893,901 ****
    assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
  
    # try to import something that is already defined
!   let import_already_defined =<< trim END
      vim9script
!     let exported = 'something'
      import exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
--- 896,904 ----
    assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
  
    # try to import something that is already defined
!   var import_already_defined =<< trim END
      vim9script
!     var exported = 'something'
      import exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
***************
*** 904,910 ****
    # try to import something that is already defined
    import_already_defined =<< trim END
      vim9script
!     let exported = 'something'
      import * as exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
--- 907,913 ----
    # try to import something that is already defined
    import_already_defined =<< trim END
      vim9script
!     var exported = 'something'
      import * as exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
***************
*** 913,954 ****
    # try to import something that is already defined
    import_already_defined =<< trim END
      vim9script
!     let exported = 'something'
      import {exported} from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
  
    # import a very long name, requires making a copy
!   let import_long_name_lines =<< trim END
      vim9script
      import 
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 from './Xexport.vim'
    END
    writefile(import_long_name_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
  
!   let import_no_from_lines =<< trim END
      vim9script
      import name './Xexport.vim'
    END
    writefile(import_no_from_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
  
!   let import_invalid_string_lines =<< trim END
      vim9script
      import name from Xexport.vim
    END
    writefile(import_invalid_string_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
  
!   let import_wrong_name_lines =<< trim END
      vim9script
      import name from './XnoExport.vim'
    END
    writefile(import_wrong_name_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
  
!   let import_missing_comma_lines =<< trim END
      vim9script
      import {exported name} from './Xexport.vim'
    END
--- 916,957 ----
    # try to import something that is already defined
    import_already_defined =<< trim END
      vim9script
!     var exported = 'something'
      import {exported} from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
  
    # import a very long name, requires making a copy
!   var import_long_name_lines =<< trim END
      vim9script
      import 
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 from './Xexport.vim'
    END
    writefile(import_long_name_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
  
!   var import_no_from_lines =<< trim END
      vim9script
      import name './Xexport.vim'
    END
    writefile(import_no_from_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
  
!   var import_invalid_string_lines =<< trim END
      vim9script
      import name from Xexport.vim
    END
    writefile(import_invalid_string_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
  
!   var import_wrong_name_lines =<< trim END
      vim9script
      import name from './XnoExport.vim'
    END
    writefile(import_wrong_name_lines, 'Ximport.vim')
    assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
  
!   var import_missing_comma_lines =<< trim END
      vim9script
      import {exported name} from './Xexport.vim'
    END
***************
*** 961,968 ****
  
    # Check that in a Vim9 script 'cpo' is set to the Vim default.
    set cpo&vi
!   let cpo_before = &cpo
!   let lines =<< trim END
      vim9script
      g:cpo_in_vim9script = &cpo
    END
--- 964,971 ----
  
    # Check that in a Vim9 script 'cpo' is set to the Vim default.
    set cpo&vi
!   var cpo_before = &cpo
!   var lines =<< trim END
      vim9script
      g:cpo_in_vim9script = &cpo
    END
***************
*** 981,987 ****
  
  def Test_import_export_expr_map()
    # check that :import and :export work when buffer is locked
!   let export_lines =<< trim END
      vim9script
      export def That(): string
        return 'yes'
--- 984,990 ----
  
  def Test_import_export_expr_map()
    # check that :import and :export work when buffer is locked
!   var export_lines =<< trim END
      vim9script
      export def That(): string
        return 'yes'
***************
*** 989,995 ****
    END
    writefile(export_lines, 'Xexport_that.vim')
  
!   let import_lines =<< trim END
      vim9script
      import That from './Xexport_that.vim'
      assert_equal('yes', That())
--- 992,998 ----
    END
    writefile(export_lines, 'Xexport_that.vim')
  
!   var import_lines =<< trim END
      vim9script
      import That from './Xexport_that.vim'
      assert_equal('yes', That())
***************
*** 1007,1019 ****
  def Test_import_in_filetype()
    # check that :import works when the buffer is locked
    mkdir('ftplugin', 'p')
!   let export_lines =<< trim END
      vim9script
!     export let That = 'yes'
    END
    writefile(export_lines, 'ftplugin/Xexport_ft.vim')
  
!   let import_lines =<< trim END
      vim9script
      import That from './Xexport_ft.vim'
      assert_equal('yes', That)
--- 1010,1022 ----
  def Test_import_in_filetype()
    # check that :import works when the buffer is locked
    mkdir('ftplugin', 'p')
!   var export_lines =<< trim END
      vim9script
!     export var That = 'yes'
    END
    writefile(export_lines, 'ftplugin/Xexport_ft.vim')
  
!   var import_lines =<< trim END
      vim9script
      import That from './Xexport_ft.vim'
      assert_equal('yes', That)
***************
*** 1021,1027 ****
    END
    writefile(import_lines, 'ftplugin/qf.vim')
  
!   let save_rtp = &rtp
    &rtp = getcwd() .. ',' .. &rtp
  
    filetype plugin on
--- 1024,1030 ----
    END
    writefile(import_lines, 'ftplugin/qf.vim')
  
!   var save_rtp = &rtp
    &rtp = getcwd() .. ',' .. &rtp
  
    filetype plugin on
***************
*** 1035,1041 ****
  enddef
  
  def Test_use_import_in_mapping()
!   let lines =<< trim END
        vim9script
        export def Funcx()
          g:result = 42
--- 1038,1044 ----
  enddef
  
  def Test_use_import_in_mapping()
!   var lines =<< trim END
        vim9script
        export def Funcx()
          g:result = 42
***************
*** 1062,1073 ****
  def Test_vim9script_fails()
    CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
    CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
!   CheckScriptFailure(['export let some = 123'], 'E1042:')
    CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:')
!   CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:')
    CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
  
!   CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 
'E1012:')
    CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 
'E46:')
  
    assert_fails('vim9script', 'E1038:')
--- 1065,1076 ----
  def Test_vim9script_fails()
    CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
    CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
!   CheckScriptFailure(['export var some = 123'], 'E1042:')
    CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:')
!   CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
    CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
  
!   CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 
'E1012:')
    CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 
'E46:')
  
    assert_fails('vim9script', 'E1038:')
***************
*** 1082,1088 ****
  endfunc
  
  def Run_Test_import_fails_on_command_line()
!   let export =<< trim END
      vim9script
      export def Foo(): number
          return 0
--- 1085,1091 ----
  endfunc
  
  def Run_Test_import_fails_on_command_line()
!   var export =<< trim END
      vim9script
      export def Foo(): number
          return 0
***************
*** 1090,1096 ****
    END
    writefile(export, 'XexportCmd.vim')
  
!   let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{
                  rows: 6, wait_for_ruler: 0})
    WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))})
  
--- 1093,1099 ----
    END
    writefile(export, 'XexportCmd.vim')
  
!   var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{
                  rows: 6, wait_for_ruler: 0})
    WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))})
  
***************
*** 1099,1114 ****
  enddef
  
  def Test_vim9script_reload_import()
!   let lines =<< trim END
      vim9script
      const var = ''
!     let valone = 1234
      def MyFunc(arg: string)
         valone = 5678
      enddef
    END
!   let morelines =<< trim END
!     let valtwo = 222
      export def GetValtwo(): number
        return valtwo
      enddef
--- 1102,1117 ----
  enddef
  
  def Test_vim9script_reload_import()
!   var lines =<< trim END
      vim9script
      const var = ''
!     var valone = 1234
      def MyFunc(arg: string)
         valone = 5678
      enddef
    END
!   var morelines =<< trim END
!     var valtwo = 222
      export def GetValtwo(): number
        return valtwo
      enddef
***************
*** 1118,1124 ****
    source Xreload.vim
    source Xreload.vim
  
!   let testlines =<< trim END
      vim9script
      def TheFunc()
        import GetValtwo from './Xreload.vim'
--- 1121,1127 ----
    source Xreload.vim
    source Xreload.vim
  
!   var testlines =<< trim END
      vim9script
      def TheFunc()
        import GetValtwo from './Xreload.vim'
***************
*** 1137,1144 ****
    # cannot declare a var twice
    lines =<< trim END
      vim9script
!     let valone = 1234
!     let valone = 5678
    END
    writefile(lines, 'Xreload.vim')
    assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
--- 1140,1147 ----
    # cannot declare a var twice
    lines =<< trim END
      vim9script
!     var valone = 1234
!     var valone = 5678
    END
    writefile(lines, 'Xreload.vim')
    assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
***************
*** 1154,1160 ****
  " Not exported function that is referenced needs to be accessed by the
  " script-local name.
  def Test_vim9script_funcref()
!   let sortlines =<< trim END
        vim9script
        def Compare(i1: number, i2: number): number
          return i2 - i1
--- 1157,1163 ----
  " Not exported function that is referenced needs to be accessed by the
  " script-local name.
  def Test_vim9script_funcref()
!   var sortlines =<< trim END
        vim9script
        def Compare(i1: number, i2: number): number
          return i2 - i1
***************
*** 1166,1172 ****
    END
    writefile(sortlines, 'Xsort.vim')
  
!   let lines =<< trim END
      vim9script
      import FastSort from './Xsort.vim'
      def Test()
--- 1169,1175 ----
    END
    writefile(sortlines, 'Xsort.vim')
  
!   var lines =<< trim END
      vim9script
      import FastSort from './Xsort.vim'
      def Test()
***************
*** 1183,1189 ****
    delete('Xsort.vim')
    delete('Xscript.vim')
  
!   let Funcref = function('s:RetSome')
    assert_equal('some', Funcref())
  enddef
  
--- 1186,1192 ----
    delete('Xsort.vim')
    delete('Xscript.vim')
  
!   var Funcref = function('s:RetSome')
    assert_equal('some', Funcref())
  enddef
  
***************
*** 1191,1197 ****
  " script where FastFilter() is called from, both as a string and as a direct
  " function reference.
  def Test_vim9script_funcref_other_script()
!   let filterLines =<< trim END
      vim9script
      export def FilterFunc(idx: number, val: number): bool
        return idx % 2 == 1
--- 1194,1200 ----
  " script where FastFilter() is called from, both as a string and as a direct
  " function reference.
  def Test_vim9script_funcref_other_script()
!   var filterLines =<< trim END
      vim9script
      export def FilterFunc(idx: number, val: number): bool
        return idx % 2 == 1
***************
*** 1205,1219 ****
    END
    writefile(filterLines, 'Xfilter.vim')
  
!   let lines =<< trim END
      vim9script
      import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim'
      def Test()
!       let x: list<number> = FastFilter()
      enddef
      Test()
      def TestDirect()
!       let x: list<number> = FastFilterDirect()
      enddef
      TestDirect()
    END
--- 1208,1222 ----
    END
    writefile(filterLines, 'Xfilter.vim')
  
!   var lines =<< trim END
      vim9script
      import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim'
      def Test()
!       var x: list<number> = FastFilter()
      enddef
      Test()
      def TestDirect()
!       var x: list<number> = FastFilterDirect()
      enddef
      TestDirect()
    END
***************
*** 1222,1234 ****
  enddef
  
  def Test_vim9script_reload_delfunc()
!   let first_lines =<< trim END
      vim9script
      def FuncYes(): string
        return 'yes'
      enddef
    END
!   let withno_lines =<< trim END
      def FuncNo(): string
        return 'no'
      enddef
--- 1225,1237 ----
  enddef
  
  def Test_vim9script_reload_delfunc()
!   var first_lines =<< trim END
      vim9script
      def FuncYes(): string
        return 'yes'
      enddef
    END
!   var withno_lines =<< trim END
      def FuncNo(): string
        return 'no'
      enddef
***************
*** 1237,1243 ****
        assert_equal('no', FuncNo())
      enddef
    END
!   let nono_lines =<< trim END
      def g:DoCheck(no_exists: bool)
        assert_equal('yes', FuncYes())
        assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
--- 1240,1246 ----
        assert_equal('no', FuncNo())
      enddef
    END
!   var nono_lines =<< trim END
      def g:DoCheck(no_exists: bool)
        assert_equal('yes', FuncYes())
        assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
***************
*** 1264,1272 ****
  
  def Test_vim9script_reload_delvar()
    # write the script with a script-local variable
!   let lines =<< trim END
      vim9script
!     let var = 'string'
    END
    writefile(lines, 'XreloadVar.vim')
    source XreloadVar.vim
--- 1267,1275 ----
  
  def Test_vim9script_reload_delvar()
    # write the script with a script-local variable
!   var lines =<< trim END
      vim9script
!     var name = 'string'
    END
    writefile(lines, 'XreloadVar.vim')
    source XreloadVar.vim
***************
*** 1275,1281 ****
    lines =<< trim END
      vim9script
      def Func()
!       let var = 'string'
      enddef
    END
    writefile(lines, 'XreloadVar.vim')
--- 1278,1284 ----
    lines =<< trim END
      vim9script
      def Func()
!       var name = 'string'
      enddef
    END
    writefile(lines, 'XreloadVar.vim')
***************
*** 1285,1291 ****
  enddef
  
  def Test_import_absolute()
!   let import_lines = [
          'vim9script',
          'import exported from "' .. escape(getcwd(), '\') .. 
'/Xexport_abs.vim"',
          'def UseExported()',
--- 1288,1294 ----
  enddef
  
  def Test_import_absolute()
!   var import_lines = [
          'vim9script',
          'import exported from "' .. escape(getcwd(), '\') .. 
'/Xexport_abs.vim"',
          'def UseExported()',
***************
*** 1323,1329 ****
  enddef
  
  def Test_import_rtp()
!   let import_lines = [
          'vim9script',
          'import exported from "Xexport_rtp.vim"',
          'g:imported_rtp = exported',
--- 1326,1332 ----
  enddef
  
  def Test_import_rtp()
!   var import_lines = [
          'vim9script',
          'import exported from "Xexport_rtp.vim"',
          'g:imported_rtp = exported',
***************
*** 1332,1338 ****
    mkdir('import')
    writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
  
!   let save_rtp = &rtp
    &rtp = getcwd()
    source Ximport_rtp.vim
    &rtp = save_rtp
--- 1335,1341 ----
    mkdir('import')
    writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
  
!   var save_rtp = &rtp
    &rtp = getcwd()
    source Ximport_rtp.vim
    &rtp = save_rtp
***************
*** 1346,1352 ****
  enddef
  
  def Test_import_compile_error()
!   let export_lines = [
          'vim9script',
          'export def ExpFunc(): string',
          '  return notDefined',
--- 1349,1355 ----
  enddef
  
  def Test_import_compile_error()
!   var export_lines = [
          'vim9script',
          'export def ExpFunc(): string',
          '  return notDefined',
***************
*** 1354,1360 ****
          ]
    writefile(export_lines, 'Xexported.vim')
  
!   let import_lines = [
          'vim9script',
          'import ExpFunc from "./Xexported.vim"',
          'def ImpFunc()',
--- 1357,1363 ----
          ]
    writefile(export_lines, 'Xexported.vim')
  
!   var import_lines = [
          'vim9script',
          'import ExpFunc from "./Xexported.vim"',
          'def ImpFunc()',
***************
*** 1377,1383 ****
  enddef
  
  def Test_func_redefine_error()
!   let lines = [
          'vim9script',
          'def Func()',
          '  eval [][0]',
--- 1380,1386 ----
  enddef
  
  def Test_func_redefine_error()
!   var lines = [
          'vim9script',
          'def Func()',
          '  eval [][0]',
***************
*** 1400,1406 ****
  enddef
  
  def Test_func_overrules_import_fails()
!   let export_lines =<< trim END
        vim9script
        export def Func()
          echo 'imported'
--- 1403,1409 ----
  enddef
  
  def Test_func_overrules_import_fails()
!   var export_lines =<< trim END
        vim9script
        export def Func()
          echo 'imported'
***************
*** 1408,1414 ****
    END
    writefile(export_lines, 'XexportedFunc.vim')
  
!   let lines =<< trim END
      vim9script
      import Func from './XexportedFunc.vim'
      def Func()
--- 1411,1417 ----
    END
    writefile(export_lines, 'XexportedFunc.vim')
  
!   var lines =<< trim END
      vim9script
      import Func from './XexportedFunc.vim'
      def Func()
***************
*** 1433,1439 ****
  enddef
  
  def Test_func_redefine_fails()
!   let lines =<< trim END
      vim9script
      def Func()
        echo 'one'
--- 1436,1442 ----
  enddef
  
  def Test_func_redefine_fails()
!   var lines =<< trim END
      vim9script
      def Func()
        echo 'one'
***************
*** 1450,1456 ****
        return 'foo'
        enddef
      def Func()
!       let  Foo = {-> 'lambda'}
      enddef
      defcompile
    END
--- 1453,1459 ----
        return 'foo'
        enddef
      def Func()
!       var  Foo = {-> 'lambda'}
      enddef
      defcompile
    END
***************
*** 1459,1465 ****
  
  def Test_fixed_size_list()
    # will be allocated as one piece of memory, check that changes work
!   let l = [1, 2, 3, 4]
    l->remove(0)
    l->add(5)
    l->insert(99, 1)
--- 1462,1468 ----
  
  def Test_fixed_size_list()
    # will be allocated as one piece of memory, check that changes work
!   var l = [1, 2, 3, 4]
    l->remove(0)
    l->add(5)
    l->insert(99, 1)
***************
*** 1485,1491 ****
  enddef
  
  def IfElse(what: number): string
!   let res = ''
    if what == 1
      res = "one"
    elseif what == 2
--- 1488,1494 ----
  enddef
  
  def IfElse(what: number): string
!   var res = ''
    if what == 1
      res = "one"
    elseif what == 2
***************
*** 1514,1520 ****
  let g:bool_false = v:false
  
  def Test_if_const_expr()
!   let res = false
    if true ? true : false
      res = true
    endif
--- 1517,1523 ----
  let g:bool_false = v:false
  
  def Test_if_const_expr()
!   var res = false
    if true ? true : false
      res = true
    endif
***************
*** 1643,1649 ****
  enddef
  
  def RunNested(i: number): number
!   let x: number = 0
    if i % 2
      if 1
        # comment
--- 1646,1652 ----
  enddef
  
  def RunNested(i: number): number
!   var x: number = 0
    if i % 2
      if 1
        # comment
***************
*** 1671,1691 ****
    execute "setline(1, 'execute-string')"
    assert_equal('execute-string', getline(1))
  
!   let cmd1 = 'setline(1,'
!   let cmd2 = '"execute-var")'
    execute cmd1 cmd2 # comment
    assert_equal('execute-var', getline(1))
  
    execute cmd1 cmd2 '|setline(1, "execute-var-string")'
    assert_equal('execute-var-string', getline(1))
  
!   let cmd_first = 'call '
!   let cmd_last = 'setline(1, "execute-var-var")'
    execute cmd_first .. cmd_last
    assert_equal('execute-var-var', getline(1))
    bwipe!
  
!   let n = true
    execute 'echomsg' (n ? '"true"' : '"no"')
    assert_match('^true$', Screenline(&lines))
  
--- 1674,1694 ----
    execute "setline(1, 'execute-string')"
    assert_equal('execute-string', getline(1))
  
!   var cmd1 = 'setline(1,'
!   var cmd2 = '"execute-var")'
    execute cmd1 cmd2 # comment
    assert_equal('execute-var', getline(1))
  
    execute cmd1 cmd2 '|setline(1, "execute-var-string")'
    assert_equal('execute-var-string', getline(1))
  
!   var cmd_first = 'call '
!   var cmd_last = 'setline(1, "execute-var-var")'
    execute cmd_first .. cmd_last
    assert_equal('execute-var-var', getline(1))
    bwipe!
  
!   var n = true
    execute 'echomsg' (n ? '"true"' : '"no"')
    assert_match('^true$', Screenline(&lines))
  
***************
*** 1699,1705 ****
  
  def Test_execute_cmd_vimscript()
    # only checks line continuation
!   let lines =<< trim END
        vim9script
        execute 'g:someVar'
                  .. ' = ' ..
--- 1702,1708 ----
  
  def Test_execute_cmd_vimscript()
    # only checks line continuation
!   var lines =<< trim END
        vim9script
        execute 'g:someVar'
                  .. ' = ' ..
***************
*** 1719,1726 ****
    echon "thing"
    assert_match('^something$', Screenline(&lines))
  
!   let str1 = 'some'
!   let str2 = 'more'
    echo str1 str2
    assert_match('^some more$', Screenline(&lines))
  
--- 1722,1729 ----
    echon "thing"
    assert_match('^something$', Screenline(&lines))
  
!   var str1 = 'some'
!   var str2 = 'more'
    echo str1 str2
    assert_match('^some more$', Screenline(&lines))
  
***************
*** 1739,1745 ****
  
  def Test_echomsg_cmd_vimscript()
    # only checks line continuation
!   let lines =<< trim END
        vim9script
        echomsg 'here'
                  .. ' is ' ..
--- 1742,1748 ----
  
  def Test_echomsg_cmd_vimscript()
    # only checks line continuation
!   var lines =<< trim END
        vim9script
        echomsg 'here'
                  .. ' is ' ..
***************
*** 1759,1765 ****
  
  def Test_echoerr_cmd_vimscript()
    # only checks line continuation
!   let lines =<< trim END
        vim9script
        try
          echoerr 'this'
--- 1762,1768 ----
  
  def Test_echoerr_cmd_vimscript()
    # only checks line continuation
!   var lines =<< trim END
        vim9script
        try
          echoerr 'this'
***************
*** 1773,1779 ****
  enddef
  
  def Test_for_outside_of_function()
!   let lines =<< trim END
      vim9script
      new
      for var in range(0, 3)
--- 1776,1782 ----
  enddef
  
  def Test_for_outside_of_function()
!   var lines =<< trim END
      vim9script
      new
      for var in range(0, 3)
***************
*** 1788,1794 ****
  enddef
  
  def Test_for_loop()
!   let result = ''
    for cnt in range(7)
      if cnt == 4
        break
--- 1791,1797 ----
  enddef
  
  def Test_for_loop()
!   var result = ''
    for cnt in range(7)
      if cnt == 4
        break
***************
*** 1800,1806 ****
    endfor
    assert_equal('0_1_3_', result)
  
!   let concat = ''
    for str in eval('["one", "two"]')
      concat ..= str
    endfor
--- 1803,1809 ----
    endfor
    assert_equal('0_1_3_', result)
  
!   var concat = ''
    for str in eval('["one", "two"]')
      concat ..= str
    endfor
***************
*** 1810,1816 ****
  def Test_for_loop_fails()
    CheckDefFailure(['for # in range(5)'], 'E690:')
    CheckDefFailure(['for i In range(5)'], 'E690:')
!   CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:')
    CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 
'defcompile'], 'E1006:')
    CheckDefFailure(['for i in "text"'], 'E1012:')
    CheckDefFailure(['for i in xxx'], 'E1001:')
--- 1813,1819 ----
  def Test_for_loop_fails()
    CheckDefFailure(['for # in range(5)'], 'E690:')
    CheckDefFailure(['for i In range(5)'], 'E690:')
!   CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:')
    CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 
'defcompile'], 'E1006:')
    CheckDefFailure(['for i in "text"'], 'E1012:')
    CheckDefFailure(['for i in xxx'], 'E1001:')
***************
*** 1819,1826 ****
  enddef
  
  def Test_while_loop()
!   let result = ''
!   let cnt = 0
    while cnt < 555
      if cnt == 3
        break
--- 1822,1829 ----
  enddef
  
  def Test_while_loop()
!   var result = ''
!   var cnt = 0
    while cnt < 555
      if cnt == 3
        break
***************
*** 1845,1852 ****
  enddef
  
  def Test_interrupt_loop()
!   let caught = false
!   let x = 0
    try
      while 1
        x += 1
--- 1848,1855 ----
  enddef
  
  def Test_interrupt_loop()
!   var caught = false
!   var x = 0
    try
      while 1
        x += 1
***************
*** 1864,1877 ****
  enddef
  
  def Test_automatic_line_continuation()
!   let mylist = [
        'one',
        'two',
        'three',
        ] # comment
    assert_equal(['one', 'two', 'three'], mylist)
  
!   let mydict = {
        'one': 1,
        'two': 2,
        'three':
--- 1867,1880 ----
  enddef
  
  def Test_automatic_line_continuation()
!   var mylist = [
        'one',
        'two',
        'three',
        ] # comment
    assert_equal(['one', 'two', 'three'], mylist)
  
!   var mydict = {
        'one': 1,
        'two': 2,
        'three':
***************
*** 2340,2371 ****
  
    CheckScriptFailure([
        'vim9script',
!       'let g:var = 123',
        ], 'E1016: Cannot declare a global variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'let b:var = 123',
        ], 'E1016: Cannot declare a buffer variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'let w:var = 123',
        ], 'E1016: Cannot declare a window variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'let t:var = 123',
        ], 'E1016: Cannot declare a tab variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'let v:version = 123',
        ], 'E1016: Cannot declare a v: variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'let $VARIABLE = "text"',
        ], 'E1016: Cannot declare an environment variable:')
  
    CheckScriptFailure([
--- 2343,2379 ----
  
    CheckScriptFailure([
        'vim9script',
!       'let var = 123',
!       ], 'E1126: Cannot use :let in Vim9 script')
! 
!   CheckScriptFailure([
!       'vim9script',
!       'var g:var = 123',
        ], 'E1016: Cannot declare a global variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'var b:var = 123',
        ], 'E1016: Cannot declare a buffer variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'var w:var = 123',
        ], 'E1016: Cannot declare a window variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'var t:var = 123',
        ], 'E1016: Cannot declare a tab variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'var v:version = 123',
        ], 'E1016: Cannot declare a v: variable:')
  
    CheckScriptFailure([
        'vim9script',
!       'var $VARIABLE = "text"',
        ], 'E1016: Cannot declare an environment variable:')
  
    CheckScriptFailure([
***************
*** 2406,2417 ****
  
    CheckScriptSuccess([
        'vim9script',
!       'let v = 1 # comment5',
        ])
  
    CheckScriptFailure([
        'vim9script',
!       'let v = 1# comment6',
        ], 'E15:')
  
    CheckScriptSuccess([
--- 2414,2425 ----
  
    CheckScriptSuccess([
        'vim9script',
!       'var v = 1 # comment5',
        ])
  
    CheckScriptFailure([
        'vim9script',
!       'var v = 1# comment6',
        ], 'E15:')
  
    CheckScriptSuccess([
***************
*** 2439,2445 ****
  enddef
  
  def Test_finish()
!   let lines =<< trim END
      vim9script
      g:res = 'one'
      if v:false | finish | endif
--- 2447,2453 ----
  enddef
  
  def Test_finish()
!   var lines =<< trim END
      vim9script
      g:res = 'one'
      if v:false | finish | endif
***************
*** 2456,2462 ****
  enddef
  
  def Test_let_func_call()
!   let lines =<< trim END
      vim9script
      func GetValue()
        if exists('g:count')
--- 2464,2470 ----
  enddef
  
  def Test_let_func_call()
!   var lines =<< trim END
      vim9script
      func GetValue()
        if exists('g:count')
***************
*** 2466,2474 ****
        endif
        return 'this'
      endfunc
!     let val: string = GetValue() 
      # env var is always a string
!     let env = $TERM
    END
    writefile(lines, 'Xfinished')
    source Xfinished
--- 2474,2482 ----
        endif
        return 'this'
      endfunc
!     var val: string = GetValue() 
      # env var is always a string
!     var env = $TERM
    END
    writefile(lines, 'Xfinished')
    source Xfinished
***************
*** 2480,2511 ****
  enddef
  
  def Test_let_missing_type()
!   let lines =<< trim END
      vim9script
!     let var = g:unknown
    END
    CheckScriptFailure(lines, 'E121:')
  
    lines =<< trim END
      vim9script
!     let nr: number = 123
!     let var = nr
    END
    CheckScriptSuccess(lines)
  enddef
  
  def Test_let_declaration()
!   let lines =<< trim END
      vim9script
!     let var: string
!     g:var_uninit = var
!     var = 'text'
!     g:var_test = var
      # prefixing s: is optional
!     s:var = 'prefixed'
!     g:var_prefixed = s:var
  
!     let s:other: number
      other = 1234
      g:other_var = other
  
--- 2488,2519 ----
  enddef
  
  def Test_let_missing_type()
!   var lines =<< trim END
      vim9script
!     var name = g:unknown
    END
    CheckScriptFailure(lines, 'E121:')
  
    lines =<< trim END
      vim9script
!     var nr: number = 123
!     var name = nr
    END
    CheckScriptSuccess(lines)
  enddef
  
  def Test_let_declaration()
!   var lines =<< trim END
      vim9script
!     var name: string
!     g:var_uninit = name
!     name = 'text'
!     g:var_test = name
      # prefixing s: is optional
!     s:name = 'prefixed'
!     g:var_prefixed = s:name
  
!     var s:other: number
      other = 1234
      g:other_var = other
  
***************
*** 2530,2536 ****
  enddef
  
  def Test_let_declaration_fails()
!   let lines =<< trim END
      vim9script
      final var: string
    END
--- 2538,2544 ----
  enddef
  
  def Test_let_declaration_fails()
!   var lines =<< trim END
      vim9script
      final var: string
    END
***************
*** 2544,2584 ****
  
    lines =<< trim END
      vim9script
!     let 9var: string
    END
    CheckScriptFailure(lines, 'E475:')
  enddef
  
  def Test_let_type_check()
!   let lines =<< trim END
      vim9script
!     let var: string
!     var = 1234
    END
    CheckScriptFailure(lines, 'E1012:')
  
    lines =<< trim END
      vim9script
!     let var:string
    END
    CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
      vim9script
!     let var: asdf
    END
    CheckScriptFailure(lines, 'E1010:')
  
    lines =<< trim END
      vim9script
!     let s:l: list<number>
      s:l = []
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
      vim9script
!     let s:d: dict<number>
      s:d = {}
    END
    CheckScriptSuccess(lines)
--- 2552,2592 ----
  
    lines =<< trim END
      vim9script
!     var 9var: string
    END
    CheckScriptFailure(lines, 'E475:')
  enddef
  
  def Test_let_type_check()
!   var lines =<< trim END
      vim9script
!     var name: string
!     name = 1234
    END
    CheckScriptFailure(lines, 'E1012:')
  
    lines =<< trim END
      vim9script
!     var name:string
    END
    CheckScriptFailure(lines, 'E1069:')
  
    lines =<< trim END
      vim9script
!     var name: asdf
    END
    CheckScriptFailure(lines, 'E1010:')
  
    lines =<< trim END
      vim9script
!     var s:l: list<number>
      s:l = []
    END
    CheckScriptSuccess(lines)
  
    lines =<< trim END
      vim9script
!     var s:d: dict<number>
      s:d = {}
    END
    CheckScriptSuccess(lines)
***************
*** 2587,2614 ****
  let g:dict_number = #{one: 1, two: 2}
  
  def Test_let_list_dict_type()
!   let ll: list<number>
    ll = [1, 2, 2, 3, 3, 3]->uniq()
    ll->assert_equal([1, 2, 3])
  
!   let dd: dict<number>
    dd = g:dict_number
    dd->assert_equal(g:dict_number)
  
!   let lines =<< trim END
!       let ll: list<number>
        ll = [1, 2, 3]->map('"one"')
    END
    CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list<number> but 
got list<string>')
  enddef
  
  def Test_forward_declaration()
!   let lines =<< trim END
      vim9script
      def GetValue(): string
        return theVal
      enddef
!     let theVal = 'something'
      g:initVal = GetValue()
      theVal = 'else'
      g:laterVal = GetValue()
--- 2595,2622 ----
  let g:dict_number = #{one: 1, two: 2}
  
  def Test_let_list_dict_type()
!   var ll: list<number>
    ll = [1, 2, 2, 3, 3, 3]->uniq()
    ll->assert_equal([1, 2, 3])
  
!   var dd: dict<number>
    dd = g:dict_number
    dd->assert_equal(g:dict_number)
  
!   var lines =<< trim END
!       var ll: list<number>
        ll = [1, 2, 3]->map('"one"')
    END
    CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list<number> but 
got list<string>')
  enddef
  
  def Test_forward_declaration()
!   var lines =<< trim END
      vim9script
      def GetValue(): string
        return theVal
      enddef
!     var theVal = 'something'
      g:initVal = GetValue()
      theVal = 'else'
      g:laterVal = GetValue()
***************
*** 2624,2630 ****
  enddef
  
  def Test_source_vim9_from_legacy()
!   let legacy_lines =<< trim END
      source Xvim9_script.vim
  
      call assert_false(exists('local'))
--- 2632,2638 ----
  enddef
  
  def Test_source_vim9_from_legacy()
!   var legacy_lines =<< trim END
      source Xvim9_script.vim
  
      call assert_false(exists('local'))
***************
*** 2645,2655 ****
    END
    writefile(legacy_lines, 'Xlegacy_script.vim')
  
!   let vim9_lines =<< trim END
      vim9script
!     let local = 'local'
      g:global = 'global'
!     export let exported = 'exported'
      export def GetText(): string
         return 'text'
      enddef
--- 2653,2663 ----
    END
    writefile(legacy_lines, 'Xlegacy_script.vim')
  
!   var vim9_lines =<< trim END
      vim9script
!     var local = 'local'
      g:global = 'global'
!     export var exported = 'exported'
      export def GetText(): string
         return 'text'
      enddef
***************
*** 2669,2675 ****
    " check that items defined in Vim9 script are script-local, not global
    let vim9lines =<< trim END
      vim9script
!     let var = 'local'
      func TheFunc()
        echo 'local'
      endfunc
--- 2677,2683 ----
    " check that items defined in Vim9 script are script-local, not global
    let vim9lines =<< trim END
      vim9script
!     var name = 'local'
      func TheFunc()
        echo 'local'
      endfunc
***************
*** 2709,2715 ****
  
  " test using a vim9script that is auto-loaded from an autocmd
  def Test_vim9_autoload()
!   let lines =<< trim END
       vim9script
       def foo#test()
           echomsg getreg('"')
--- 2717,2723 ----
  
  " test using a vim9script that is auto-loaded from an autocmd
  def Test_vim9_autoload()
!   var lines =<< trim END
       vim9script
       def foo#test()
           echomsg getreg('"')
***************
*** 2718,2724 ****
  
    mkdir('Xdir/autoload', 'p')
    writefile(lines, 'Xdir/autoload/foo.vim')
!   let save_rtp = &rtp
    exe 'set rtp^=' .. getcwd() .. '/Xdir'
    augroup test
      autocmd TextYankPost * call foo#test()
--- 2726,2732 ----
  
    mkdir('Xdir/autoload', 'p')
    writefile(lines, 'Xdir/autoload/foo.vim')
!   var save_rtp = &rtp
    exe 'set rtp^=' .. getcwd() .. '/Xdir'
    augroup test
      autocmd TextYankPost * call foo#test()
***************
*** 2735,2741 ****
  
  " This was causing a crash because suppress_errthrow wasn't reset.
  def Test_vim9_autoload_error()
!   let lines =<< trim END
        vim9script
        def crash#func()
            try
--- 2743,2749 ----
  
  " This was causing a crash because suppress_errthrow wasn't reset.
  def Test_vim9_autoload_error()
!   var lines =<< trim END
        vim9script
        def crash#func()
            try
***************
*** 2775,2781 ****
  def Test_script_var_in_autocmd()
    # using a script variable from an autocommand, defined in a :def function 
in a
    # legacy Vim script, cannot check the variable type.
!   let lines =<< trim END
      let s:counter = 1
      def s:Func()
        au! CursorHold
--- 2783,2789 ----
  def Test_script_var_in_autocmd()
    # using a script variable from an autocommand, defined in a :def function 
in a
    # legacy Vim script, cannot check the variable type.
!   var lines =<< trim END
      let s:counter = 1
      def s:Func()
        au! CursorHold
***************
*** 2793,2809 ****
    # if the Vim syntax highlighting uses Vim9 constructs they can be used from
    # the command line window.
    mkdir('rtp/syntax', 'p')
!   let export_lines =<< trim END
      vim9script
!     export let That = 'yes'
    END
    writefile(export_lines, 'rtp/syntax/Xexport.vim')
!   let import_lines =<< trim END
      vim9script
      import That from './Xexport.vim'
    END
    writefile(import_lines, 'rtp/syntax/vim.vim')
!   let save_rtp = &rtp
    &rtp = getcwd() .. '/rtp' .. ',' .. &rtp
    syntax on
    augroup CmdWin
--- 2801,2817 ----
    # if the Vim syntax highlighting uses Vim9 constructs they can be used from
    # the command line window.
    mkdir('rtp/syntax', 'p')
!   var export_lines =<< trim END
      vim9script
!     export var That = 'yes'
    END
    writefile(export_lines, 'rtp/syntax/Xexport.vim')
!   var import_lines =<< trim END
      vim9script
      import That from './Xexport.vim'
    END
    writefile(import_lines, 'rtp/syntax/vim.vim')
!   var save_rtp = &rtp
    &rtp = getcwd() .. '/rtp' .. ',' .. &rtp
    syntax on
    augroup CmdWin
***************
*** 2830,2838 ****
  enddef
  
  def Test_unset_any_variable()
!   let lines =<< trim END
!     let var: any
!     assert_equal(0, var)
    END
    CheckDefAndScriptSuccess(lines)
  enddef
--- 2838,2846 ----
  enddef
  
  def Test_unset_any_variable()
!   var lines =<< trim END
!     var name: any
!     assert_equal(0, name)
    END
    CheckDefAndScriptSuccess(lines)
  enddef
***************
*** 2846,2852 ****
  
  def Run_Test_define_func_at_command_line()
    # run in a separate Vim instance to avoid the script context
!   let lines =<< trim END
      func CheckAndQuit()
        call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc')
        call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd')
--- 2854,2860 ----
  
  def Run_Test_define_func_at_command_line()
    # run in a separate Vim instance to avoid the script context
!   var lines =<< trim END
      func CheckAndQuit()
        call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc')
        call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd')
***************
*** 2854,2860 ****
    END
    writefile([''], 'Xdidcmd')
    writefile(lines, 'XcallFunc')
!   let buf = RunVimInTerminal('-S XcallFunc', #{rows: 6})
    # define Afunc() on the command line
    term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
    term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
--- 2862,2868 ----
    END
    writefile([''], 'Xdidcmd')
    writefile(lines, 'XcallFunc')
!   var buf = RunVimInTerminal('-S XcallFunc', #{rows: 6})
    # define Afunc() on the command line
    term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
    term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
***************
*** 2874,2880 ****
    bwipe!
  
    # also when the context is Vim9 script
!   let lines =<< trim END
      vim9script
      new
      setline(1, 'something')
--- 2882,2888 ----
    bwipe!
  
    # also when the context is Vim9 script
!   var lines =<< trim END
      vim9script
      new
      setline(1, 'something')
*** ../vim-8.2.1755/src/version.c       2020-09-27 14:22:45.006688671 +0200
--- src/version.c       2020-09-27 15:10:35.323511869 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1756,
  /**/

-- 
All good vision statements are created by groups of people with bloated
bladders who would rather be doing anything else.
                                (Scott Adams - The Dilbert principle)

 /// 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/202009271319.08RDJusM157829%40masaka.moolenaar.net.

Raspunde prin e-mail lui