diff options
-rw-r--r-- | sys/src/cmd/rc/code.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/rc/exec.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/rc/exec.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/rc/lex.c | 3 | ||||
-rw-r--r-- | sys/src/cmd/rc/plan9.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/rc/rc.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/rc/simple.c | 3 | ||||
-rw-r--r-- | sys/src/cmd/rc/tree.c | 2 |
8 files changed, 9 insertions, 10 deletions
diff --git a/sys/src/cmd/rc/code.c b/sys/src/cmd/rc/code.c index d85a12260..89cc43183 100644 --- a/sys/src/cmd/rc/code.c +++ b/sys/src/cmd/rc/code.c @@ -184,7 +184,7 @@ outcode(tree *t, int eflag) emits(strdup(f)); } emitf(Xsrcline); - emiti(lexline); + emiti(runq->lexline); outcode(c1, eflag); emitf(Xunlocal); /* get rid of $* */ emitf(Xreturn); diff --git a/sys/src/cmd/rc/exec.c b/sys/src/cmd/rc/exec.c index 04b3a4120..bbb13a17c 100644 --- a/sys/src/cmd/rc/exec.c +++ b/sys/src/cmd/rc/exec.c @@ -23,7 +23,7 @@ start(code *c, int pc, var *local) p->cmdfd = 0; p->eof = 0; p->iflag = 0; - p->lineno = 1; + p->lineno = runq ? runq->lineno : 1; p->ret = runq; runq = p; } @@ -203,12 +203,12 @@ main(int argc, char *argv[]) bootstrap[i].i = 0; start(bootstrap, 1, (var *)0); runq->cmdfile = strdup("rc"); + runq->lexline = 0; /* prime bootstrap argv */ pushlist(); argv0 = estrdup(argv[0]); for(i = argc-1;i!=0;--i) pushword(argv[i]); - lexline = 0; for(;;){ if(flag['r']) @@ -922,6 +922,7 @@ Xrdcmds(void) { struct thread *p = runq; word *prompt; + flush(err); nerror = 0; if(flag['s'] && !truestatus()) diff --git a/sys/src/cmd/rc/exec.h b/sys/src/cmd/rc/exec.h index 7975596bd..1d07b58d5 100644 --- a/sys/src/cmd/rc/exec.h +++ b/sys/src/cmd/rc/exec.h @@ -49,6 +49,7 @@ struct thread{ var *local; /* list of local variables */ char *cmdfile; /* file name in Xrdcmd */ io *cmdfd; /* file descriptor for Xrdcmd */ + int lexline; /* file descriptor line */ int iflast; /* static `if not' checking */ int eof; /* is cmdfd at eof? */ int iflag; /* interactive? */ diff --git a/sys/src/cmd/rc/lex.c b/sys/src/cmd/rc/lex.c index 52ded7769..3462bed69 100644 --- a/sys/src/cmd/rc/lex.c +++ b/sys/src/cmd/rc/lex.c @@ -28,7 +28,6 @@ int incomm; int lastc; int ndot; int nerror; -int lexline; int nlexpath; int lexpathsz; @@ -53,7 +52,7 @@ advance(void) lastc = future; future = EOF; if(c == '\n') - lexline++; + runq->lexline++; return c; } /* diff --git a/sys/src/cmd/rc/plan9.c b/sys/src/cmd/rc/plan9.c index 634570c26..fb375b270 100644 --- a/sys/src/cmd/rc/plan9.c +++ b/sys/src/cmd/rc/plan9.c @@ -166,8 +166,8 @@ Xrdfn(void) else { free(runq->cmdfile); int f = open(runq->argv->words->word, 0); - lexline = 0; runq->cmdfile = strdup(runq->argv->words->word); + runq->lexline = 1; runq->pc--; popword(); if(f>=0) execcmds(openfd(f)); diff --git a/sys/src/cmd/rc/rc.h b/sys/src/cmd/rc/rc.h index 165f044e3..87bc5c8a9 100644 --- a/sys/src/cmd/rc/rc.h +++ b/sys/src/cmd/rc/rc.h @@ -132,7 +132,6 @@ extern char **argp; extern char **args; extern int nerror; /* number of errors encountered during compilation */ extern int doprompt; /* is it time for a prompt? */ -extern int lexline; /* * Which fds are the reading/writing end of a pipe? diff --git a/sys/src/cmd/rc/simple.c b/sys/src/cmd/rc/simple.c index 3987dbe5a..661533b97 100644 --- a/sys/src/cmd/rc/simple.c +++ b/sys/src/cmd/rc/simple.c @@ -364,13 +364,12 @@ execdot(void) return; } - lexline = 1; - /* set up for a new command loop */ start(dotcmds, 1, (struct var *)0); pushredir(RCLOSE, fd, 0); runq->cmdfile = zero; runq->cmdfd = openfd(fd); + runq->lexline = 1; runq->iflag = iflag; runq->iflast = 0; /* push $* value */ diff --git a/sys/src/cmd/rc/tree.c b/sys/src/cmd/rc/tree.c index 557d14d6c..ce9fd152a 100644 --- a/sys/src/cmd/rc/tree.c +++ b/sys/src/cmd/rc/tree.c @@ -16,7 +16,7 @@ newtree(void) t->str = 0; t->child[0] = t->child[1] = t->child[2] = 0; t->next = treenodes; - t->line = lexline; + t->line = runq->lexline; treenodes = t; return t; } |