1
0
forked from aniani/vim

patch 9.1.0360: Vim9: does not handle autoloaded variables well

Problem:  Vim9: does not handle autoloaded variables well
Solution: Better handle script-level exported variable references from
          autoload files (Ernie Rael).

fixes: #14591
closes: #14607

Signed-off-by: Ernie Rael <errael@raelity.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Ernie Rael
2024-04-21 14:45:48 +02:00
committed by Christian Brabandt
parent 158673680f
commit 84f6dc7ed2
4 changed files with 128 additions and 14 deletions

View File

@@ -1201,6 +1201,71 @@ def Test_autoload_import_relative_from_buffer_in_dir()
:bw!
enddef
" Test modifying exported autoload variable. Github issue: #14591
def Test_autoload_export_variables()
mkdir('Xautoload_vars/autoload', 'pR')
var lines =<< trim END
vim9script
export var val = 11
val = 42
END
# Test that the imported script, above, can modify the exported variable;
# and test that the importing script, below, can modify the variable.
writefile(lines, 'Xautoload_vars/autoload/Xauto_vars_f2.vim', 'D')
lines =<< trim END
vim9script
import autoload './Xautoload_vars/autoload/Xauto_vars_f2.vim' as f2
def F(): number
return f2.val
enddef
assert_equal(42, F())
assert_equal(42, f2.val)
f2.val = 17
assert_equal(17, f2.val)
def G()
f2.val = 19
enddef
G()
assert_equal(19, f2.val)
END
v9.CheckScriptSuccess(lines)
# Test const var is not modifiable.
lines =<< trim END
vim9script
export const val = 11
val = 42
END
writefile(lines, 'Xautoload_vars/autoload/Xauto_vars_f3.vim', 'D')
lines =<< trim END
vim9script
import autoload './Xautoload_vars/autoload/Xauto_vars_f3.vim' as f3
var x = f3.val
END
v9.CheckScriptFailure(lines, 'E46:')
# Test const var is not modifiable from importing script.
lines =<< trim END
vim9script
export const val = 11
END
writefile(lines, 'Xautoload_vars/autoload/Xauto_vars_f4.vim', 'D')
lines =<< trim END
vim9script
import autoload './Xautoload_vars/autoload/Xauto_vars_f4.vim' as f4
f4.val = 13
END
v9.CheckScriptFailure(lines, 'E46:')
enddef
def Test_autoload_import_relative_autoload_dir()
mkdir('autoload', 'pR')
var lines =<< trim END