From 3df1410a00a7a57f3a43373c00cdea2031d7d70c Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 26 Oct 2016 16:41:13 +0200 Subject: ash: [PARSER] Size optimisations in parameter expansion parser Upstream commit: Date: Thu, 4 Oct 2007 22:20:38 +0800 [PARSER] Size optimisations in parameter expansion parser Merge flags into subtype. Do not write subtype out twice. Add likely flag on ${ vs. $NAME. Kill unnecessary (and bogus) PEOA check. function old new delta readtoken1 2891 2860 -31 Signed-off-by: Denys Vlasenko --- shell/ash.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'shell/ash.c') diff --git a/shell/ash.c b/shell/ash.c index e0828d4a7..21373b65a 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11701,7 +11701,6 @@ parseredir: { parsesub: { unsigned char subtype; int typeloc; - int flags = 0; c = pgetc_eatbnl(); if (c > 255 /* PEOA or PEOF */ @@ -11730,19 +11729,19 @@ parsesub: { /* $VAR, $, ${...}, or PEOA/PEOF */ USTPUTC(CTLVAR, out); typeloc = out - (char *)stackblock(); - USTPUTC(VSNORMAL, out); + STADJUST(1, out); subtype = VSNORMAL; if (c == '{') { c = pgetc_eatbnl(); subtype = 0; } varname: - if (c <= 255 /* not PEOA or PEOF */ && is_name(c)) { + if (is_name(c)) { /* $[{[#]]NAME[}] */ do { STPUTC(c, out); c = pgetc_eatbnl(); - } while (c <= 255 /* not PEOA or PEOF */ && is_in_name(c)); + } while (is_in_name(c)); } else if (isdigit(c)) { /* $[{[#]]NUM[}] */ do { @@ -11776,7 +11775,6 @@ parsesub: { goto badsub; } - flags = 0; if (subtype == 0) { static const char types[] ALIGN1 = "}-+?="; /* ${VAR...} but not $VAR or ${#VAR} */ @@ -11795,13 +11793,13 @@ parsesub: { break; /* "goto badsub" is bigger (!) */ } #endif - flags = VSNUL; + subtype = VSNUL; /*FALLTHROUGH*/ default: { const char *p = strchr(types, c); if (p == NULL) break; - subtype = p - types + VSNORMAL; + subtype |= p - types + VSNORMAL; break; } case '%': @@ -11831,12 +11829,11 @@ parsesub: { badsub: pungetc(); } - ((unsigned char *)stackblock())[typeloc] = subtype | flags; + ((unsigned char *)stackblock())[typeloc] = subtype; if (subtype != VSNORMAL) { varnest++; - if (dblquote) { + if (dblquote) dqvarnest++; - } } STPUTC('=', out); } -- cgit v1.2.3