Deleted Added
full compact
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 ---