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 <vda.linux@googlemail.com>
This commit is contained in:
parent
350e686f3b
commit
3df1410a00
17
shell/ash.c
17
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, $<specialchar>, ${...}, 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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user