Patch 8.2.1761

6 views
Skip to first unread message

Bram Moolenaar

unread,
Sep 27, 2020, 1:06:09 PM9/27/20
to vim...@googlegroups.com

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 -- Br...@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 ///
Reply all
Reply to author
Forward
0 new messages