mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 21:44:11 +01:00
Fix function stack unwinding on autoload failures.
This commit is contained in:
parent
003ec8c7e8
commit
7457bdc19d
@ -6,6 +6,11 @@
|
||||
do this sometimes in order for existing $LINENO to show through.
|
||||
This seems to cause more problems than it solves.
|
||||
|
||||
2001-07-09 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 15321: Src/exec.c: Fix line numbers in an error message; unwind
|
||||
function context properly on obscure autoloading failures.
|
||||
|
||||
2001-07-07 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 15308: Src/builtin.c: Fix infinite loop on `r OLD=NEW' when OLD
|
||||
|
13
Src/exec.c
13
Src/exec.c
@ -3273,7 +3273,10 @@ loadautofn(Shfunc shf, int fksh, int autol)
|
||||
execode(prog, 1, 0);
|
||||
shf = (Shfunc) shfunctab->getnode(shfunctab, n);
|
||||
if (!shf || (shf->flags & PM_UNDEFINED)) {
|
||||
/* We're not actually in the function; decrement locallevel */
|
||||
locallevel--;
|
||||
zwarn("%s: function not defined by file", n, 0);
|
||||
locallevel++;
|
||||
popheap();
|
||||
return NULL;
|
||||
}
|
||||
@ -3359,9 +3362,7 @@ doshfunc(char *name, Eprog prog, LinkList doshargs, int flags, int noreturnval)
|
||||
if(++funcdepth > MAX_FUNCTION_DEPTH)
|
||||
{
|
||||
zerr("maximum nested function level reached", NULL, 0);
|
||||
scriptname = oldscriptname;
|
||||
popheap();
|
||||
return;
|
||||
goto undoshfunc;
|
||||
}
|
||||
#endif
|
||||
fstack.name = dupstring(name);
|
||||
@ -3382,15 +3383,15 @@ doshfunc(char *name, Eprog prog, LinkList doshargs, int flags, int noreturnval)
|
||||
errflag = 1;
|
||||
else
|
||||
lastval = 1;
|
||||
popheap();
|
||||
scriptname = oldscriptname;
|
||||
return;
|
||||
goto doneshfunc;
|
||||
}
|
||||
prog = shf->funcdef;
|
||||
}
|
||||
runshfunc(prog, wrappers, fstack.name);
|
||||
doneshfunc:
|
||||
funcstack = fstack.prev;
|
||||
#ifdef MAX_FUNCTION_DEPTH
|
||||
undoshfunc:
|
||||
--funcdepth;
|
||||
#endif
|
||||
if (retflag) {
|
||||
|
Loading…
Reference in New Issue
Block a user