aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval.c22
-rw-r--r--src/nvim/testdir/screendump.vim0
-rw-r--r--src/nvim/testdir/test_options.vim2
-rw-r--r--src/nvim/testdir/test_profile.vim30
4 files changed, 43 insertions, 11 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 6f7d5ed6e4..98448ff1f9 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -22147,16 +22147,18 @@ void func_dump_profile(FILE *fd)
} else {
fprintf(fd, "FUNCTION %s()\n", fp->uf_name);
}
- bool should_free;
- const LastSet last_set = (LastSet){
- .script_ctx = fp->uf_script_ctx,
- .channel_id = 0,
- };
- char_u *p = get_scriptname(last_set, &should_free);
- fprintf(fd, " Defined: %s line %" PRIdLINENR "\n",
- p, fp->uf_script_ctx.sc_lnum);
- if (should_free) {
- xfree(p);
+ if (fp->uf_script_ctx.sc_sid != 0) {
+ bool should_free;
+ const LastSet last_set = (LastSet){
+ .script_ctx = fp->uf_script_ctx,
+ .channel_id = 0,
+ };
+ char_u *p = get_scriptname(last_set, &should_free);
+ fprintf(fd, " Defined: %s line %" PRIdLINENR "\n",
+ p, fp->uf_script_ctx.sc_lnum);
+ if (should_free) {
+ xfree(p);
+ }
}
if (fp->uf_tm_count == 1) {
fprintf(fd, "Called 1 time\n");
diff --git a/src/nvim/testdir/screendump.vim b/src/nvim/testdir/screendump.vim
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/nvim/testdir/screendump.vim
diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim
index ffd344200b..f4f5cbca61 100644
--- a/src/nvim/testdir/test_options.vim
+++ b/src/nvim/testdir/test_options.vim
@@ -216,7 +216,7 @@ func Test_set_completion()
" Expand files and directories.
call feedkeys(":set tags=./\<C-A>\<C-B>\"\<CR>", 'tx')
- call assert_match('./samples/ ./sautest/ ./setup.vim ./shared.vim', @:)
+ call assert_match('./samples/ ./sautest/ ./screendump.vim ./setup.vim ./shared.vim', @:)
call feedkeys(":set tags=./\\\\ dif\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"set tags=./\\ diff diffexpr diffopt', @:)
diff --git a/src/nvim/testdir/test_profile.vim b/src/nvim/testdir/test_profile.vim
index 4037095ae5..7e853eeac3 100644
--- a/src/nvim/testdir/test_profile.vim
+++ b/src/nvim/testdir/test_profile.vim
@@ -3,6 +3,8 @@ if !has('profile')
finish
endif
+source screendump.vim
+
func Test_profile_func()
let lines = [
\ 'profile start Xprofile_func.log',
@@ -518,3 +520,31 @@ func Test_profdel_star()
call delete('Xprofile_file.vim')
call delete('Xprofile_file.log')
endfunc
+
+" When typing the function it won't have a script ID, test that this works.
+func Test_profile_typed_func()
+ if !CanRunVimInTerminal()
+ throw 'Skipped: cannot run Vim in a terminal window'
+ endif
+
+ let lines =<< trim END
+ profile start XprofileTypedFunc
+ END
+ call writefile(lines, 'XtestProfile')
+ let buf = RunVimInTerminal('-S XtestProfile', #{})
+
+ call term_sendkeys(buf, ":func DoSomething()\<CR>"
+ \ .. "echo 'hello'\<CR>"
+ \ .. "endfunc\<CR>")
+ call term_sendkeys(buf, ":profile func DoSomething\<CR>")
+ call term_sendkeys(buf, ":call DoSomething()\<CR>")
+ call term_wait(buf, 200)
+ call StopVimInTerminal(buf)
+ let lines = readfile('XprofileTypedFunc')
+ call assert_equal("FUNCTION DoSomething()", lines[0])
+ call assert_equal("Called 1 time", lines[1])
+
+ " clean up
+ call delete('XprofileTypedFunc')
+ call delete('XtestProfile')
+endfunc