patch 8.2.4059: Vim9: an expression of a map cannot access script-local items
Problem: Vim9: an expression of a map cannot access script-local items.
(Maxim Kim)
Solution: Use the script ID of where the map was defined.
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index 395265b..ddf5b82 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -1184,6 +1184,44 @@
&rtp = save_rtp
enddef
+def Test_autoload_mapping()
+ mkdir('Xdir/autoload', 'p')
+ var save_rtp = &rtp
+ exe 'set rtp^=' .. getcwd() .. '/Xdir'
+
+ var lines =<< trim END
+ vim9script autoload
+
+ g:toggle_loaded = 'yes'
+
+ export def Toggle(): string
+ return ":g:toggle_called = 'yes'\<CR>"
+ enddef
+ END
+ writefile(lines, 'Xdir/autoload/toggle.vim')
+
+ lines =<< trim END
+ vim9script
+
+ import autoload 'toggle.vim'
+
+ nnoremap <silent> <expr> tt toggle.Toggle()
+ END
+ CheckScriptSuccess(lines)
+ assert_false(exists("g:toggle_loaded"))
+ assert_false(exists("g:toggle_called"))
+
+ feedkeys("tt", 'xt')
+ assert_equal('yes', g:toggle_loaded)
+ assert_equal('yes', g:toggle_called)
+
+ nunmap tt
+ unlet g:toggle_loaded
+ unlet g:toggle_called
+ delete('Xdir', 'rf')
+ &rtp = save_rtp
+enddef
+
def Test_vim9script_autoload_fails()
var lines =<< trim END
vim9script autoload