diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-31 22:05:04 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-31 22:05:04 +0200 |
commit | 38ddf333f6b2806b0ea2dd052ee1cd50dd7f4525 (patch) | |
tree | 5174c1e94e06de25435c40113f6d793eb97659c7 /src/testdir | |
parent | 4d4d1cd5c8b61ef0296bd6190ca2a0b2d6d96ba7 (diff) |
patch 8.2.1329: Vim9: cannot define global function inside :def functionv8.2.1329
Problem: Vim9: cannot define global function inside :def function.
Solution: Assign to global variable instead of local. (closes #6584)
Diffstat (limited to 'src/testdir')
-rw-r--r-- | src/testdir/test_vim9_disassemble.vim | 18 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 22 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index 98a9e207e5..ea012b744e 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -699,6 +699,24 @@ def Test_disassemble_lambda() instr) enddef +def NestedOuter() + def g:Inner() + echomsg "inner" + enddef +enddef + +def Test_nested_func() + let instr = execute('disassemble NestedOuter') + assert_match('NestedOuter\_s*' .. + 'def g:Inner()\_s*' .. + 'echomsg "inner"\_s*' .. + 'enddef\_s*' .. + '\d NEWFUNC <lambda>\d\+ Inner\_s*' .. + '\d PUSHNR 0\_s*' .. + '\d RETURN', + instr) +enddef + def AndOr(arg: any): string if arg == 1 && arg != 2 || arg == 4 return 'yes' diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 2546f1369f..dae64429d9 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -133,6 +133,28 @@ def Test_nested_function() CheckDefFailure(['func Nested()', 'endfunc'], 'E1086:') enddef +def Test_nested_global_function() + let lines =<< trim END + vim9script + def Outer() + def g:Inner(): string + return 'inner' + enddef + enddef + disass Outer + Outer() + assert_equal('inner', g:Inner()) + delfunc g:Inner + Outer() + assert_equal('inner', g:Inner()) + delfunc g:Inner + Outer() + assert_equal('inner', g:Inner()) + delfunc g:Inner + END + CheckScriptSuccess(lines) +enddef + func Test_call_default_args_from_func() call assert_equal('string', MyDefaultArgs()) call assert_equal('one', MyDefaultArgs('one')) |