Deleted Added
sdiff udiff text old ( 17987 ) new ( 18018 )
full compact
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 $
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
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;
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)
434 synexpect(TRP);
435 cp->nclist.body = list(0);
436
437 checkkwd = 2;
438 if ((t = readtoken()) != TESAC) {
439 if (t != TENDCASE)
440 synexpect(TENDCASE);
441 else
442 checkkwd = 2, readtoken();
443 }
444 cpp = &cp->nclist.next;
445 } while(lasttoken != TESAC);
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 }
715 if ((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 ---