summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-05 22:55:48 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-05 22:55:48 +0100
commit0de50864a78d8811aa9adef3318027c9bab40a90 (patch)
treeee968d35a5bfe501b7a43b0ea6adf44c78e7007a
parentadbc11c2ee828fcc9d79c7d3c0c968c68657e3d1 (diff)
downloadvim-git-0de50864a78d8811aa9adef3318027c9bab40a90.tar.gz
patch 8.2.0218: several Vim9 instructions are not testedv8.2.0218
Problem: Several Vim9 instructions are not tested. Solution: Add more tests.
-rw-r--r--src/testdir/test_vim9_script.vim159
-rw-r--r--src/version.c2
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,