To: vim_dev@googlegroups.com Subject: Patch 8.2.1761 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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> = {'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> = {'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> = {'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> = {'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) 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) for nr in nrs *************** *** 253,259 **** enddef def Test_map_command() ! let lines =<< trim END nnoremap :echo 'hit F3 #' assert_equal(":echo 'hit F3 #'", maparg("", "n")) END --- 256,262 ---- enddef def Test_map_command() ! var lines =<< trim END nnoremap :echo 'hit F3 #' assert_equal(":echo 'hit F3 #'", maparg("", "n")) END *************** *** 264,270 **** def Test_normal_command() new setline(1, 'doesnotexist') ! let caught = 0 try exe "norm! \" catch /E433/ --- 267,273 ---- def Test_normal_command() new setline(1, 'doesnotexist') ! var caught = 0 try exe "norm! \" 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 foo', 'E129:') ! let res = execute('disass s:ScriptFuncLoad') assert_match('\d*_ScriptFuncLoad.*' .. 'buffers.*' .. ' EXEC \+buffers.*' .. --- 44,50 ---- assert_fails('disass 234', 'E129:') assert_fails('disass foo', 'E129:') ! var res = execute('disass s:ScriptFuncLoad') assert_match('\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('\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('\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('\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('\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('\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('\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('\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('\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('\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('\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 = [] locallist[0] = 123 ! let localdict: dict = {} localdict["a"] = 456 enddef def Test_disassemble_store_member() ! let res = execute('disass s:ScriptFuncStoreMember') assert_match('\d*_ScriptFuncStoreMember\_s*' .. ! 'let locallist: list = []\_s*' .. '\d NEWLIST size 0\_s*' .. '\d STORE $0\_s*' .. 'locallist\[0\] = 123\_s*' .. --- 210,225 ---- enddef def s:ScriptFuncStoreMember() ! var locallist: list = [] locallist[0] = 123 ! var localdict: dict = {} localdict["a"] = 456 enddef def Test_disassemble_store_member() ! var res = execute('disass s:ScriptFuncStoreMember') assert_match('\d*_ScriptFuncStoreMember\_s*' .. ! 'var locallist: list = []\_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 = {}\_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 = {}\_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 [x, y; l] = g:stringlist enddef def Test_disassemble_list_assign() ! let res = execute('disass s:ListAssign') assert_match('\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\_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 [x, y; l] = g:stringlist enddef def Test_disassemble_list_assign() ! var res = execute('disass s:ListAssign') assert_match('\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\_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('\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('\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('\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('\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('\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('\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('\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('\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('\d\_s*' .. 'local ..= arg\_s*' .. '\d LOADOUTER $0\_s*' .. --- 453,459 ---- def Test_disassemble_closure() CreateRefs() ! var res = execute('disass g:Append') assert_match('\d\_s*' .. 'local ..= arg\_s*' .. '\d LOADOUTER $0\_s*' .. *************** *** 484,490 **** enddef def Test_disassemble_pcall() ! let res = execute('disass s:ScriptPCall') assert_match('\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('\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 \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 \d\+\_s*' .. '\d STORE $0\_s*' .. 'return F("x")\_s*' .. *************** *** 717,723 **** '\d RETURN', instr) ! let name = substitute(instr, '.*\(\d\+\).*', '\1', '') instr = execute('disassemble ' .. name) assert_match('\d\+\_s*' .. 'return "X" .. a .. "X"\_s*' .. --- 720,726 ---- '\d RETURN', instr) ! var name = substitute(instr, '.*\(\d\+\).*', '\1', '') instr = execute('disassemble ' .. name) assert_match('\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 ! let res: list for i in range(3) res->add(i) endfor --- 782,788 ---- enddef def ForLoop(): list ! var res: list 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\_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\_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 = [23, g:number] enddef def Test_disassemble_typecast() ! let instr = execute('disassemble TypeCast') assert_match('TypeCast.*' .. ! 'let l: list = \[23, 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 = [23, g:number] enddef def Test_disassemble_typecast() ! var instr = execute('disassemble TypeCast') assert_match('TypeCast.*' .. ! 'var l: list = \[23, 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 ! 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 ! 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 ! 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 ! 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('\\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('\\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('\\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('\\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('\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('\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('\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('\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 -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///