vim-patch:9.1.0991: v:stacktrace has wrong type in Vim9 script

Problem:  v:stacktrace has wrong type in Vim9 script.
Solution: Change the type to t_list_dict_any.  Fix grammar in docs.
          (zeertzjq)

closes: vim/vim#16390

6655bef330
This commit is contained in:
zeertzjq 2025-01-07 09:05:52 +08:00
parent d5308637bf
commit 8fa4306eb9
4 changed files with 43 additions and 18 deletions

View File

@ -4186,12 +4186,12 @@ getstacktrace() *getstacktrace()*
Returns the current stack trace of Vim scripts.
Stack trace is a |List|, of which each item is a |Dictionary|
with the following items:
funcref The funcref if the stack is at the function,
otherwise this item is not exist.
funcref The funcref if the stack is at a function,
otherwise this item is omitted.
event The string of the event description if the
stack is at autocmd event, otherwise this item
is not exist.
lnum The line number of the script on the stack.
stack is at an autocmd event, otherwise this
item is omitted.
lnum The line number in the script on the stack.
filepath The file path of the script on the stack.
Return: ~

View File

@ -3773,12 +3773,12 @@ function vim.fn.getscriptinfo(opts) end
--- Returns the current stack trace of Vim scripts.
--- Stack trace is a |List|, of which each item is a |Dictionary|
--- with the following items:
--- funcref The funcref if the stack is at the function,
--- otherwise this item is not exist.
--- funcref The funcref if the stack is at a function,
--- otherwise this item is omitted.
--- event The string of the event description if the
--- stack is at autocmd event, otherwise this item
--- is not exist.
--- lnum The line number of the script on the stack.
--- stack is at an autocmd event, otherwise this
--- item is omitted.
--- lnum The line number in the script on the stack.
--- filepath The file path of the script on the stack.
---
--- @return table[]

View File

@ -4676,12 +4676,12 @@ M.funcs = {
Returns the current stack trace of Vim scripts.
Stack trace is a |List|, of which each item is a |Dictionary|
with the following items:
funcref The funcref if the stack is at the function,
otherwise this item is not exist.
funcref The funcref if the stack is at a function,
otherwise this item is omitted.
event The string of the event description if the
stack is at autocmd event, otherwise this item
is not exist.
lnum The line number of the script on the stack.
stack is at an autocmd event, otherwise this
item is omitted.
lnum The line number in the script on the stack.
filepath The file path of the script on the stack.
]=],
name = 'getstacktrace',

View File

@ -1,5 +1,7 @@
" Test for getstacktrace() and v:stacktrace
source vim9.vim
let s:thisfile = expand('%:p')
let s:testdir = s:thisfile->fnamemodify(':h')
@ -34,7 +36,7 @@ func Test_getstacktrace()
source Xscript1
call Xfunc1()
call AssertStacktrace([
\ #{funcref: funcref('Test_getstacktrace'), lnum: 35, filepath: s:thisfile},
\ #{funcref: funcref('Test_getstacktrace'), lnum: 37, filepath: s:thisfile},
\ #{funcref: funcref('Xfunc1'), lnum: 5, filepath: Filepath('Xscript1')},
\ #{funcref: funcref('Xfunc2'), lnum: 4, filepath: Filepath('Xscript2')},
\ ], g:stacktrace)
@ -61,7 +63,7 @@ func Test_getstacktrace_event()
source Xscript1
source Xscript2
call AssertStacktrace([
\ #{funcref: funcref('Test_getstacktrace_event'), lnum: 62, filepath: s:thisfile},
\ #{funcref: funcref('Test_getstacktrace_event'), lnum: 64, filepath: s:thisfile},
\ #{event: 'SourcePre Autocommands for "*"', lnum: 7, filepath: Filepath('Xscript1')},
\ #{funcref: funcref('Xfunc'), lnum: 4, filepath: Filepath('Xscript1')},
\ ], g:stacktrace)
@ -98,10 +100,33 @@ func Test_vstacktrace()
endtry
call assert_equal([], v:stacktrace)
call AssertStacktrace([
\ #{funcref: funcref('Test_vstacktrace'), lnum: 95, filepath: s:thisfile},
\ #{funcref: funcref('Test_vstacktrace'), lnum: 97, filepath: s:thisfile},
\ #{funcref: funcref('Xfunc1'), lnum: 5, filepath: Filepath('Xscript1')},
\ #{funcref: funcref('Xfunc2'), lnum: 4, filepath: Filepath('Xscript2')},
\ ], stacktrace)
endfunc
func Test_zzz_stacktrace_vim9()
let lines =<< trim [SCRIPT]
var stacktrace = getstacktrace()
assert_notequal([], stacktrace)
for d in stacktrace
assert_true(has_key(d, 'lnum'))
endfor
try
throw 'Exception from s:Func'
catch
assert_notequal([], v:stacktrace)
assert_equal(len(stacktrace), len(v:stacktrace))
for d in v:stacktrace
assert_true(has_key(d, 'lnum'))
endfor
endtry
[SCRIPT]
call CheckDefSuccess(lines)
" FIXME: v:stacktrace is not cleared after the exception handling, and this
" test has to be run as the last one because of this.
" call assert_equal([], v:stacktrace)
endfunc
" vim: shiftwidth=2 sts=2 expandtab