patch 9.1.1356: Vim9: crash when unletting variable
Problem: Vim9: crash when unletting variable
Solution: fix crash, allow to use :unlet
(Hirohito Higashi)
closes: #17226
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 960dd71..3b08384 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -2499,12 +2499,11 @@
assert_false(exists('g:somevar'))
unlet! g:somevar
- # also works for script-local variable in legacy Vim script
- s:somevar = 'legacy'
+ # script-local variable cannot be removed in Vim9 script
+ s:somevar = 'local'
assert_true(exists('s:somevar'))
- unlet s:somevar
- assert_false(exists('s:somevar'))
- unlet! s:somevar
+ v9.CheckDefExecFailure(['unlet s:somevar'], 'E1081:', 1)
+ v9.CheckDefExecFailure(['unlet! s:somevar'], 'E1081:', 1)
if 0
unlet g:does_not_exist
@@ -2677,13 +2676,21 @@
'enddef',
'defcompile',
], 'E1081:')
- v9.CheckScriptFailure([
+ v9.CheckScriptSuccess([
'vim9script',
'var svar = 123',
'func Func()',
' unlet s:svar',
'endfunc',
'Func()',
+ ])
+ v9.CheckScriptFailure([
+ 'vim9script',
+ 'var svar = 123',
+ 'def Func()',
+ ' vim9cmd unlet s:svar',
+ 'enddef',
+ 'defcompile',
], 'E1081:')
v9.CheckScriptFailure([
'vim9script',