0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.0.2006: Vim9: need more tests

Problem:  Vim9: need more tests
Solution: add additional disassembly tests

closes: #13305

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
Yegappan Lakshmanan 2023-10-09 17:57:27 +02:00 committed by Christian Brabandt
parent b56cef0be0
commit f4ee1cb74b
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
2 changed files with 178 additions and 3 deletions

View File

@ -488,6 +488,8 @@ if has('job')
var Pp = null_partial
var jj = null_job
var cc = null_channel
var oo = null_object
var nc = null_class
enddef
def Test_disassemble_assign_null()
@ -525,6 +527,14 @@ if has('job')
'\d\+ PUSHCHANNEL 0\_s*' ..
'\d\+ STORE $\d\_s*' ..
'var oo = null_object\_s*' ..
'\d\+ PUSHOBJ null\_s*' ..
'\d\+ STORE $\d\_s*' ..
'var nc = null_class\_s*' ..
'\d\+ PUSHCLASS null\_s*' ..
'\d\+ STORE $\d\_s*' ..
'\d\+ RETURN void',
res)
enddef
@ -2968,7 +2978,7 @@ def BitShift()
var a = 1 << 2
var b = 8 >> 1
var c = a << b
var d = b << a
var d = b >> a
enddef
def Test_disassemble_bitshift()
@ -2983,10 +2993,10 @@ def Test_disassemble_bitshift()
'3 LOAD $1\_s*' ..
'4 OPNR <<\_s*' ..
'5 STORE $2\_s*' ..
'var d = b << a\_s*' ..
'var d = b >> a\_s*' ..
'6 LOAD $1\_s*' ..
'7 LOAD $0\_s*' ..
'8 OPNR <<\_s*' ..
'8 OPNR >>\_s*' ..
'9 STORE $3\_s*' ..
'10 RETURN void', instr)
enddef
@ -3108,4 +3118,167 @@ def Test_disassemble_interface_static_member()
unlet g:instr2
enddef
" Disassemble instructions for loading and storing class variables
def Test_disassemble_class_variable()
var lines =<< trim END
vim9script
class A
public static val = 10
def Foo(): number
val = 20
return val
enddef
endclass
g:instr = execute('disassemble A.Foo')
END
v9.CheckScriptSuccess(lines)
assert_match('Foo\_s*' ..
'val = 20\_s*' ..
'0 PUSHNR 20\_s*' ..
'1 STORE CLASSMEMBER A.val\_s*' ..
'return val\_s*' ..
'2 LOAD CLASSMEMBER A.val\_s*' ..
'3 RETURN', g:instr)
unlet g:instr
enddef
" Disassemble instructions for METHODCALL
def Test_disassemble_methodcall()
var lines =<< trim END
vim9script
interface A
def Foo()
endinterface
def Bar(a: A)
a.Foo()
enddef
g:instr = execute('disassemble Bar')
END
v9.CheckScriptSuccess(lines)
assert_match('<SNR>\d*_Bar\_s*' ..
'a.Foo()\_s*' ..
'0 LOAD arg\[-1\]\_s*' ..
'1 METHODCALL A.Foo(argc 0)\_s*' ..
'2 DROP\_s*' ..
'3 RETURN void', g:instr)
unlet g:instr
enddef
" Disassemble instructions for ISN_JUMP_IF_ARG_NOT_SET
def Test_disassemble_ifargnotset()
var lines =<< trim END
vim9script
class A
this.val: number = 10
endclass
g:instr = execute('disassemble A.new')
END
v9.CheckScriptSuccess(lines)
assert_match('new\_s*' ..
'0 NEW A size \d\+\_s*' ..
'1 PUSHNR 10\_s*' ..
'2 STORE_THIS 0\_s*' ..
'ifargisset 0 this.val = val\_s*' ..
'3 JUMP_IF_ARG_NOT_SET arg\[-1\] -> 8\_s*' ..
'4 LOAD arg\[-1\]\_s*' ..
'5 PUSHNR 0\_s*' ..
'6 LOAD $0\_s*' ..
'7 STOREINDEX object\_s*' ..
'8 RETURN object', g:instr)
unlet g:instr
enddef
" Disassemble instructions for ISN_COMPARECLASS and ISN_COMPAREOBJECT
def Test_disassemble_compare_class_object()
var lines =<< trim END
vim9script
class A
endclass
class B
endclass
def Foo(a: A, b: B)
if A == B
endif
if a == b
endif
enddef
g:instr = execute('disassemble Foo')
END
v9.CheckScriptSuccess(lines)
assert_match('<SNR>\d*_Foo\_s*' ..
'if A == B\_s*' ..
'0 LOADSCRIPT A-0 from .*\_s*' ..
'1 LOADSCRIPT B-1 from .*\_s*' ..
'2 COMPARECLASS ==\_s*' ..
'3 JUMP_IF_FALSE -> 4\_s*' ..
'endif\_s*' ..
'if a == b\_s*' ..
'4 LOAD arg\[-2\]\_s*' ..
'5 LOAD arg\[-1\]\_s*' ..
'6 COMPAREOBJECT ==\_s*' ..
'7 JUMP_IF_FALSE -> 8\_s*' ..
'endif\_s*' ..
'8 RETURN void', g:instr)
unlet g:instr
enddef
" Disassemble instructions for ISN_CHECKTYPE with a float|number
def Test_checktype_float()
var lines =<< trim END
vim9script
def Foo()
var f: float = 0.0
var a: any
f += a
enddef
g:instr = execute('disassemble Foo')
END
v9.CheckScriptSuccess(lines)
assert_match('<SNR>\d*_Foo\_s*' ..
'var f: float = 0.0\_s*' ..
'0 PUSHF 0.0\_s*' ..
'1 STORE $0\_s*' ..
'var a: any\_s*' ..
'f += a\_s*' ..
'2 LOAD $0\_s*' ..
'3 LOAD $1\_s*' ..
'4 CHECKTYPE float|number stack\[-1\]\_s*' ..
'5 OPANY +\_s*' ..
'6 STORE $0\_s*' ..
'7 RETURN void', g:instr)
unlet g:instr
enddef
" Disassemble instructions for ISN_FUNCREF with a class
def Test_funcref_with_class()
var lines =<< trim END
vim9script
class A
def Foo()
enddef
endclass
class B extends A
def Foo()
enddef
endclass
def Bar(a: A)
defer a.Foo()
enddef
g:instr = execute('disassemble Bar')
END
v9.CheckScriptSuccess(lines)
assert_match('<SNR>\d*_Bar\_s*' ..
'defer a.Foo()\_s*' ..
'0 LOAD arg\[-1\]\_s*' ..
'1 FUNCREF A.Foo\_s*' ..
'2 DEFEROBJ 0 args\_s*' ..
'3 RETURN void', g:instr)
unlet g:instr
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2006,
/**/
2005,
/**/