Mercurial > vim
comparison src/testdir/test_vim9_disassemble.vim @ 23458:d2b1269c2c68 v8.2.2272
patch 8.2.2272: Vim9: extend() can violate the type of a variable
Commit: https://github.com/vim/vim/commit/aa210a3aeccc33c6051978017959126b037f94af
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 2 15:41:03 2021 +0100
patch 8.2.2272: Vim9: extend() can violate the type of a variable
Problem: Vim9: extend() can violate the type of a variable.
Solution: Add the type to the dictionary or list and check items against it.
(closes #7593)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 02 Jan 2021 15:45:04 +0100 |
parents | 4c6ebf531284 |
children | f90e429453fd |
comparison
equal
deleted
inserted
replaced
23457:86b9697a8c63 | 23458:d2b1269c2c68 |
---|---|
255 def Test_disassemble_store_member() | 255 def Test_disassemble_store_member() |
256 var res = execute('disass s:ScriptFuncStoreMember') | 256 var res = execute('disass s:ScriptFuncStoreMember') |
257 assert_match('<SNR>\d*_ScriptFuncStoreMember\_s*' .. | 257 assert_match('<SNR>\d*_ScriptFuncStoreMember\_s*' .. |
258 'var locallist: list<number> = []\_s*' .. | 258 'var locallist: list<number> = []\_s*' .. |
259 '\d NEWLIST size 0\_s*' .. | 259 '\d NEWLIST size 0\_s*' .. |
260 '\d SETTYPE list<number>\_s*' .. | |
260 '\d STORE $0\_s*' .. | 261 '\d STORE $0\_s*' .. |
261 'locallist\[0\] = 123\_s*' .. | 262 'locallist\[0\] = 123\_s*' .. |
262 '\d PUSHNR 123\_s*' .. | 263 '\d PUSHNR 123\_s*' .. |
263 '\d PUSHNR 0\_s*' .. | 264 '\d PUSHNR 0\_s*' .. |
264 '\d LOAD $0\_s*' .. | 265 '\d LOAD $0\_s*' .. |
265 '\d STORELIST\_s*' .. | 266 '\d STORELIST\_s*' .. |
266 'var localdict: dict<number> = {}\_s*' .. | 267 'var localdict: dict<number> = {}\_s*' .. |
267 '\d NEWDICT size 0\_s*' .. | 268 '\d NEWDICT size 0\_s*' .. |
269 '\d SETTYPE dict<number>\_s*' .. | |
268 '\d STORE $1\_s*' .. | 270 '\d STORE $1\_s*' .. |
269 'localdict\["a"\] = 456\_s*' .. | 271 'localdict\["a"\] = 456\_s*' .. |
270 '\d\+ PUSHNR 456\_s*' .. | 272 '\d\+ PUSHNR 456\_s*' .. |
271 '\d\+ PUSHS "a"\_s*' .. | 273 '\d\+ PUSHS "a"\_s*' .. |
272 '\d\+ LOAD $1\_s*' .. | 274 '\d\+ LOAD $1\_s*' .. |
345 def Test_disassemble_list_add() | 347 def Test_disassemble_list_add() |
346 var res = execute('disass s:ListAdd') | 348 var res = execute('disass s:ListAdd') |
347 assert_match('<SNR>\d*_ListAdd\_s*' .. | 349 assert_match('<SNR>\d*_ListAdd\_s*' .. |
348 'var l: list<number> = []\_s*' .. | 350 'var l: list<number> = []\_s*' .. |
349 '\d NEWLIST size 0\_s*' .. | 351 '\d NEWLIST size 0\_s*' .. |
352 '\d SETTYPE list<number>\_s*' .. | |
350 '\d STORE $0\_s*' .. | 353 '\d STORE $0\_s*' .. |
351 'add(l, 123)\_s*' .. | 354 'add(l, 123)\_s*' .. |
352 '\d LOAD $0\_s*' .. | 355 '\d LOAD $0\_s*' .. |
353 '\d PUSHNR 123\_s*' .. | 356 '\d PUSHNR 123\_s*' .. |
354 '\d LISTAPPEND\_s*' .. | 357 '\d LISTAPPEND\_s*' .. |
1032 assert_equal([0, 1, 2], ForLoop()) | 1035 assert_equal([0, 1, 2], ForLoop()) |
1033 var instr = execute('disassemble ForLoop') | 1036 var instr = execute('disassemble ForLoop') |
1034 assert_match('ForLoop\_s*' .. | 1037 assert_match('ForLoop\_s*' .. |
1035 'var res: list<number>\_s*' .. | 1038 'var res: list<number>\_s*' .. |
1036 '\d NEWLIST size 0\_s*' .. | 1039 '\d NEWLIST size 0\_s*' .. |
1040 '\d SETTYPE list<number>\_s*' .. | |
1037 '\d STORE $0\_s*' .. | 1041 '\d STORE $0\_s*' .. |
1038 'for i in range(3)\_s*' .. | 1042 'for i in range(3)\_s*' .. |
1039 '\d STORE -1 in $1\_s*' .. | 1043 '\d STORE -1 in $1\_s*' .. |
1040 '\d PUSHNR 3\_s*' .. | 1044 '\d PUSHNR 3\_s*' .. |
1041 '\d BCALL range(argc 1)\_s*' .. | 1045 '\d BCALL range(argc 1)\_s*' .. |
1135 'var l: list<number> = \[23, <number>g:number\].*' .. | 1139 'var l: list<number> = \[23, <number>g:number\].*' .. |
1136 '\d PUSHNR 23\_s*' .. | 1140 '\d PUSHNR 23\_s*' .. |
1137 '\d LOADG g:number\_s*' .. | 1141 '\d LOADG g:number\_s*' .. |
1138 '\d CHECKTYPE number stack\[-1\]\_s*' .. | 1142 '\d CHECKTYPE number stack\[-1\]\_s*' .. |
1139 '\d NEWLIST size 2\_s*' .. | 1143 '\d NEWLIST size 2\_s*' .. |
1144 '\d SETTYPE list<number>\_s*' .. | |
1140 '\d STORE $0\_s*' .. | 1145 '\d STORE $0\_s*' .. |
1141 '\d PUSHNR 0\_s*' .. | 1146 '\d PUSHNR 0\_s*' .. |
1142 '\d RETURN\_s*', | 1147 '\d RETURN\_s*', |
1143 instr) | 1148 instr) |
1144 enddef | 1149 enddef |