Patch 8.2.1761
Problem:    Vim9: Some tests are still using :let.
Solution:   Change more declarations to use :var.
Files:      src/testdir/test_vim9_assign.vim,
            src/testdir/test_vim9_cmd.vim,
            src/testdir/test_vim9_disassemble.vim


*** ../vim-8.2.1760/src/testdir/test_vim9_assign.vim    2020-09-27 
18:24:00.087276290 +0200
--- src/testdir/test_vim9_assign.vim    2020-09-27 18:47:06.583098746 +0200
***************
*** 3,8 ****
--- 3,11 ----
  source check.vim
  source vim9.vim
  
+ " TODO: remove later
+ let v:disallow_let = 1
+ 
  let s:appendToMe = 'xxx'
  let s:addToMe = 111
  let g:existing = 'yes'
*** ../vim-8.2.1760/src/testdir/test_vim9_cmd.vim       2020-09-21 
22:21:15.167008475 +0200
--- src/testdir/test_vim9_cmd.vim       2020-09-27 19:03:27.088440706 +0200
***************
*** 4,15 ****
  source vim9.vim
  source view_util.vim
  
  def Test_edit_wildcards()
!   let filename = 'Xtest'
    edit `=filename`
    assert_equal('Xtest', bufname())
  
!   let filenr = 123
    edit Xtest`=filenr`
    assert_equal('Xtest123', bufname())
  
--- 4,18 ----
  source vim9.vim
  source view_util.vim
  
+ " TODO: remove later
+ let v:disallow_let = 1
+ 
  def Test_edit_wildcards()
!   var filename = 'Xtest'
    edit `=filename`
    assert_equal('Xtest', bufname())
  
!   var filenr = 123
    edit Xtest`=filenr`
    assert_equal('Xtest123', bufname())
  
***************
*** 25,31 ****
    CheckUnix
    CheckFeature postscript
  
!   let outfile = 'print'
    hardcopy > X`=outfile`.ps
    assert_true(filereadable('Xprint.ps'))
  
--- 28,34 ----
    CheckUnix
    CheckFeature postscript
  
!   var outfile = 'print'
    hardcopy > X`=outfile`.ps
    assert_true(filereadable('Xprint.ps'))
  
***************
*** 34,43 ****
  
  def Test_syn_include_wildcards()
    writefile(['syn keyword Found found'], 'Xthemine.vim')
!   let save_rtp = &rtp
    &rtp = '.'
  
!   let fname = 'mine'
    syn include @Group Xthe`=fname`.vim
    assert_match('Found.* contained found', execute('syn list Found'))
  
--- 37,46 ----
  
  def Test_syn_include_wildcards()
    writefile(['syn keyword Found found'], 'Xthemine.vim')
!   var save_rtp = &rtp
    &rtp = '.'
  
!   var fname = 'mine'
    syn include @Group Xthe`=fname`.vim
    assert_match('Found.* contained found', execute('syn list Found'))
  
***************
*** 46,52 ****
  enddef
  
  def Test_echo_linebreak()
!   let lines =<< trim END
        vim9script
        redir @a
        echo 'one'
--- 49,55 ----
  enddef
  
  def Test_echo_linebreak()
!   var lines =<< trim END
        vim9script
        redir @a
        echo 'one'
***************
*** 69,75 ****
  enddef
  
  def Test_if_linebreak()
!   let lines =<< trim END
        vim9script
        if 1 &&
              2
--- 72,78 ----
  enddef
  
  def Test_if_linebreak()
!   var lines =<< trim END
        vim9script
        if 1 &&
              2
***************
*** 98,106 ****
  enddef
  
  def Test_while_linebreak()
!   let lines =<< trim END
        vim9script
!       let nr = 0
        while nr <
                10 + 3
              nr = nr
--- 101,109 ----
  enddef
  
  def Test_while_linebreak()
!   var lines =<< trim END
        vim9script
!       var nr = 0
        while nr <
                10 + 3
              nr = nr
***************
*** 112,118 ****
  
    lines =<< trim END
        vim9script
!       let nr = 0
        while nr
              <
                10
--- 115,121 ----
  
    lines =<< trim END
        vim9script
!       var nr = 0
        while nr
              <
                10
***************
*** 128,136 ****
  enddef
  
  def Test_for_linebreak()
!   let lines =<< trim END
        vim9script
!       let nr = 0
        for x
              in
                [1, 2, 3, 4]
--- 131,139 ----
  enddef
  
  def Test_for_linebreak()
!   var lines =<< trim END
        vim9script
!       var nr = 0
        for x
              in
                [1, 2, 3, 4]
***************
*** 142,148 ****
  
    lines =<< trim END
        vim9script
!       let nr = 0
        for x
              in
                [1, 2,
--- 145,151 ----
  
    lines =<< trim END
        vim9script
!       var nr = 0
        for x
              in
                [1, 2,
***************
*** 158,166 ****
  enddef
  
  def Test_method_call_linebreak()
!   let lines =<< trim END
        vim9script
!       let res = []
        func RetArg(
              arg
              )
--- 161,169 ----
  enddef
  
  def Test_method_call_linebreak()
!   var lines =<< trim END
        vim9script
!       var res = []
        func RetArg(
              arg
              )
***************
*** 175,190 ****
  enddef
  
  def Test_dict_member()
!    let test: dict<list<number>> = {'data': [3, 1, 2]}
     test.data->sort()
     assert_equal(#{data: [1, 2, 3]}, test)
     test.data
        ->reverse()
     assert_equal(#{data: [3, 2, 1]}, test)
  
!   let lines =<< trim END
        vim9script
!       let test: dict<list<number>> = {'data': [3, 1, 2]}
        test.data->sort()
        assert_equal(#{data: [1, 2, 3]}, test)
    END
--- 178,193 ----
  enddef
  
  def Test_dict_member()
!    var test: dict<list<number>> = {'data': [3, 1, 2]}
     test.data->sort()
     assert_equal(#{data: [1, 2, 3]}, test)
     test.data
        ->reverse()
     assert_equal(#{data: [3, 2, 1]}, test)
  
!   var lines =<< trim END
        vim9script
!       var test: dict<list<number>> = {'data': [3, 1, 2]}
        test.data->sort()
        assert_equal(#{data: [1, 2, 3]}, test)
    END
***************
*** 193,206 ****
  
  def Test_bar_after_command()
    def RedrawAndEcho()
!     let x = 'did redraw'
      redraw | echo x
    enddef
    RedrawAndEcho()
    assert_match('did redraw', Screenline(&lines))
  
    def CallAndEcho()
!     let x = 'did redraw'
      reg_executing() | echo x
    enddef
    CallAndEcho()
--- 196,209 ----
  
  def Test_bar_after_command()
    def RedrawAndEcho()
!     var x = 'did redraw'
      redraw | echo x
    enddef
    RedrawAndEcho()
    assert_match('did redraw', Screenline(&lines))
  
    def CallAndEcho()
!     var x = 'did redraw'
      reg_executing() | echo x
    enddef
    CallAndEcho()
***************
*** 232,245 ****
  enddef
  
  def Test_filter_is_not_modifier()
!   let tags = [{'a': 1, 'b': 2}, {'x': 3, 'y': 4}]
    filter(tags, { _, v -> has_key(v, 'x') ? 1 : 0 })
    assert_equal([#{x: 3, y: 4}], tags)
  enddef
  
  def Test_eval_command()
!   let from = 3
!   let to = 5
    g:val = 111
    def Increment(nrs: list<number>)
      for nr in nrs
--- 235,248 ----
  enddef
  
  def Test_filter_is_not_modifier()
!   var tags = [{'a': 1, 'b': 2}, {'x': 3, 'y': 4}]
    filter(tags, { _, v -> has_key(v, 'x') ? 1 : 0 })
    assert_equal([#{x: 3, y: 4}], tags)
  enddef
  
  def Test_eval_command()
!   var from = 3
!   var to = 5
    g:val = 111
    def Increment(nrs: list<number>)
      for nr in nrs
***************
*** 253,259 ****
  enddef
  
  def Test_map_command()
!   let lines =<< trim END
        nnoremap <F3> :echo 'hit F3 #'<CR>
        assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
    END
--- 256,262 ----
  enddef
  
  def Test_map_command()
!   var lines =<< trim END
        nnoremap <F3> :echo 'hit F3 #'<CR>
        assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
    END
***************
*** 264,270 ****
  def Test_normal_command()
    new
    setline(1, 'doesnotexist')
!   let caught = 0
    try
      exe "norm! \<C-]>"
    catch /E433/
--- 267,273 ----
  def Test_normal_command()
    new
    setline(1, 'doesnotexist')
!   var caught = 0
    try
      exe "norm! \<C-]>"
    catch /E433/
*** ../vim-8.2.1760/src/testdir/test_vim9_disassemble.vim       2020-09-23 
21:57:16.641934712 +0200
--- src/testdir/test_vim9_disassemble.vim       2020-09-27 19:01:06.872832983 
+0200
***************
*** 2,7 ****
--- 2,10 ----
  
  source check.vim
  
+ " TODO: remove later
+ let v:disallow_let = 1
+ 
  func NotCompiled()
    echo "not"
  endfunc
***************
*** 13,19 ****
  let t:tabpagevar = 't'
  
  def s:ScriptFuncLoad(arg: string)
!   let local = 1
    buffers
    echo arg
    echo local
--- 16,22 ----
  let t:tabpagevar = 't'
  
  def s:ScriptFuncLoad(arg: string)
!   var local = 1
    buffers
    echo arg
    echo local
***************
*** 41,47 ****
    assert_fails('disass 234', 'E129:')
    assert_fails('disass <XX>foo', 'E129:')
  
!   let res = execute('disass s:ScriptFuncLoad')
    assert_match('<SNR>\d*_ScriptFuncLoad.*' ..
          'buffers.*' ..
          ' EXEC \+buffers.*' ..
--- 44,50 ----
    assert_fails('disass 234', 'E129:')
    assert_fails('disass <XX>foo', 'E129:')
  
!   var res = execute('disass s:ScriptFuncLoad')
    assert_match('<SNR>\d*_ScriptFuncLoad.*' ..
          'buffers.*' ..
          ' EXEC \+buffers.*' ..
***************
*** 76,93 ****
  enddef
  
  def s:EditExpand()
!   let filename = "file"
!   let filenr = 123
    edit the`=filename``=filenr`.txt
  enddef
  
  def Test_disassemble_exec_expr()
!   let res = execute('disass s:EditExpand')
    assert_match('<SNR>\d*_EditExpand\_s*' ..
!         ' let filename = "file"\_s*' ..
          '\d PUSHS "file"\_s*' ..
          '\d STORE $0\_s*' ..
!         ' let filenr = 123\_s*' ..
          '\d STORE 123 in $1\_s*' ..
          ' edit the`=filename``=filenr`.txt\_s*' ..
          '\d PUSHS "edit the"\_s*' ..
--- 79,96 ----
  enddef
  
  def s:EditExpand()
!   var filename = "file"
!   var filenr = 123
    edit the`=filename``=filenr`.txt
  enddef
  
  def Test_disassemble_exec_expr()
!   var res = execute('disass s:EditExpand')
    assert_match('<SNR>\d*_EditExpand\_s*' ..
!         ' var filename = "file"\_s*' ..
          '\d PUSHS "file"\_s*' ..
          '\d STORE $0\_s*' ..
!         ' var filenr = 123\_s*' ..
          '\d STORE 123 in $1\_s*' ..
          ' edit the`=filename``=filenr`.txt\_s*' ..
          '\d PUSHS "edit the"\_s*' ..
***************
*** 107,113 ****
  enddef
  
  def Test_disassemble_yank_range()
!   let res = execute('disass s:YankRange')
    assert_match('<SNR>\d*_YankRange.*' ..
          ' norm! m\[jjm\]\_s*' ..
          '\d EXEC   norm! m\[jjm\]\_s*' ..
--- 110,116 ----
  enddef
  
  def Test_disassemble_yank_range()
!   var res = execute('disass s:YankRange')
    assert_match('<SNR>\d*_YankRange.*' ..
          ' norm! m\[jjm\]\_s*' ..
          '\d EXEC   norm! m\[jjm\]\_s*' ..
***************
*** 123,129 ****
  enddef
  
  def Test_disassemble_put_expr()
!   let res = execute('disass s:PutExpr')
    assert_match('<SNR>\d*_PutExpr.*' ..
          ' :3put ="text"\_s*' ..
          '\d PUSHS "text"\_s*' ..
--- 126,132 ----
  enddef
  
  def Test_disassemble_put_expr()
!   var res = execute('disass s:PutExpr')
    assert_match('<SNR>\d*_PutExpr.*' ..
          ' :3put ="text"\_s*' ..
          '\d PUSHS "text"\_s*' ..
***************
*** 134,149 ****
  enddef
  
  def s:ScriptFuncPush()
!   let localbool = true
!   let localspec = v:none
!   let localblob = 0z1234
    if has('float')
!     let localfloat = 1.234
    endif
  enddef
  
  def Test_disassemble_push()
!   let res = execute('disass s:ScriptFuncPush')
    assert_match('<SNR>\d*_ScriptFuncPush.*' ..
          'localbool = true.*' ..
          ' PUSH v:true.*' ..
--- 137,152 ----
  enddef
  
  def s:ScriptFuncPush()
!   var localbool = true
!   var localspec = v:none
!   var localblob = 0z1234
    if has('float')
!     var localfloat = 1.234
    endif
  enddef
  
  def Test_disassemble_push()
!   var res = execute('disass s:ScriptFuncPush')
    assert_match('<SNR>\d*_ScriptFuncPush.*' ..
          'localbool = true.*' ..
          ' PUSH v:true.*' ..
***************
*** 161,169 ****
  enddef
  
  def s:ScriptFuncStore()
!   let localnr = 1
    localnr = 2
!   let localstr = 'abc'
    localstr = 'xyz'
    v:char = 'abc'
    s:scriptvar = 'sv'
--- 164,172 ----
  enddef
  
  def s:ScriptFuncStore()
!   var localnr = 1
    localnr = 2
!   var localstr = 'abc'
    localstr = 'xyz'
    v:char = 'abc'
    s:scriptvar = 'sv'
***************
*** 177,188 ****
  enddef
  
  def Test_disassemble_store()
!   let res = execute('disass s:ScriptFuncStore')
    assert_match('<SNR>\d*_ScriptFuncStore.*' ..
!         'let localnr = 1.*' ..
          'localnr = 2.*' ..
          ' STORE 2 in $0.*' ..
!         'let localstr = ''abc''.*' ..
          'localstr = ''xyz''.*' ..
          ' STORE $1.*' ..
          'v:char = ''abc''.*' ..
--- 180,191 ----
  enddef
  
  def Test_disassemble_store()
!   var res = execute('disass s:ScriptFuncStore')
    assert_match('<SNR>\d*_ScriptFuncStore.*' ..
!         'var localnr = 1.*' ..
          'localnr = 2.*' ..
          ' STORE 2 in $0.*' ..
!         'var localstr = ''abc''.*' ..
          'localstr = ''xyz''.*' ..
          ' STORE $1.*' ..
          'v:char = ''abc''.*' ..
***************
*** 207,222 ****
  enddef
  
  def s:ScriptFuncStoreMember()
!   let locallist: list<number> = []
    locallist[0] = 123
!   let localdict: dict<number> = {}
    localdict["a"] = 456
  enddef
  
  def Test_disassemble_store_member()
!   let res = execute('disass s:ScriptFuncStoreMember')
    assert_match('<SNR>\d*_ScriptFuncStoreMember\_s*' ..
!         'let locallist: list<number> = []\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $0\_s*' ..
          'locallist\[0\] = 123\_s*' ..
--- 210,225 ----
  enddef
  
  def s:ScriptFuncStoreMember()
!   var locallist: list<number> = []
    locallist[0] = 123
!   var localdict: dict<number> = {}
    localdict["a"] = 456
  enddef
  
  def Test_disassemble_store_member()
!   var res = execute('disass s:ScriptFuncStoreMember')
    assert_match('<SNR>\d*_ScriptFuncStoreMember\_s*' ..
!         'var locallist: list<number> = []\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $0\_s*' ..
          'locallist\[0\] = 123\_s*' ..
***************
*** 224,230 ****
          '\d PUSHNR 0\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d STORELIST\_s*' ..
!         'let localdict: dict<number> = {}\_s*' ..
          '\d NEWDICT size 0\_s*' ..
          '\d STORE $1\_s*' ..
          'localdict\["a"\] = 456\_s*' ..
--- 227,233 ----
          '\d PUSHNR 0\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d STORELIST\_s*' ..
!         'var localdict: dict<number> = {}\_s*' ..
          '\d NEWDICT size 0\_s*' ..
          '\d STORE $1\_s*' ..
          'localdict\["a"\] = 456\_s*' ..
***************
*** 238,259 ****
  enddef
  
  def s:ListAssign()
!   let x: string
!   let y: string
!   let l: list<any>
    [x, y; l] = g:stringlist
  enddef
  
  def Test_disassemble_list_assign()
!   let res = execute('disass s:ListAssign')
    assert_match('<SNR>\d*_ListAssign\_s*' ..
!         'let x: string\_s*' ..
          '\d PUSHS "\[NULL\]"\_s*' ..
          '\d STORE $0\_s*' ..
!         'let y: string\_s*' ..
          '\d PUSHS "\[NULL\]"\_s*' ..
          '\d STORE $1\_s*' ..
!         'let l: list<any>\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $2\_s*' ..
          '\[x, y; l\] = g:stringlist\_s*' ..
--- 241,262 ----
  enddef
  
  def s:ListAssign()
!   var x: string
!   var y: string
!   var l: list<any>
    [x, y; l] = g:stringlist
  enddef
  
  def Test_disassemble_list_assign()
!   var res = execute('disass s:ListAssign')
    assert_match('<SNR>\d*_ListAssign\_s*' ..
!         'var x: string\_s*' ..
          '\d PUSHS "\[NULL\]"\_s*' ..
          '\d STORE $0\_s*' ..
!         'var y: string\_s*' ..
          '\d PUSHS "\[NULL\]"\_s*' ..
          '\d STORE $1\_s*' ..
!         'var l: list<any>\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $2\_s*' ..
          '\[x, y; l\] = g:stringlist\_s*' ..
***************
*** 281,287 ****
  enddef
  
  def Test_disassemble_unlet()
!   let res = execute('disass s:ScriptFuncUnlet')
    assert_match('<SNR>\d*_ScriptFuncUnlet\_s*' ..
          'g:somevar = "value"\_s*' ..
          '\d PUSHS "value"\_s*' ..
--- 284,290 ----
  enddef
  
  def Test_disassemble_unlet()
!   var res = execute('disass s:ScriptFuncUnlet')
    assert_match('<SNR>\d*_ScriptFuncUnlet\_s*' ..
          'g:somevar = "value"\_s*' ..
          '\d PUSHS "value"\_s*' ..
***************
*** 306,312 ****
  enddef
  
  def Test_disassemble_try()
!   let res = execute('disass s:ScriptFuncTry')
    assert_match('<SNR>\d*_ScriptFuncTry\_s*' ..
          'try\_s*' ..
          '\d TRY catch -> \d\+, finally -> \d\+\_s*' ..
--- 309,315 ----
  enddef
  
  def Test_disassemble_try()
!   var res = execute('disass s:ScriptFuncTry')
    assert_match('<SNR>\d*_ScriptFuncTry\_s*' ..
          'try\_s*' ..
          '\d TRY catch -> \d\+, finally -> \d\+\_s*' ..
***************
*** 333,352 ****
  enddef
  
  def s:ScriptFuncNew()
!   let ll = [1, "two", 333]
!   let dd = #{one: 1, two: "val"}
  enddef
  
  def Test_disassemble_new()
!   let res = execute('disass s:ScriptFuncNew')
    assert_match('<SNR>\d*_ScriptFuncNew\_s*' ..
!         'let ll = \[1, "two", 333\]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHS "two"\_s*' ..
          '\d PUSHNR 333\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'let dd = #{one: 1, two: "val"}\_s*' ..
          '\d PUSHS "one"\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHS "two"\_s*' ..
--- 336,355 ----
  enddef
  
  def s:ScriptFuncNew()
!   var ll = [1, "two", 333]
!   var dd = #{one: 1, two: "val"}
  enddef
  
  def Test_disassemble_new()
!   var res = execute('disass s:ScriptFuncNew')
    assert_match('<SNR>\d*_ScriptFuncNew\_s*' ..
!         'var ll = \[1, "two", 333\]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHS "two"\_s*' ..
          '\d PUSHNR 333\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'var dd = #{one: 1, two: "val"}\_s*' ..
          '\d PUSHS "one"\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHS "two"\_s*' ..
***************
*** 376,390 ****
    s:ScriptFuncNew()
    UserFunc()
    UserFuncWithArg("foo")
!   let FuncRef = function("UserFunc")
    FuncRef()
!   let FuncRefWithArg = function("UserFuncWithArg")
    FuncRefWithArg("bar")
    return "yes"
  enddef
  
  def Test_disassemble_call()
!   let res = execute('disass s:ScriptFuncCall')
    assert_match('<SNR>\d\+_ScriptFuncCall\_s*' ..
          'changenr()\_s*' ..
          '\d BCALL changenr(argc 0)\_s*' ..
--- 379,393 ----
    s:ScriptFuncNew()
    UserFunc()
    UserFuncWithArg("foo")
!   var FuncRef = function("UserFunc")
    FuncRef()
!   var FuncRefWithArg = function("UserFuncWithArg")
    FuncRefWithArg("bar")
    return "yes"
  enddef
  
  def Test_disassemble_call()
!   var res = execute('disass s:ScriptFuncCall')
    assert_match('<SNR>\d\+_ScriptFuncCall\_s*' ..
          'changenr()\_s*' ..
          '\d BCALL changenr(argc 0)\_s*' ..
***************
*** 413,419 ****
          '\d\+ PUSHS "foo"\_s*' ..
          '\d\+ UCALL UserFuncWithArg(argc 1)\_s*' ..
          '\d\+ DROP\_s*' ..
!         'let FuncRef = function("UserFunc")\_s*' ..
          '\d\+ PUSHS "UserFunc"\_s*' ..
          '\d\+ BCALL function(argc 1)\_s*' ..
          '\d\+ STORE $0\_s*' ..
--- 416,422 ----
          '\d\+ PUSHS "foo"\_s*' ..
          '\d\+ UCALL UserFuncWithArg(argc 1)\_s*' ..
          '\d\+ DROP\_s*' ..
!         'var FuncRef = function("UserFunc")\_s*' ..
          '\d\+ PUSHS "UserFunc"\_s*' ..
          '\d\+ BCALL function(argc 1)\_s*' ..
          '\d\+ STORE $0\_s*' ..
***************
*** 421,427 ****
          '\d\+ LOAD $\d\_s*' ..
          '\d\+ PCALL (argc 0)\_s*' ..
          '\d\+ DROP\_s*' ..
!         'let FuncRefWithArg = function("UserFuncWithArg")\_s*' ..
          '\d\+ PUSHS "UserFuncWithArg"\_s*' ..
          '\d\+ BCALL function(argc 1)\_s*' ..
          '\d\+ STORE $1\_s*' ..
--- 424,430 ----
          '\d\+ LOAD $\d\_s*' ..
          '\d\+ PCALL (argc 0)\_s*' ..
          '\d\+ DROP\_s*' ..
!         'var FuncRefWithArg = function("UserFuncWithArg")\_s*' ..
          '\d\+ PUSHS "UserFuncWithArg"\_s*' ..
          '\d\+ BCALL function(argc 1)\_s*' ..
          '\d\+ STORE $1\_s*' ..
***************
*** 437,443 ****
  enddef
  
  def s:CreateRefs()
!   let local = 'a'
    def Append(arg: string)
      local ..= arg
    enddef
--- 440,446 ----
  enddef
  
  def s:CreateRefs()
!   var local = 'a'
    def Append(arg: string)
      local ..= arg
    enddef
***************
*** 450,456 ****
  
  def Test_disassemble_closure()
    CreateRefs()
!   let res = execute('disass g:Append')
    assert_match('<lambda>\d\_s*' ..
          'local ..= arg\_s*' ..
          '\d LOADOUTER $0\_s*' ..
--- 453,459 ----
  
  def Test_disassemble_closure()
    CreateRefs()
!   var res = execute('disass g:Append')
    assert_match('<lambda>\d\_s*' ..
          'local ..= arg\_s*' ..
          '\d LOADOUTER $0\_s*' ..
***************
*** 484,490 ****
  enddef
  
  def Test_disassemble_pcall()
!   let res = execute('disass s:ScriptPCall')
    assert_match('<SNR>\d\+_ScriptPCall\_s*' ..
          'RefThis()("text")\_s*' ..
          '\d DCALL RefThis(argc 0)\_s*' ..
--- 487,493 ----
  enddef
  
  def Test_disassemble_pcall()
!   var res = execute('disass s:ScriptPCall')
    assert_match('<SNR>\d\+_ScriptPCall\_s*' ..
          'RefThis()("text")\_s*' ..
          '\d DCALL RefThis(argc 0)\_s*' ..
***************
*** 507,513 ****
  enddef
  
  def Test_disassemble_update_instr()
!   let res = execute('disass s:FuncWithForwardCall')
    assert_match('FuncWithForwardCall\_s*' ..
          'return g:DefinedLater("yes")\_s*' ..
          '\d PUSHS "yes"\_s*' ..
--- 510,516 ----
  enddef
  
  def Test_disassemble_update_instr()
!   var res = execute('disass s:FuncWithForwardCall')
    assert_match('FuncWithForwardCall\_s*' ..
          'return g:DefinedLater("yes")\_s*' ..
          '\d PUSHS "yes"\_s*' ..
***************
*** 533,539 ****
  enddef
  
  def Test_disassemble_call_default()
!   let res = execute('disass FuncWithDefault')
    assert_match('FuncWithDefault\_s*' ..
          '\d PUSHS "default"\_s*' ..
          '\d STORE arg\[-1]\_s*' ..
--- 536,542 ----
  enddef
  
  def Test_disassemble_call_default()
!   var res = execute('disass FuncWithDefault')
    assert_match('FuncWithDefault\_s*' ..
          '\d PUSHS "default"\_s*' ..
          '\d STORE arg\[-1]\_s*' ..
***************
*** 574,580 ****
  
  def Test_disassemble_const_expr()
    assert_equal("\nyes", execute('HasEval()'))
!   let instr = execute('disassemble HasEval')
    assert_match('HasEval\_s*' ..
          'if has("eval")\_s*' ..
          'echo "yes"\_s*' ..
--- 577,583 ----
  
  def Test_disassemble_const_expr()
    assert_equal("\nyes", execute('HasEval()'))
!   var instr = execute('disassemble HasEval')
    assert_match('HasEval\_s*' ..
          'if has("eval")\_s*' ..
          'echo "yes"\_s*' ..
***************
*** 630,636 ****
  enddef
  
  def Test_disassemble_return_in_if()
!   let instr = execute('disassemble ReturnInIf')
    assert_match('ReturnInIf\_s*' ..
          'if g:cond\_s*' ..
          '0 LOADG g:cond\_s*' ..
--- 633,639 ----
  enddef
  
  def Test_disassemble_return_in_if()
!   var instr = execute('disassemble ReturnInIf')
    assert_match('ReturnInIf\_s*' ..
          'if g:cond\_s*' ..
          '0 LOADG g:cond\_s*' ..
***************
*** 646,667 ****
  enddef
  
  def WithFunc()
!   let Funky1: func
!   let Funky2: func = function("len")
!   let Party2: func = funcref("UserFunc")
  enddef
  
  def Test_disassemble_function()
!   let instr = execute('disassemble WithFunc')
    assert_match('WithFunc\_s*' ..
!         'let Funky1: func\_s*' ..
          '0 PUSHFUNC "\[none]"\_s*' ..
          '1 STORE $0\_s*' ..
!         'let Funky2: func = function("len")\_s*' ..
          '2 PUSHS "len"\_s*' ..
          '3 BCALL function(argc 1)\_s*' ..
          '4 STORE $1\_s*' ..
!         'let Party2: func = funcref("UserFunc")\_s*' ..
          '\d PUSHS "UserFunc"\_s*' ..
          '\d BCALL funcref(argc 1)\_s*' ..
          '\d STORE $2\_s*' ..
--- 649,670 ----
  enddef
  
  def WithFunc()
!   var Funky1: func
!   var Funky2: func = function("len")
!   var Party2: func = funcref("UserFunc")
  enddef
  
  def Test_disassemble_function()
!   var instr = execute('disassemble WithFunc')
    assert_match('WithFunc\_s*' ..
!         'var Funky1: func\_s*' ..
          '0 PUSHFUNC "\[none]"\_s*' ..
          '1 STORE $0\_s*' ..
!         'var Funky2: func = function("len")\_s*' ..
          '2 PUSHS "len"\_s*' ..
          '3 BCALL function(argc 1)\_s*' ..
          '4 STORE $1\_s*' ..
!         'var Party2: func = funcref("UserFunc")\_s*' ..
          '\d PUSHS "UserFunc"\_s*' ..
          '\d BCALL funcref(argc 1)\_s*' ..
          '\d STORE $2\_s*' ..
***************
*** 672,696 ****
  
  if has('channel')
    def WithChannel()
!     let job1: job
!     let job2: job = job_start("donothing")
!     let chan1: channel
    enddef
  endif
  
  def Test_disassemble_channel()
    CheckFeature channel
  
!   let instr = execute('disassemble WithChannel')
    assert_match('WithChannel\_s*' ..
!         'let job1: job\_s*' ..
          '\d PUSHJOB "no process"\_s*' ..
          '\d STORE $0\_s*' ..
!         'let job2: job = job_start("donothing")\_s*' ..
          '\d PUSHS "donothing"\_s*' ..
          '\d BCALL job_start(argc 1)\_s*' ..
          '\d STORE $1\_s*' ..
!         'let chan1: channel\_s*' ..
          '\d PUSHCHANNEL 0\_s*' ..
          '\d STORE $2\_s*' ..
          '\d PUSHNR 0\_s*' ..
--- 675,699 ----
  
  if has('channel')
    def WithChannel()
!     var job1: job
!     var job2: job = job_start("donothing")
!     var chan1: channel
    enddef
  endif
  
  def Test_disassemble_channel()
    CheckFeature channel
  
!   var instr = execute('disassemble WithChannel')
    assert_match('WithChannel\_s*' ..
!         'var job1: job\_s*' ..
          '\d PUSHJOB "no process"\_s*' ..
          '\d STORE $0\_s*' ..
!         'var job2: job = job_start("donothing")\_s*' ..
          '\d PUSHS "donothing"\_s*' ..
          '\d BCALL job_start(argc 1)\_s*' ..
          '\d STORE $1\_s*' ..
!         'var chan1: channel\_s*' ..
          '\d PUSHCHANNEL 0\_s*' ..
          '\d STORE $2\_s*' ..
          '\d PUSHNR 0\_s*' ..
***************
*** 699,713 ****
  enddef
  
  def WithLambda(): string
!   let F = {a -> "X" .. a .. "X"}
    return F("x")
  enddef
  
  def Test_disassemble_lambda()
    assert_equal("XxX", WithLambda())
!   let instr = execute('disassemble WithLambda')
    assert_match('WithLambda\_s*' ..
!         'let F = {a -> "X" .. a .. "X"}\_s*' ..
          '\d FUNCREF <lambda>\d\+\_s*' ..
          '\d STORE $0\_s*' ..
          'return F("x")\_s*' ..
--- 702,716 ----
  enddef
  
  def WithLambda(): string
!   var F = {a -> "X" .. a .. "X"}
    return F("x")
  enddef
  
  def Test_disassemble_lambda()
    assert_equal("XxX", WithLambda())
!   var instr = execute('disassemble WithLambda')
    assert_match('WithLambda\_s*' ..
!         'var F = {a -> "X" .. a .. "X"}\_s*' ..
          '\d FUNCREF <lambda>\d\+\_s*' ..
          '\d STORE $0\_s*' ..
          'return F("x")\_s*' ..
***************
*** 717,723 ****
          '\d RETURN',
          instr)
  
!    let name = substitute(instr, '.*\(<lambda>\d\+\).*', '\1', '')
     instr = execute('disassemble ' .. name)
     assert_match('<lambda>\d\+\_s*' ..
          'return "X" .. a .. "X"\_s*' ..
--- 720,726 ----
          '\d RETURN',
          instr)
  
!    var name = substitute(instr, '.*\(<lambda>\d\+\).*', '\1', '')
     instr = execute('disassemble ' .. name)
     assert_match('<lambda>\d\+\_s*' ..
          'return "X" .. a .. "X"\_s*' ..
***************
*** 738,744 ****
  enddef
  
  def Test_nested_func()
!    let instr = execute('disassemble NestedOuter')
     assert_match('NestedOuter\_s*' ..
          'def g:Inner()\_s*' ..
          'echomsg "inner"\_s*' ..
--- 741,747 ----
  enddef
  
  def Test_nested_func()
!    var instr = execute('disassemble NestedOuter')
     assert_match('NestedOuter\_s*' ..
          'def g:Inner()\_s*' ..
          'echomsg "inner"\_s*' ..
***************
*** 760,766 ****
    assert_equal("yes", AndOr(1))
    assert_equal("no", AndOr(2))
    assert_equal("yes", AndOr(4))
!   let instr = execute('disassemble AndOr')
    assert_match('AndOr\_s*' ..
          'if arg == 1 && arg != 2 || arg == 4\_s*' ..
          '\d LOAD arg\[-1]\_s*' ..
--- 763,769 ----
    assert_equal("yes", AndOr(1))
    assert_equal("no", AndOr(2))
    assert_equal("yes", AndOr(4))
!   var instr = execute('disassemble AndOr')
    assert_match('AndOr\_s*' ..
          'if arg == 1 && arg != 2 || arg == 4\_s*' ..
          '\d LOAD arg\[-1]\_s*' ..
***************
*** 779,785 ****
  enddef
  
  def ForLoop(): list<number>
!   let res: list<number>
    for i in range(3)
      res->add(i)
    endfor
--- 782,788 ----
  enddef
  
  def ForLoop(): list<number>
!   var res: list<number>
    for i in range(3)
      res->add(i)
    endfor
***************
*** 788,796 ****
  
  def Test_disassemble_for_loop()
    assert_equal([0, 1, 2], ForLoop())
!   let instr = execute('disassemble ForLoop')
    assert_match('ForLoop\_s*' ..
!         'let res: list<number>\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $0\_s*' ..
          'for i in range(3)\_s*' ..
--- 791,799 ----
  
  def Test_disassemble_for_loop()
    assert_equal([0, 1, 2], ForLoop())
!   var instr = execute('disassemble ForLoop')
    assert_match('ForLoop\_s*' ..
!         'var res: list<number>\_s*' ..
          '\d NEWLIST size 0\_s*' ..
          '\d STORE $0\_s*' ..
          'for i in range(3)\_s*' ..
***************
*** 811,817 ****
  enddef
  
  def ForLoopEval(): string
!   let res = ""
    for str in eval('["one", "two"]')
      res ..= str
    endfor
--- 814,820 ----
  enddef
  
  def ForLoopEval(): string
!   var res = ""
    for str in eval('["one", "two"]')
      res ..= str
    endfor
***************
*** 820,828 ****
  
  def Test_disassemble_for_loop_eval()
    assert_equal('onetwo', ForLoopEval())
!   let instr = execute('disassemble ForLoopEval')
    assert_match('ForLoopEval\_s*' ..
!         'let res = ""\_s*' ..
          '\d PUSHS ""\_s*' ..
          '\d STORE $0\_s*' ..
          'for str in eval(''\["one", "two"\]'')\_s*' ..
--- 823,831 ----
  
  def Test_disassemble_for_loop_eval()
    assert_equal('onetwo', ForLoopEval())
!   var instr = execute('disassemble ForLoopEval')
    assert_match('ForLoopEval\_s*' ..
!         'var res = ""\_s*' ..
          '\d PUSHS ""\_s*' ..
          '\d STORE $0\_s*' ..
          'for str in eval(''\["one", "two"\]'')\_s*' ..
***************
*** 850,862 ****
  let g:number = 42
  
  def TypeCast()
!   let l: list<number> = [23, <number>g:number]
  enddef
  
  def Test_disassemble_typecast()
!   let instr = execute('disassemble TypeCast')
    assert_match('TypeCast.*' ..
!         'let l: list<number> = \[23, <number>g:number\].*' ..
          '\d PUSHNR 23\_s*' ..
          '\d LOADG g:number\_s*' ..
          '\d CHECKTYPE number stack\[-1\]\_s*' ..
--- 853,865 ----
  let g:number = 42
  
  def TypeCast()
!   var l: list<number> = [23, <number>g:number]
  enddef
  
  def Test_disassemble_typecast()
!   var instr = execute('disassemble TypeCast')
    assert_match('TypeCast.*' ..
!         'var l: list<number> = \[23, <number>g:number\].*' ..
          '\d PUSHNR 23\_s*' ..
          '\d LOADG g:number\_s*' ..
          '\d CHECKTYPE number stack\[-1\]\_s*' ..
***************
*** 868,889 ****
  enddef
  
  def Computing()
!   let nr = 3
!   let nrres = nr + 7
    nrres = nr - 7
    nrres = nr * 7
    nrres = nr / 7
    nrres = nr % 7
  
!   let anyres = g:number + 7
    anyres = g:number - 7
    anyres = g:number * 7
    anyres = g:number / 7
    anyres = g:number % 7
  
    if has('float')
!     let fl = 3.0
!     let flres = fl + 7.0
      flres = fl - 7.0
      flres = fl * 7.0
      flres = fl / 7.0
--- 871,892 ----
  enddef
  
  def Computing()
!   var nr = 3
!   var nrres = nr + 7
    nrres = nr - 7
    nrres = nr * 7
    nrres = nr / 7
    nrres = nr % 7
  
!   var anyres = g:number + 7
    anyres = g:number - 7
    anyres = g:number * 7
    anyres = g:number / 7
    anyres = g:number % 7
  
    if has('float')
!     var fl = 3.0
!     var flres = fl + 7.0
      flres = fl - 7.0
      flres = fl * 7.0
      flres = fl / 7.0
***************
*** 891,901 ****
  enddef
  
  def Test_disassemble_computing()
!   let instr = execute('disassemble Computing')
    assert_match('Computing.*' ..
!         'let nr = 3.*' ..
          '\d STORE 3 in $0.*' ..
!         'let nrres = nr + 7.*' ..
          '\d LOAD $0.*' ..
          '\d PUSHNR 7.*' ..
          '\d OPNR +.*' ..
--- 894,904 ----
  enddef
  
  def Test_disassemble_computing()
!   var instr = execute('disassemble Computing')
    assert_match('Computing.*' ..
!         'var nr = 3.*' ..
          '\d STORE 3 in $0.*' ..
!         'var nrres = nr + 7.*' ..
          '\d LOAD $0.*' ..
          '\d PUSHNR 7.*' ..
          '\d OPNR +.*' ..
***************
*** 908,914 ****
          '\d OPNR /.*' ..
          'nrres = nr % 7.*' ..
          '\d OPNR %.*' ..
!         'let anyres = g:number + 7.*' ..
          '\d LOADG g:number.*' ..
          '\d PUSHNR 7.*' ..
          '\d OPANY +.*' ..
--- 911,917 ----
          '\d OPNR /.*' ..
          'nrres = nr % 7.*' ..
          '\d OPNR %.*' ..
!         'var anyres = g:number + 7.*' ..
          '\d LOADG g:number.*' ..
          '\d PUSHNR 7.*' ..
          '\d OPANY +.*' ..
***************
*** 924,933 ****
          instr)
    if has('float')
      assert_match('Computing.*' ..
!         'let fl = 3.0.*' ..
          '\d PUSHF 3.0.*' ..
          '\d STORE $3.*' ..
!         'let flres = fl + 7.0.*' ..
          '\d LOAD $3.*' ..
          '\d PUSHF 7.0.*' ..
          '\d OPFLOAT +.*' ..
--- 927,936 ----
          instr)
    if has('float')
      assert_match('Computing.*' ..
!         'var fl = 3.0.*' ..
          '\d PUSHF 3.0.*' ..
          '\d STORE $3.*' ..
!         'var flres = fl + 7.0.*' ..
          '\d LOAD $3.*' ..
          '\d PUSHF 7.0.*' ..
          '\d OPFLOAT +.*' ..
***************
*** 943,956 ****
  enddef
  
  def AddListBlob()
!   let reslist = [1, 2] + [3, 4]
!   let resblob = 0z1122 + 0z3344
  enddef
  
  def Test_disassemble_add_list_blob()
!   let instr = execute('disassemble AddListBlob')
    assert_match('AddListBlob.*' ..
!         'let reslist = \[1, 2] + \[3, 4].*' ..
          '\d PUSHNR 1.*' ..
          '\d PUSHNR 2.*' ..
          '\d NEWLIST size 2.*' ..
--- 946,959 ----
  enddef
  
  def AddListBlob()
!   var reslist = [1, 2] + [3, 4]
!   var resblob = 0z1122 + 0z3344
  enddef
  
  def Test_disassemble_add_list_blob()
!   var instr = execute('disassemble AddListBlob')
    assert_match('AddListBlob.*' ..
!         'var reslist = \[1, 2] + \[3, 4].*' ..
          '\d PUSHNR 1.*' ..
          '\d PUSHNR 2.*' ..
          '\d NEWLIST size 2.*' ..
***************
*** 959,965 ****
          '\d NEWLIST size 2.*' ..
          '\d ADDLIST.*' ..
          '\d STORE $.*.*' ..
!         'let resblob = 0z1122 + 0z3344.*' ..
          '\d PUSHBLOB 0z1122.*' ..
          '\d PUSHBLOB 0z3344.*' ..
          '\d ADDBLOB.*' ..
--- 962,968 ----
          '\d NEWLIST size 2.*' ..
          '\d ADDLIST.*' ..
          '\d STORE $.*.*' ..
!         'var resblob = 0z1122 + 0z3344.*' ..
          '\d PUSHBLOB 0z1122.*' ..
          '\d PUSHBLOB 0z3344.*' ..
          '\d ADDBLOB.*' ..
***************
*** 969,982 ****
  
  let g:aa = 'aa'
  def ConcatString(): string
!   let res = g:aa .. "bb"
    return res
  enddef
  
  def Test_disassemble_concat()
!   let instr = execute('disassemble ConcatString')
    assert_match('ConcatString.*' ..
!         'let res = g:aa .. "bb".*' ..
          '\d LOADG g:aa.*' ..
          '\d PUSHS "bb".*' ..
          '\d 2STRING_ANY stack\[-2].*' ..
--- 972,985 ----
  
  let g:aa = 'aa'
  def ConcatString(): string
!   var res = g:aa .. "bb"
    return res
  enddef
  
  def Test_disassemble_concat()
!   var instr = execute('disassemble ConcatString')
    assert_match('ConcatString.*' ..
!         'var res = g:aa .. "bb".*' ..
          '\d LOADG g:aa.*' ..
          '\d PUSHS "bb".*' ..
          '\d 2STRING_ANY stack\[-2].*' ..
***************
*** 987,1004 ****
  enddef
  
  def StringIndex(): string
!   let s = "abcd"
!   let res = s[1]
    return res
  enddef
  
  def Test_disassemble_string_index()
!   let instr = execute('disassemble StringIndex')
    assert_match('StringIndex\_s*' ..
!         'let s = "abcd"\_s*' ..
          '\d PUSHS "abcd"\_s*' ..
          '\d STORE $0\_s*' ..
!         'let res = s\[1]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d STRINDEX\_s*' ..
--- 990,1007 ----
  enddef
  
  def StringIndex(): string
!   var s = "abcd"
!   var res = s[1]
    return res
  enddef
  
  def Test_disassemble_string_index()
!   var instr = execute('disassemble StringIndex')
    assert_match('StringIndex\_s*' ..
!         'var s = "abcd"\_s*' ..
          '\d PUSHS "abcd"\_s*' ..
          '\d STORE $0\_s*' ..
!         'var res = s\[1]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d STRINDEX\_s*' ..
***************
*** 1008,1025 ****
  enddef
  
  def StringSlice(): string
!   let s = "abcd"
!   let res = s[1:8]
    return res
  enddef
  
  def Test_disassemble_string_slice()
!   let instr = execute('disassemble StringSlice')
    assert_match('StringSlice\_s*' ..
!         'let s = "abcd"\_s*' ..
          '\d PUSHS "abcd"\_s*' ..
          '\d STORE $0\_s*' ..
!         'let res = s\[1:8]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 8\_s*' ..
--- 1011,1028 ----
  enddef
  
  def StringSlice(): string
!   var s = "abcd"
!   var res = s[1:8]
    return res
  enddef
  
  def Test_disassemble_string_slice()
!   var instr = execute('disassemble StringSlice')
    assert_match('StringSlice\_s*' ..
!         'var s = "abcd"\_s*' ..
          '\d PUSHS "abcd"\_s*' ..
          '\d STORE $0\_s*' ..
!         'var res = s\[1:8]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 8\_s*' ..
***************
*** 1030,1050 ****
  enddef
  
  def ListIndex(): number
!   let l = [1, 2, 3]
!   let res = l[1]
    return res
  enddef
  
  def Test_disassemble_list_index()
!   let instr = execute('disassemble ListIndex')
    assert_match('ListIndex\_s*' ..
!         'let l = \[1, 2, 3]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d PUSHNR 3\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'let res = l\[1]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d LISTINDEX\_s*' ..
--- 1033,1053 ----
  enddef
  
  def ListIndex(): number
!   var l = [1, 2, 3]
!   var res = l[1]
    return res
  enddef
  
  def Test_disassemble_list_index()
!   var instr = execute('disassemble ListIndex')
    assert_match('ListIndex\_s*' ..
!         'var l = \[1, 2, 3]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d PUSHNR 3\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'var res = l\[1]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d LISTINDEX\_s*' ..
***************
*** 1054,1074 ****
  enddef
  
  def ListSlice(): list<number>
!   let l = [1, 2, 3]
!   let res = l[1:8]
    return res
  enddef
  
  def Test_disassemble_list_slice()
!   let instr = execute('disassemble ListSlice')
    assert_match('ListSlice\_s*' ..
!         'let l = \[1, 2, 3]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d PUSHNR 3\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'let res = l\[1:8]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 8\_s*' ..
--- 1057,1077 ----
  enddef
  
  def ListSlice(): list<number>
!   var l = [1, 2, 3]
!   var res = l[1:8]
    return res
  enddef
  
  def Test_disassemble_list_slice()
!   var instr = execute('disassemble ListSlice')
    assert_match('ListSlice\_s*' ..
!         'var l = \[1, 2, 3]\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d PUSHNR 3\_s*' ..
          '\d NEWLIST size 3\_s*' ..
          '\d STORE $0\_s*' ..
!         'var res = l\[1:8]\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 8\_s*' ..
***************
*** 1079,1099 ****
  enddef
  
  def DictMember(): number
!   let d = #{item: 1}
!   let res = d.item
    res = d["item"]
    return res
  enddef
  
  def Test_disassemble_dict_member()
!   let instr = execute('disassemble DictMember')
    assert_match('DictMember\_s*' ..
!         'let d = #{item: 1}\_s*' ..
          '\d PUSHS "item"\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d NEWDICT size 1\_s*' ..
          '\d STORE $0\_s*' ..
!         'let res = d.item\_s*' ..
          '\d\+ LOAD $0\_s*' ..
          '\d\+ MEMBER item\_s*' ..
          '\d\+ STORE $1\_s*' ..
--- 1082,1102 ----
  enddef
  
  def DictMember(): number
!   var d = #{item: 1}
!   var res = d.item
    res = d["item"]
    return res
  enddef
  
  def Test_disassemble_dict_member()
!   var instr = execute('disassemble DictMember')
    assert_match('DictMember\_s*' ..
!         'var d = #{item: 1}\_s*' ..
          '\d PUSHS "item"\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d NEWDICT size 1\_s*' ..
          '\d STORE $0\_s*' ..
!         'var res = d.item\_s*' ..
          '\d\+ LOAD $0\_s*' ..
          '\d\+ MEMBER item\_s*' ..
          '\d\+ STORE $1\_s*' ..
***************
*** 1108,1121 ****
  
  let somelist = [1, 2, 3, 4, 5]
  def AnyIndex(): number
!   let res = g:somelist[2]
    return res
  enddef
  
  def Test_disassemble_any_index()
!   let instr = execute('disassemble AnyIndex')
    assert_match('AnyIndex\_s*' ..
!         'let res = g:somelist\[2\]\_s*' ..
          '\d LOADG g:somelist\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d ANYINDEX\_s*' ..
--- 1111,1124 ----
  
  let somelist = [1, 2, 3, 4, 5]
  def AnyIndex(): number
!   var res = g:somelist[2]
    return res
  enddef
  
  def Test_disassemble_any_index()
!   var instr = execute('disassemble AnyIndex')
    assert_match('AnyIndex\_s*' ..
!         'var res = g:somelist\[2\]\_s*' ..
          '\d LOADG g:somelist\_s*' ..
          '\d PUSHNR 2\_s*' ..
          '\d ANYINDEX\_s*' ..
***************
*** 1129,1142 ****
  enddef
  
  def AnySlice(): list<number>
!   let res = g:somelist[1:3]
    return res
  enddef
  
  def Test_disassemble_any_slice()
!   let instr = execute('disassemble AnySlice')
    assert_match('AnySlice\_s*' ..
!         'let res = g:somelist\[1:3\]\_s*' ..
          '\d LOADG g:somelist\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 3\_s*' ..
--- 1132,1145 ----
  enddef
  
  def AnySlice(): list<number>
!   var res = g:somelist[1:3]
    return res
  enddef
  
  def Test_disassemble_any_slice()
!   var instr = execute('disassemble AnySlice')
    assert_match('AnySlice\_s*' ..
!         'var res = g:somelist\[1:3\]\_s*' ..
          '\d LOADG g:somelist\_s*' ..
          '\d PUSHNR 1\_s*' ..
          '\d PUSHNR 3\_s*' ..
***************
*** 1151,1172 ****
  enddef
  
  def NegateNumber(): number
!   let nr = 9
!   let plus = +nr
!   let res = -nr
    return res
  enddef
  
  def Test_disassemble_negate_number()
!   let instr = execute('disassemble NegateNumber')
    assert_match('NegateNumber\_s*' ..
!         'let nr = 9\_s*' ..
          '\d STORE 9 in $0\_s*' ..
!         'let plus = +nr\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d CHECKNR\_s*' ..
          '\d STORE $1\_s*' ..
!         'let res = -nr\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d NEGATENR\_s*' ..
          '\d STORE $2\_s*',
--- 1154,1175 ----
  enddef
  
  def NegateNumber(): number
!   var nr = 9
!   var plus = +nr
!   var res = -nr
    return res
  enddef
  
  def Test_disassemble_negate_number()
!   var instr = execute('disassemble NegateNumber')
    assert_match('NegateNumber\_s*' ..
!         'var nr = 9\_s*' ..
          '\d STORE 9 in $0\_s*' ..
!         'var plus = +nr\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d CHECKNR\_s*' ..
          '\d STORE $1\_s*' ..
!         'var res = -nr\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d NEGATENR\_s*' ..
          '\d STORE $2\_s*',
***************
*** 1175,1197 ****
  enddef
  
  def InvertBool(): bool
!   let flag = true
!   let invert = !flag
!   let res = !!flag
    return res
  enddef
  
  def Test_disassemble_invert_bool()
!   let instr = execute('disassemble InvertBool')
    assert_match('InvertBool\_s*' ..
!         'let flag = true\_s*' ..
          '\d PUSH v:true\_s*' ..
          '\d STORE $0\_s*' ..
!         'let invert = !flag\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d INVERT (!val)\_s*' ..
          '\d STORE $1\_s*' ..
!         'let res = !!flag\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d 2BOOL (!!val)\_s*' ..
          '\d STORE $2\_s*',
--- 1178,1200 ----
  enddef
  
  def InvertBool(): bool
!   var flag = true
!   var invert = !flag
!   var res = !!flag
    return res
  enddef
  
  def Test_disassemble_invert_bool()
!   var instr = execute('disassemble InvertBool')
    assert_match('InvertBool\_s*' ..
!         'var flag = true\_s*' ..
          '\d PUSH v:true\_s*' ..
          '\d STORE $0\_s*' ..
!         'var invert = !flag\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d INVERT (!val)\_s*' ..
          '\d STORE $1\_s*' ..
!         'var res = !!flag\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d 2BOOL (!!val)\_s*' ..
          '\d STORE $2\_s*',
***************
*** 1200,1213 ****
  enddef
  
  def ReturnBool(): bool
!   let var: bool = "no" && [] || 123
    return var
  enddef
  
  def Test_disassemble_return_bool()
!   let instr = execute('disassemble ReturnBool')
    assert_match('ReturnBool\_s*' ..
!         'let var: bool = "no" && \[\] || 123\_s*' ..
          '0 PUSHS "no"\_s*' ..
          '1 JUMP_AND_KEEP_IF_FALSE -> 3\_s*' ..
          '2 NEWLIST size 0\_s*' ..
--- 1203,1216 ----
  enddef
  
  def ReturnBool(): bool
!   var var: bool = "no" && [] || 123
    return var
  enddef
  
  def Test_disassemble_return_bool()
!   var instr = execute('disassemble ReturnBool')
    assert_match('ReturnBool\_s*' ..
!         'var var: bool = "no" && \[\] || 123\_s*' ..
          '0 PUSHS "no"\_s*' ..
          '1 JUMP_AND_KEEP_IF_FALSE -> 3\_s*' ..
          '2 NEWLIST size 0\_s*' ..
***************
*** 1223,1229 ****
  enddef
  
  def Test_disassemble_compare()
!   let cases = [
          ['true == isFalse', 'COMPAREBOOL =='],
          ['true != isFalse', 'COMPAREBOOL !='],
          ['v:none == isNull', 'COMPARESPECIAL =='],
--- 1226,1232 ----
  enddef
  
  def Test_disassemble_compare()
!   var cases = [
          ['true == isFalse', 'COMPAREBOOL =='],
          ['true != isFalse', 'COMPAREBOOL !='],
          ['v:none == isNull', 'COMPARESPECIAL =='],
***************
*** 1279,1285 ****
          ['77 is g:xx', 'COMPAREANY is'],
          ['77 isnot g:xx', 'COMPAREANY isnot'],
          ]
!   let floatDecl = ''
    if has('float')
      cases->extend([
          ['1.1 == aFloat', 'COMPAREFLOAT =='],
--- 1282,1288 ----
          ['77 is g:xx', 'COMPAREANY is'],
          ['77 isnot g:xx', 'COMPAREANY isnot'],
          ]
!   var floatDecl = ''
    if has('float')
      cases->extend([
          ['1.1 == aFloat', 'COMPAREFLOAT =='],
***************
*** 1291,1317 ****
          ['1.1 =~ aFloat', 'COMPAREFLOAT =\~'],
          ['1.1 !~ aFloat', 'COMPAREFLOAT !\~'],
          ])
!     floatDecl = 'let aFloat = 2.2'
    endif
  
!   let nr = 1
    for case in cases
      # declare local variables to get a non-constant with the right type
      writefile(['def TestCase' .. nr .. '()',
!              '  let isFalse = false',
!              '  let isNull = v:null',
!              '  let aNumber = 222',
!              '  let aString = "yy"',
!              '  let aBlob = 0z22',
!              '  let aList = [3, 4]',
!              '  let aDict = #{x: 2}',
               floatDecl,
               '  if ' .. case[0],
               '    echo 42'
               '  endif',
               'enddef'], 'Xdisassemble')
      source Xdisassemble
!     let instr = execute('disassemble TestCase' .. nr)
      assert_match('TestCase' .. nr .. '.*' ..
          'if ' .. substitute(case[0], '[[~]', '\\\0', 'g') .. '.*' ..
          '\d \(PUSH\|FUNCREF\).*' ..
--- 1294,1320 ----
          ['1.1 =~ aFloat', 'COMPAREFLOAT =\~'],
          ['1.1 !~ aFloat', 'COMPAREFLOAT !\~'],
          ])
!     floatDecl = 'var aFloat = 2.2'
    endif
  
!   var nr = 1
    for case in cases
      # declare local variables to get a non-constant with the right type
      writefile(['def TestCase' .. nr .. '()',
!              '  var isFalse = false',
!              '  var isNull = v:null',
!              '  var aNumber = 222',
!              '  var aString = "yy"',
!              '  var aBlob = 0z22',
!              '  var aList = [3, 4]',
!              '  var aDict = #{x: 2}',
               floatDecl,
               '  if ' .. case[0],
               '    echo 42'
               '  endif',
               'enddef'], 'Xdisassemble')
      source Xdisassemble
!     var instr = execute('disassemble TestCase' .. nr)
      assert_match('TestCase' .. nr .. '.*' ..
          'if ' .. substitute(case[0], '[[~]', '\\\0', 'g') .. '.*' ..
          '\d \(PUSH\|FUNCREF\).*' ..
***************
*** 1327,1340 ****
  enddef
  
  def Test_disassemble_compare_const()
!   let cases = [
          ['"xx" == "yy"', false],
          ['"aa" == "aa"', true],
          ['has("eval") ? true : false', true],
          ['has("asdf") ? true : false', false],
          ]
  
!   let nr = 1
    for case in cases
      writefile(['def TestCase' .. nr .. '()',
               '  if ' .. case[0],
--- 1330,1343 ----
  enddef
  
  def Test_disassemble_compare_const()
!   var cases = [
          ['"xx" == "yy"', false],
          ['"aa" == "aa"', true],
          ['has("eval") ? true : false', true],
          ['has("asdf") ? true : false', false],
          ]
  
!   var nr = 1
    for case in cases
      writefile(['def TestCase' .. nr .. '()',
               '  if ' .. case[0],
***************
*** 1342,1348 ****
               '  endif',
               'enddef'], 'Xdisassemble')
      source Xdisassemble
!     let instr = execute('disassemble TestCase' .. nr)
      if case[1]
        # condition true, "echo 42" executed
        assert_match('TestCase' .. nr .. '.*' ..
--- 1345,1351 ----
               '  endif',
               'enddef'], 'Xdisassemble')
      source Xdisassemble
!     var instr = execute('disassemble TestCase' .. nr)
      if case[1]
        # condition true, "echo 42" executed
        assert_match('TestCase' .. nr .. '.*' ..
***************
*** 1371,1395 ****
  
  def s:Execute()
    execute 'help vim9.txt'
!   let cmd = 'help vim9.txt'
    execute cmd
!   let tag = 'vim9.txt'
    execute 'help ' .. tag
  enddef
  
  def Test_disassemble_execute()
!   let res = execute('disass s:Execute')
    assert_match('\<SNR>\d*_Execute\_s*' ..
          "execute 'help vim9.txt'\\_s*" ..
          '\d PUSHS "help vim9.txt"\_s*' ..
          '\d EXECUTE 1\_s*' ..
!         "let cmd = 'help vim9.txt'\\_s*" ..
          '\d PUSHS "help vim9.txt"\_s*' ..
          '\d STORE $0\_s*' ..
          'execute cmd\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d EXECUTE 1\_s*' ..
!         "let tag = 'vim9.txt'\\_s*" ..
          '\d PUSHS "vim9.txt"\_s*' ..
          '\d STORE $1\_s*' ..
          "execute 'help ' .. tag\\_s*" ..
--- 1374,1398 ----
  
  def s:Execute()
    execute 'help vim9.txt'
!   var cmd = 'help vim9.txt'
    execute cmd
!   var tag = 'vim9.txt'
    execute 'help ' .. tag
  enddef
  
  def Test_disassemble_execute()
!   var res = execute('disass s:Execute')
    assert_match('\<SNR>\d*_Execute\_s*' ..
          "execute 'help vim9.txt'\\_s*" ..
          '\d PUSHS "help vim9.txt"\_s*' ..
          '\d EXECUTE 1\_s*' ..
!         "var cmd = 'help vim9.txt'\\_s*" ..
          '\d PUSHS "help vim9.txt"\_s*' ..
          '\d STORE $0\_s*' ..
          'execute cmd\_s*' ..
          '\d LOAD $0\_s*' ..
          '\d EXECUTE 1\_s*' ..
!         "var tag = 'vim9.txt'\\_s*" ..
          '\d PUSHS "vim9.txt"\_s*' ..
          '\d STORE $1\_s*' ..
          "execute 'help ' .. tag\\_s*" ..
***************
*** 1408,1414 ****
  enddef
  
  def Test_disassemble_echomsg()
!   let res = execute('disass s:Echomsg')
    assert_match('\<SNR>\d*_Echomsg\_s*' ..
          "echomsg 'some' 'message'\\_s*" ..
          '\d PUSHS "some"\_s*' ..
--- 1411,1417 ----
  enddef
  
  def Test_disassemble_echomsg()
!   var res = execute('disass s:Echomsg')
    assert_match('\<SNR>\d*_Echomsg\_s*' ..
          "echomsg 'some' 'message'\\_s*" ..
          '\d PUSHS "some"\_s*' ..
***************
*** 1435,1453 ****
  enddef
  
  def Test_display_func()
!   let res1 = execute('function SomeStringArg')
    assert_match('.* def SomeStringArg(arg: string)\_s*' ..
          '\d *echo arg.*' ..
          ' *enddef',
          res1)
  
!   let res2 = execute('function SomeAnyArg')
    assert_match('.* def SomeAnyArg(arg: any)\_s*' ..
          '\d *echo arg\_s*' ..
          ' *enddef',
          res2)
  
!   let res3 = execute('function SomeStringArgAndReturn')
    assert_match('.* def SomeStringArgAndReturn(arg: string): string\_s*' ..
          '\d *return arg\_s*' ..
          ' *enddef',
--- 1438,1456 ----
  enddef
  
  def Test_display_func()
!   var res1 = execute('function SomeStringArg')
    assert_match('.* def SomeStringArg(arg: string)\_s*' ..
          '\d *echo arg.*' ..
          ' *enddef',
          res1)
  
!   var res2 = execute('function SomeAnyArg')
    assert_match('.* def SomeAnyArg(arg: any)\_s*' ..
          '\d *echo arg\_s*' ..
          ' *enddef',
          res2)
  
!   var res3 = execute('function SomeStringArgAndReturn')
    assert_match('.* def SomeStringArgAndReturn(arg: string): string\_s*' ..
          '\d *return arg\_s*' ..
          ' *enddef',
***************
*** 1455,1461 ****
  enddef
  
  def Test_vim9script_forward_func()
!   let lines =<< trim END
      vim9script
      def FuncOne(): string
        return FuncTwo()
--- 1458,1464 ----
  enddef
  
  def Test_vim9script_forward_func()
!   var lines =<< trim END
      vim9script
      def FuncOne(): string
        return FuncTwo()
***************
*** 1492,1498 ****
  enddef
  
  def Test_simplify_const_expr()
!   let res = execute('disass s:ConcatStrings')
    assert_match('<SNR>\d*_ConcatStrings\_s*' ..
          "return 'one' .. 'two' .. 'three'\\_s*" ..
          '\d PUSHS "onetwothree"\_s*' ..
--- 1495,1501 ----
  enddef
  
  def Test_simplify_const_expr()
!   var res = execute('disass s:ConcatStrings')
    assert_match('<SNR>\d*_ConcatStrings\_s*' ..
          "return 'one' .. 'two' .. 'three'\\_s*" ..
          '\d PUSHS "onetwothree"\_s*' ..
***************
*** 1519,1525 ****
  enddef
  
  def Test_shuffle()
!   let res = execute('disass s:CallAppend')
    assert_match('<SNR>\d*_CallAppend\_s*' ..
          'eval "some text"->append(2)\_s*' ..
          '\d PUSHS "some text"\_s*' ..
--- 1522,1528 ----
  enddef
  
  def Test_shuffle()
!   var res = execute('disass s:CallAppend')
    assert_match('<SNR>\d*_CallAppend\_s*' ..
          'eval "some text"->append(2)\_s*' ..
          '\d PUSHS "some text"\_s*' ..
*** ../vim-8.2.1760/src/version.c       2020-09-27 18:24:00.087276290 +0200
--- src/version.c       2020-09-27 19:05:10.616149697 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1761,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
1. You actually wore a blue ribbon to protest the Communications Decency Act.

 /// 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/202009271706.08RH60Xn203070%40masaka.moolenaar.net.

Raspunde prin e-mail lui