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:
parent
b56cef0be0
commit
f4ee1cb74b
@ -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
|
||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2006,
|
||||
/**/
|
||||
2005,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user