diff options
-rw-r--r-- | src/testdir/test_vim9_script.vim | 159 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 125 insertions, 36 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index b862d0c19..1cff3b61b 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -474,39 +474,7 @@ def s:ScriptFuncLoad(arg: string) echo @z enddef -def s:ScriptFuncPush() - let localbool = true - let localspec = v:none - let localblob = 0z1234 - if has('float') - let localfloat = 1.234 - endif -enddef - -def s:ScriptFuncStore() - let localnr = 1 - localnr = 2 - let localstr = 'abc' - localstr = 'xyz' - v:char = 'abc' - s:scriptvar = 'sv' - g:globalvar = 'gv' - &tabstop = 8 - $ENVVAR = 'ev' - @z = 'rv' -enddef - -def s:ScriptFuncTry() - try - echo 'yes' - catch /fail/ - echo 'no' - finally - echo 'end' - endtry -enddef - -def Test_disassemble() +def Test_disassembleLoad() assert_fails('disass NoFunc', 'E1061:') assert_fails('disass NotCompiled', 'E1062:') @@ -522,8 +490,19 @@ def Test_disassemble() \ .. ' LOADENV $ENVVAR.*' \ .. ' LOADREG @z.*' \, res) +enddef + +def s:ScriptFuncPush() + let localbool = true + let localspec = v:none + let localblob = 0z1234 + if has('float') + let localfloat = 1.234 + endif +enddef - res = execute('disass s:ScriptFuncPush') +def Test_disassemblePush() + let res = execute('disass s:ScriptFuncPush') assert_match('<SNR>\d*_ScriptFuncPush.*' \ .. 'localbool = true.*' \ .. ' PUSH v:true.*' @@ -538,8 +517,23 @@ def Test_disassemble() \ .. ' PUSHF 1.234.*' \, res) endif +enddef - res = execute('disass s:ScriptFuncStore') +def s:ScriptFuncStore() + let localnr = 1 + localnr = 2 + let localstr = 'abc' + localstr = 'xyz' + v:char = 'abc' + s:scriptvar = 'sv' + g:globalvar = 'gv' + &tabstop = 8 + $ENVVAR = 'ev' + @z = 'rv' +enddef + +def Test_disassembleStore() + let res = execute('disass s:ScriptFuncStore') assert_match('<SNR>\d*_ScriptFuncStore.*' \ .. 'localnr = 2.*' \ .. ' STORE 2 in $0.*' @@ -558,8 +552,20 @@ def Test_disassemble() \ .. '@z = ''rv''.*' \ .. ' STOREREG @z.*' \, res) +enddef + +def s:ScriptFuncTry() + try + echo 'yes' + catch /fail/ + echo 'no' + finally + echo 'end' + endtry +enddef - res = execute('disass s:ScriptFuncTry') +def Test_disassembleTry() + let res = execute('disass s:ScriptFuncTry') assert_match('<SNR>\d*_ScriptFuncTry.*' \ .. 'try.*' \ .. 'TRY catch -> \d\+, finally -> \d\+.*' @@ -577,5 +583,86 @@ def Test_disassemble() \, res) enddef +def s:ScriptFuncNew() + let ll = [1, "two", 333] + let dd = #{one: 1, two: "val"} +enddef + +def Test_disassembleNew() + let res = execute('disass s:ScriptFuncNew') + assert_match('<SNR>\d*_ScriptFuncNew.*' + \ .. 'let ll = \[1, "two", 333].*' + \ .. 'PUSHNR 1.*' + \ .. 'PUSHS "two".*' + \ .. 'PUSHNR 333.*' + \ .. 'NEWLIST size 3.*' + \ .. 'let dd = #{one: 1, two: "val"}.*' + \ .. 'PUSHS "one".*' + \ .. 'PUSHNR 1.*' + \ .. 'PUSHS "two".*' + \ .. 'PUSHS "val".*' + \ .. 'NEWDICT size 2.*' + \, res) +enddef + +def FuncWithArg(arg) + echo arg +enddef + +func UserFunc() + echo 'nothing' +endfunc + +func UserFuncWithArg(arg) + echo a:arg +endfunc + +def s:ScriptFuncCall(): string + changenr() + char2nr("abc") + Test_disassembleNew() + FuncWithArg(343) + UserFunc() + UserFuncWithArg("foo") + let FuncRef = function("UserFunc") + FuncRef() + let FuncRefWithArg = function("UserFuncWithArg") + FuncRefWithArg("bar") + return "yes" +enddef + +def Test_disassembleCall() + let res = execute('disass s:ScriptFuncCall') + assert_match('<SNR>\d*_ScriptFuncCall.*' + \ .. 'changenr().*' + \ .. ' BCALL changenr(argc 0).*' + \ .. 'char2nr("abc").*' + \ .. ' PUSHS "abc".*' + \ .. ' BCALL char2nr(argc 1).*' + \ .. 'Test_disassembleNew().*' + \ .. ' DCALL Test_disassembleNew(argc 0).*' + \ .. 'FuncWithArg(343).*' + \ .. ' PUSHNR 343.*' + \ .. ' DCALL FuncWithArg(argc 1).*' + \ .. 'UserFunc().*' + \ .. ' UCALL UserFunc(argc 0).*' + \ .. 'UserFuncWithArg("foo").*' + \ .. ' PUSHS "foo".*' + \ .. ' UCALL UserFuncWithArg(argc 1).*' + \ .. 'let FuncRef = function("UserFunc").*' + \ .. 'FuncRef().*' + \ .. ' LOAD $\d.*' + \ .. ' PCALL (argc 0).*' + \ .. 'let FuncRefWithArg = function("UserFuncWithArg").*' + \ .. 'FuncRefWithArg("bar").*' + \ .. ' PUSHS "bar".*' + \ .. ' LOAD $\d.*' + \ .. ' PCALL (argc 1).*' + \ .. 'return "yes".*' + \ .. ' PUSHS "yes".*' + \ .. ' RETURN.*' + \, res) +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index 5a11a1f13..b75f5d690 100644 --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 218, +/**/ 217, /**/ 216, |