1
0
forked from aniani/vim

patch 9.0.1045: in a class object members cannot be initialized

Problem:    In a class object members cannot be initialized.
Solution:   Support initializing object members. Make "dissassemble" work on
            an object method.
This commit is contained in:
Bram Moolenaar
2022-12-10 18:42:12 +00:00
parent 6c87bbb4e4
commit 7ce7daf6cd
13 changed files with 280 additions and 74 deletions

View File

@@ -129,7 +129,7 @@ def Test_class_basic()
class TextPosition
this.lnum: number
this.col: number
this.col: number
def ToString(): string
return $'({this.lnum}, {this.col})'
@@ -147,5 +147,40 @@ def Test_class_basic()
v9.CheckScriptSuccess(lines)
enddef
def Test_class_member_initializer()
var lines =<< trim END
vim9script
class TextPosition
this.lnum: number = 1
this.col: number = 1
def new(lnum: number)
this.lnum = lnum
enddef
endclass
var pos = TextPosition.new(3)
assert_equal(3, pos.lnum)
assert_equal(1, pos.col)
var instr = execute('disassemble TextPosition.new')
assert_match('new\_s*' ..
'0 NEW TextPosition size 72\_s*' ..
'\d PUSHNR 1\_s*' ..
'\d STORE_THIS 0\_s*' ..
'\d PUSHNR 1\_s*' ..
'\d STORE_THIS 1\_s*' ..
'this.lnum = lnum\_s*' ..
'\d LOAD arg\[-1]\_s*' ..
'\d PUSHNR 0\_s*' ..
'\d LOAD $0\_s*' ..
'\d\+ STOREINDEX object\_s*' ..
'\d\+ RETURN object.*',
instr)
END
v9.CheckScriptSuccess(lines)
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker