summaryrefslogtreecommitdiffstats
path: root/src/testdir
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-31 22:05:04 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-31 22:05:04 +0200
commit38ddf333f6b2806b0ea2dd052ee1cd50dd7f4525 (patch)
tree5174c1e94e06de25435c40113f6d793eb97659c7 /src/testdir
parent4d4d1cd5c8b61ef0296bd6190ca2a0b2d6d96ba7 (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.vim18
-rw-r--r--src/testdir/test_vim9_func.vim22
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'))