parser.c (17987) | parser.c (18018) |
---|---|
1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Kenneth Almquist. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * | 1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Kenneth Almquist. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * |
36 * $Id: parser.c,v 1.11 1996/02/03 13:27:55 joerg Exp $ | 36 * $Id: parser.c,v 1.12 1996/09/01 10:21:31 peter Exp $ |
37 */ 38 39#ifndef lint 40static char sccsid[] = "@(#)parser.c 8.7 (Berkeley) 5/16/95"; 41#endif /* not lint */ 42 43#include <stdlib.h> 44 --- 45 unchanged lines hidden (view full) --- 90char *wordtext; /* text of last word returned by readtoken */ 91MKINIT int checkkwd; /* 1 == check for kwds, 2 == also eat newlines */ 92struct nodelist *backquotelist; 93union node *redirnode; 94struct heredoc *heredoc; 95int quoteflag; /* set if (part of) last token was quoted */ 96int startlinno; /* line # where last token started */ 97 | 37 */ 38 39#ifndef lint 40static char sccsid[] = "@(#)parser.c 8.7 (Berkeley) 5/16/95"; 41#endif /* not lint */ 42 43#include <stdlib.h> 44 --- 45 unchanged lines hidden (view full) --- 90char *wordtext; /* text of last word returned by readtoken */ 91MKINIT int checkkwd; /* 1 == check for kwds, 2 == also eat newlines */ 92struct nodelist *backquotelist; 93union node *redirnode; 94struct heredoc *heredoc; 95int quoteflag; /* set if (part of) last token was quoted */ 96int startlinno; /* line # where last token started */ 97 |
98/* XXX When 'noaliases' is set to one, no alias expansion takes place. */ 99static int noaliases = 0; |
|
98 99#define GDB_HACK 1 /* avoid local declarations which gdb can't handle */ 100#ifdef GDB_HACK 101static const char argvars[5] = {CTLVAR, VSNORMAL|VSQUOTE, '@', '=', '\0'}; 102static const char types[] = "}-+?="; 103#endif 104 105 --- 303 unchanged lines hidden (view full) --- 409 n2->type = NARG; 410 n2->narg.text = wordtext; 411 n2->narg.backquote = backquotelist; 412 n2->narg.next = NULL; 413 while (readtoken() == TNL); 414 if (lasttoken != TWORD || ! equal(wordtext, "in")) 415 synerror("expecting \"in\""); 416 cpp = &n1->ncase.cases; | 100 101#define GDB_HACK 1 /* avoid local declarations which gdb can't handle */ 102#ifdef GDB_HACK 103static const char argvars[5] = {CTLVAR, VSNORMAL|VSQUOTE, '@', '=', '\0'}; 104static const char types[] = "}-+?="; 105#endif 106 107 --- 303 unchanged lines hidden (view full) --- 411 n2->type = NARG; 412 n2->narg.text = wordtext; 413 n2->narg.backquote = backquotelist; 414 n2->narg.next = NULL; 415 while (readtoken() == TNL); 416 if (lasttoken != TWORD || ! equal(wordtext, "in")) 417 synerror("expecting \"in\""); 418 cpp = &n1->ncase.cases; |
419 noaliases = 1; /* turn off alias expansion */ |
|
417 checkkwd = 2, readtoken(); 418 do { 419 *cpp = cp = (union node *)stalloc(sizeof (struct nclist)); 420 cp->type = NCLIST; 421 app = &cp->nclist.pattern; 422 for (;;) { 423 *app = ap = (union node *)stalloc(sizeof (struct narg)); 424 ap->type = NARG; 425 ap->narg.text = wordtext; 426 ap->narg.backquote = backquotelist; 427 if (checkkwd = 2, readtoken() != TPIPE) 428 break; 429 app = &ap->narg.next; 430 readtoken(); 431 } 432 ap->narg.next = NULL; 433 if (lasttoken != TRP) | 420 checkkwd = 2, readtoken(); 421 do { 422 *cpp = cp = (union node *)stalloc(sizeof (struct nclist)); 423 cp->type = NCLIST; 424 app = &cp->nclist.pattern; 425 for (;;) { 426 *app = ap = (union node *)stalloc(sizeof (struct narg)); 427 ap->type = NARG; 428 ap->narg.text = wordtext; 429 ap->narg.backquote = backquotelist; 430 if (checkkwd = 2, readtoken() != TPIPE) 431 break; 432 app = &ap->narg.next; 433 readtoken(); 434 } 435 ap->narg.next = NULL; 436 if (lasttoken != TRP) |
434 synexpect(TRP); | 437 noaliases = 0, synexpect(TRP); |
435 cp->nclist.body = list(0); 436 437 checkkwd = 2; 438 if ((t = readtoken()) != TESAC) { 439 if (t != TENDCASE) | 438 cp->nclist.body = list(0); 439 440 checkkwd = 2; 441 if ((t = readtoken()) != TESAC) { 442 if (t != TENDCASE) |
440 synexpect(TENDCASE); | 443 noaliases = 0, synexpect(TENDCASE); |
441 else 442 checkkwd = 2, readtoken(); 443 } 444 cpp = &cp->nclist.next; 445 } while(lasttoken != TESAC); | 444 else 445 checkkwd = 2, readtoken(); 446 } 447 cpp = &cp->nclist.next; 448 } while(lasttoken != TESAC); |
449 noaliases = 0; /* reset alias expansion */ |
|
446 *cpp = NULL; 447 checkkwd = 1; 448 break; 449 case TLP: 450 n1 = (union node *)stalloc(sizeof (struct nredir)); 451 n1->type = NSUBSHELL; 452 n1->nredir.n = list(0); 453 n1->nredir.redirect = NULL; --- 253 unchanged lines hidden (view full) --- 707 for (pp = (char **)parsekwd; *pp; pp++) { 708 if (**pp == *wordtext && equal(*pp, wordtext)) 709 { 710 lasttoken = t = pp - parsekwd + KWDOFFSET; 711 TRACE(("keyword %s recognized\n", tokname[t])); 712 goto out; 713 } 714 } | 450 *cpp = NULL; 451 checkkwd = 1; 452 break; 453 case TLP: 454 n1 = (union node *)stalloc(sizeof (struct nredir)); 455 n1->type = NSUBSHELL; 456 n1->nredir.n = list(0); 457 n1->nredir.redirect = NULL; --- 253 unchanged lines hidden (view full) --- 711 for (pp = (char **)parsekwd; *pp; pp++) { 712 if (**pp == *wordtext && equal(*pp, wordtext)) 713 { 714 lasttoken = t = pp - parsekwd + KWDOFFSET; 715 TRACE(("keyword %s recognized\n", tokname[t])); 716 goto out; 717 } 718 } |
715 if ((ap = lookupalias(wordtext, 1)) != NULL) { | 719 if (noaliases == 0 && 720 (ap = lookupalias(wordtext, 1)) != NULL) { |
716 pushstring(ap->val, strlen(ap->val), ap); 717 checkkwd = savecheckkwd; 718 goto top; 719 } 720 } 721out: 722 checkkwd = 0; 723 } --- 734 unchanged lines hidden --- | 721 pushstring(ap->val, strlen(ap->val), ap); 722 checkkwd = savecheckkwd; 723 goto top; 724 } 725 } 726out: 727 checkkwd = 0; 728 } --- 734 unchanged lines hidden --- |