patch 8.2.3267: Vim9: crash when disassembling using deleted script variable
Problem: Vim9: crash when disassembling a function that uses a deleted
script variable.
Solution: Check the variable still exists. (closes #8683)
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index b151cb4..1530c90 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2241,5 +2241,53 @@
res)
enddef
+def Test_disassemble_after_reload()
+ var lines =<< trim END
+ vim9script
+ if exists('g:ThisFunc')
+ finish
+ endif
+ var name: any
+ def g:ThisFunc(): number
+ g:name = name
+ return 0
+ enddef
+ def g:ThatFunc(): number
+ name = g:name
+ return 0
+ enddef
+ END
+ lines->writefile('Xreload.vim')
+
+ source Xreload.vim
+ g:ThisFunc()
+ g:ThatFunc()
+
+ source Xreload.vim
+ var res = execute('disass g:ThisFunc')
+ assert_match('ThisFunc\_s*' ..
+ 'g:name = name\_s*' ..
+ '\d LOADSCRIPT \[deleted\] from .*/Xreload.vim\_s*' ..
+ '\d STOREG g:name\_s*' ..
+ 'return 0\_s*' ..
+ '\d PUSHNR 0\_s*' ..
+ '\d RETURN\_s*',
+ res)
+
+ res = execute('disass g:ThatFunc')
+ assert_match('ThatFunc\_s*' ..
+ 'name = g:name\_s*' ..
+ '\d LOADG g:name\_s*' ..
+ '\d STORESCRIPT \[deleted\] in .*/Xreload.vim\_s*' ..
+ 'return 0\_s*' ..
+ '\d PUSHNR 0\_s*' ..
+ '\d RETURN\_s*',
+ res)
+
+ delete('Xreload.vim')
+ delfunc g:ThisFunc
+ delfunc g:ThatFunc
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker