summaryrefslogtreecommitdiff
path: root/Src/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/init.c')
-rw-r--r--Src/init.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/Src/init.c b/Src/init.c
index d8a0dbc57..2f84fc445 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -268,7 +268,7 @@ parseargs(char **argv)
/* -c command */
cmd = *argv;
opts[INTERACTIVE] &= 1;
- scriptname = ztrdup("zsh");
+ scriptname = scriptfilename = ztrdup("zsh");
} else if (**argv == 'o') {
if (!*++*argv)
argv++;
@@ -325,6 +325,7 @@ parseargs(char **argv)
}
opts[INTERACTIVE] &= 1;
argzero = *argv;
+ scriptfilename = argzero;
argv++;
}
while (*argv)
@@ -1051,10 +1052,12 @@ mod_export int
source(char *s)
{
Eprog prog;
- int tempfd = -1, fd, cj, oldlineno;
+ int tempfd = -1, fd, cj;
+ zlong oldlineno;
int oldshst, osubsh, oloops;
FILE *obshin;
char *old_scriptname = scriptname, *us;
+ char *old_scriptfilename = scriptfilename;
unsigned char *ocs;
int ocsp;
int otrap_return = trap_return, otrap_state = trap_state;
@@ -1087,6 +1090,7 @@ source(char *s)
loops = 0;
dosetopt(SHINSTDIN, 0, 1);
scriptname = s;
+ scriptfilename = s;
/*
* The special return behaviour of traps shouldn't
@@ -1096,6 +1100,17 @@ source(char *s)
trap_state = TRAP_STATE_INACTIVE;
sourcelevel++;
+ /* { */
+ /* struct funcstack fstack; */
+ /* fstack.name = dupstring("source"); */
+ /* fstack.caller = dupstring(scriptfilename); */
+ /* fstack.flineno = oldlineno; */
+ /* fstack.lineno = oldlineno; */
+ /* fstack.filename = NULL; */
+ /* fstack.prev = funcstack; */
+ /* funcstack = &fstack; */
+ /* } */
+
if (prog) {
pushheap();
errflag = 0;
@@ -1103,6 +1118,7 @@ source(char *s)
popheap();
} else
loop(0, 0); /* loop through the file to be sourced */
+ /* funcstack = funcstack->prev; */
sourcelevel--;
trap_state = otrap_state;
@@ -1126,6 +1142,7 @@ source(char *s)
if (!exit_pending)
retflag = 0;
scriptname = old_scriptname;
+ scriptfilename = old_scriptfilename;
free(cmdstack);
cmdstack = ocs;
cmdsp = ocsp;