diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 2000-01-21 16:28:40 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 2000-01-21 16:28:40 +0000 |
commit | 7c109429799172a7bd606593ecf58b8d49b5790f (patch) | |
tree | 7e686d6fde42a876adf503992d5ed4b7fb6aa703 /Src/exec.c | |
parent | efb93ed6a697d24ac2340b7c10f6ec86ee48d1e2 (diff) | |
download | zsh-7c109429799172a7bd606593ecf58b8d49b5790f.tar.gz zsh-7c109429799172a7bd606593ecf58b8d49b5790f.tar.xz zsh-7c109429799172a7bd606593ecf58b8d49b5790f.zip |
zsh-workers/9401
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c index 6310d5431..6c7892318 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -124,6 +124,11 @@ mod_export int sfcontext; /**/ struct execstack *exstack; +/* Stack with names of functions currently active. */ + +/**/ +mod_export Funcstack funcstack; + #define execerr() if (!forked) { lastval = 1; return; } else _exit(1) static LinkList args; @@ -3107,6 +3112,7 @@ doshfunc(char *name, Eprog prog, LinkList doshargs, int flags, int noreturnval) int oldzoptind, oldlastval, oldoptcind; char saveopts[OPT_SIZE], *oldscriptname; int obreaks = breaks; + struct funcstack fstack; HEAPALLOC { pushheap(); @@ -3152,7 +3158,11 @@ doshfunc(char *name, Eprog prog, LinkList doshargs, int flags, int noreturnval) argzero = ztrdup(argzero); } } - runshfunc(prog, wrappers, dupstring(name)); + fstack.name = dupstring(name); + fstack.prev = funcstack; + funcstack = &fstack; + runshfunc(prog, wrappers, fstack.name); + funcstack = fstack.prev; if (retflag) { retflag = 0; breaks = obreaks; |