diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-03 09:08:18 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-03 09:08:18 +0000 |
commit | 0cba5ef62ad8e98924c2bd9367f9c7c7e72e2fd0 (patch) | |
tree | aff6e4b164bdd8dd1ad12c921ee774405a5ea244 /Src/init.c | |
parent | ae79d264a3fd989713f6c7413c5096151413f284 (diff) | |
download | zsh-0cba5ef62ad8e98924c2bd9367f9c7c7e72e2fd0.tar.gz zsh-0cba5ef62ad8e98924c2bd9367f9c7c7e72e2fd0.tar.xz zsh-0cba5ef62ad8e98924c2bd9367f9c7c7e72e2fd0.zip |
25595: fix line numbers with EVAL_LINENO,
try to fix oddities with funcstack and sourced files, simplify use of caller element of funcstack
Diffstat (limited to 'Src/init.c')
-rw-r--r-- | Src/init.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/Src/init.c b/Src/init.c index 7e912a363..923b94876 100644 --- a/Src/init.c +++ b/Src/init.c @@ -1061,6 +1061,7 @@ source(char *s) unsigned char *ocs; int ocsp; int otrap_return = trap_return, otrap_state = trap_state; + struct funcstack fstack; if (!s || (!(prog = try_source_file((us = unmeta(s)))) && @@ -1100,19 +1101,17 @@ source(char *s) trap_state = TRAP_STATE_INACTIVE; sourcelevel++; - { - struct funcstack fstack; - fstack.name = dupstring("source"); - fstack.caller = dupstring(old_scriptfilename ? old_scriptfilename : - "zsh"); - fstack.flineno = 0; - fstack.lineno = oldlineno; - fstack.filename = fstack.name; - fstack.prev = funcstack; - fstack.sourced = 1; - funcstack = &fstack; - } - + + fstack.name = scriptfilename; + fstack.caller = funcstack ? funcstack->name : + dupstring(old_scriptfilename ? old_scriptfilename : "zsh"); + fstack.flineno = 0; + fstack.lineno = oldlineno; + fstack.filename = scriptfilename; + fstack.prev = funcstack; + fstack.tp = FS_SOURCE; + funcstack = &fstack; + if (prog) { pushheap(); errflag = 0; |