Module Name: src Committed By: christos Date: Sun Nov 14 19:49:17 UTC 2010
Modified Files: src/bin/sh: parser.c Log Message: revert previous. breaks other stuff. To generate a diff of this commit: cvs rdiff -u -r1.75 -r1.76 src/bin/sh/parser.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/sh/parser.c diff -u src/bin/sh/parser.c:1.75 src/bin/sh/parser.c:1.76 --- src/bin/sh/parser.c:1.75 Sun Nov 14 14:43:38 2010 +++ src/bin/sh/parser.c Sun Nov 14 14:49:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: parser.c,v 1.75 2010/11/14 19:43:38 christos Exp $ */ +/* $NetBSD: parser.c,v 1.76 2010/11/14 19:49:16 christos Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)parser.c 8.7 (Berkeley) 5/16/95"; #else -__RCSID("$NetBSD: parser.c,v 1.75 2010/11/14 19:43:38 christos Exp $"); +__RCSID("$NetBSD: parser.c,v 1.76 2010/11/14 19:49:16 christos Exp $"); #endif #endif /* not lint */ @@ -896,27 +896,20 @@ * This code assumes that an int is 32 bits. We don't use uint32_t, * because the rest of the code does not. */ -#define VN (varnest - insub) -#define ISDBLQUOTE() ((VN < 32) ? (dblquote & (1 << VN)) : \ - (dblquotep[(VN / 32) - 1] & (1 << (VN % 32)))) +#define ISDBLQUOTE() ((varnest < 32) ? (dblquote & (1 << varnest)) : \ + (dblquotep[(varnest / 32) - 1] & (1 << (varnest % 32)))) #define SETDBLQUOTE() \ - do { \ - TRACE(("setdblquote %d\n", varnest)); \ - if (varnest < 32) \ - dblquote |= (1 << varnest); \ - else \ - dblquotep[(varnest / 32) - 1] |= (1 << (varnest % 32));\ - } while (/*CONSTCOND*/0) + if (varnest < 32) \ + dblquote |= (1 << varnest); \ + else \ + dblquotep[(varnest / 32) - 1] |= (1 << (varnest % 32)) #define CLRDBLQUOTE() \ - do { \ - TRACE(("clrdblquote %d\n", varnest)); \ - if (varnest < 32) \ - dblquote &= ~(1 << varnest); \ - else \ - dblquotep[(varnest / 32) - 1] &= ~(1 << (varnest % 32)); \ - } while (/*CONSTCOND*/0) + if (varnest < 32) \ + dblquote &= ~(1 << varnest); \ + else \ + dblquotep[(varnest / 32) - 1] &= ~(1 << (varnest % 32)) STATIC int readtoken1(int firstc, char const *syn, char *eofmark, int striptabs) @@ -935,7 +928,6 @@ volatile int arinest; /* levels of arithmetic expansion */ volatile int parenlevel; /* levels of parens in arithmetic */ volatile int oldstyle; - volatile int insub; char const * volatile prevsyntax; /* syntax before arithmetic */ #ifdef __GNUC__ prevsyntax = NULL; /* XXX gcc4 */ @@ -944,9 +936,9 @@ startlinno = plinno; dblquote = 0; varnest = 0; - insub = 0; - if (syntax == DQSYNTAX) + if (syntax == DQSYNTAX) { SETDBLQUOTE(); + } quotef = 0; bqlist = NULL; arinest = 0; @@ -1002,14 +994,10 @@ break; } quotef = 1; - TRACE(("varnest=%d doubleq=%d c=%c\n", - varnest, ISDBLQUOTE(), c)); if (ISDBLQUOTE() && c != '\\' && c != '`' && c != '$' && - (c != '"' || eofmark != NULL)) { - USTPUTC(CTLESC, out); - USTPUTC(CTLESC, out); - } + (c != '"' || eofmark != NULL)) + USTPUTC('\\', out); if (SQSYNTAX[c] == CCTL) USTPUTC(CTLESC, out); else if (eofmark == NULL) { @@ -1080,7 +1068,6 @@ PARSESUB(); /* parse substitution */ break; case CENDVAR: /* CLOSEBRACE */ - insub = 0; if (varnest > 0 && !ISDBLQUOTE()) { varnest--; USTPUTC(CTLENDVAR, out); @@ -1353,9 +1340,7 @@ flags |= VSQUOTE; *(stackblock() + typeloc) = subtype | flags; if (subtype != VSNORMAL) { - TRACE(("varnest=%d subtype=%d\n", varnest, subtype)); varnest++; - insub = 1; if (varnest >= maxnest) { dblquotep = ckrealloc(dblquotep, maxnest / 8); dblquotep[(maxnest / 32) - 1] = 0;