summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2016-08-04 15:53:27 +0000
committerDaniel Shahaf <d.s@daniel.shahaf.name>2016-08-05 12:37:26 +0000
commitf026a4dc12d93518fded8df4f14fb3161ab1db98 (patch)
tree8c8d00032bc213014490ff0b42b3194669987cc0
parentdd6f79759fee9128bd99eff939655c34a1eb2813 (diff)
downloadzsh-f026a4dc12d93518fded8df4f14fb3161ab1db98.tar.gz
zsh-f026a4dc12d93518fded8df4f14fb3161ab1db98.tar.xz
zsh-f026a4dc12d93518fded8df4f14fb3161ab1db98.zip
38991: Make 'whence -v autoloaded-function' shows the defining filename.
This may also fix a problem whereby the %x prompt escape evaluated to
a function name rather than a filename, since %x is also backed by
scriptfilename.
-rw-r--r--ChangeLog3
-rw-r--r--Src/exec.c3
-rw-r--r--Test/C04funcdef.ztst10
3 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 71d4052fb..dc06dbe50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2016-08-05  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
+	* 38991: Src/exec.c, Test/C04funcdef.ztst: Make 'whence -v
+	autoloaded-function' shows the defining filename.
+
 	* 38990: Completion/Debian/Type/_debbugs_bugnumber: Track bts's
 	data dir migration.
 
diff --git a/Src/exec.c b/Src/exec.c
index 515406f33..ea9214d04 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -4915,7 +4915,8 @@ execautofn_basic(Estate state, UNUSED(int do_exec))
 
     oldscriptname = scriptname;
     oldscriptfilename = scriptfilename;
-    scriptname = scriptfilename = dupstring(shf->node.nam);
+    scriptname = dupstring(shf->node.nam);
+    scriptfilename = dupstring(shf->filename);
     execode(shf->funcdef, 1, 0, "loadautofunc");
     scriptname = oldscriptname;
     scriptfilename = oldscriptfilename;
diff --git a/Test/C04funcdef.ztst b/Test/C04funcdef.ztst
index 496577f6c..9f15e04ff 100644
--- a/Test/C04funcdef.ztst
+++ b/Test/C04funcdef.ztst
@@ -321,6 +321,16 @@
 >  print oops was successfully autoloaded
 >}
 
+  (
+    fpath=(.)
+    printf '%s\n' 'oops(){}' 'ninjas-earring(){}' 'oops "$@"' >oops
+    autoload oops
+    oops
+    whence -v oops
+  )
+0:whence -v of zsh-style autoload
+>oops is a shell function from ./oops
+
 %clean
 
  rm -f file.in file.out