diff options
Diffstat (limited to 'src/testdir')
-rw-r--r-- | src/testdir/test_vim9_disassemble.vim | 10 | ||||
-rw-r--r-- | src/testdir/test_vim9_script.vim | 70 |
2 files changed, 71 insertions, 9 deletions
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index d4a520f14..a59b55d1a 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -1023,15 +1023,15 @@ def Test_disassemble_closure_in_loop() 'endif\_s*' .. 'g:Ref = () => ii\_s*' .. - '\d\+ FUNCREF <lambda>4 var $3 - $3\_s*' .. + '\d\+ FUNCREF <lambda>4 vars $3-$3\_s*' .. '\d\+ STOREG g:Ref\_s*' .. 'continue\_s*' .. - '\d\+ ENDLOOP $1 save $3 - $3\_s*' .. + '\d\+ ENDLOOP ref $1 save $3-$3 depth 0\_s*' .. '\d\+ JUMP -> \d\+\_s*' .. 'break\_s*' .. - '\d\+ ENDLOOP $1 save $3 - $3\_s*' .. + '\d\+ ENDLOOP ref $1 save $3-$3 depth 0\_s*' .. '\d\+ JUMP -> \d\+\_s*' .. 'if g:val\_s*' .. @@ -1041,12 +1041,12 @@ def Test_disassemble_closure_in_loop() ' return\_s*' .. '\d\+ PUSHNR 0\_s*' .. - '\d\+ ENDLOOP $1 save $3 - $3\_s*' .. + '\d\+ ENDLOOP ref $1 save $3-$3 depth 0\_s*' .. '\d\+ RETURN\_s*' .. 'endif\_s*' .. 'endfor\_s*' .. - '\d\+ ENDLOOP $1 save $3 - $3\_s*' .. + '\d\+ ENDLOOP ref $1 save $3-$3 depth 0\_s*' .. '\d\+ JUMP -> \d\+\_s*' .. '\d\+ DROP\_s*' .. '\d\+ RETURN void', diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index c4f02ab28..3ee7e2e83 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2322,10 +2322,46 @@ def Test_for_loop_with_closure() endfor endfor END - v9.CheckScriptSuccess(['vim9script'] + lines) - # FIXME: not yet right for :def - lines[14] = 'assert_equal(2 .. a, flist[n]())' - v9.CheckDefSuccess(lines) + v9.CheckDefAndScriptSuccess(lines) +enddef + +def Test_define_global_closure_in_loops() + var lines =<< trim END + vim9script + + def Func() + for i in range(3) + var ii = i + for a in ['a', 'b', 'c'] + var aa = a + if ii == 0 && aa == 'a' + def g:Global_0a(): string + return ii .. aa + enddef + endif + if ii == 1 && aa == 'b' + def g:Global_1b(): string + return ii .. aa + enddef + endif + if ii == 2 && aa == 'c' + def g:Global_2c(): string + return ii .. aa + enddef + endif + endfor + endfor + enddef + Func() + END + v9.CheckScriptSuccess(lines) + assert_equal("0a", g:Global_0a()) + assert_equal("1b", g:Global_1b()) + assert_equal("2c", g:Global_2c()) + + delfunc g:Global_0a + delfunc g:Global_1b + delfunc g:Global_2c enddef def Test_for_loop_fails() @@ -2418,6 +2454,32 @@ def Test_for_loop_fails() endfor END v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>') + + lines =<< trim END + for a in range(3) + while a > 3 + for b in range(2) + while b < 0 + for c in range(5) + while c > 6 + while c < 0 + for d in range(1) + for e in range(3) + while e > 3 + endwhile + endfor + endfor + endwhile + endwhile + endfor + endwhile + endfor + endwhile + endfor + END + v9.CheckDefSuccess(lines) + + v9.CheckDefFailure(['for x in range(3)'] + lines + ['endfor'], 'E1306:') enddef def Test_for_loop_script_var() |