[BusyBox] further ash size reduction
Vladimir N. Oleynik
dzo at simtreas.ru
Thu Aug 9 07:19:48 MDT 2001
Manuel,
> On Wed, Aug 08, 2001 at 05:56:00PM +0400, Vladimir N. Oleynik wrote:
> > > The syntax tables have 257 elements and the base is adjusted
> > > by 130. That means the acceptable range of values is -130 to 126! I needed
> > > to add an entry for 127, but I'm not sure if the values I used were correct.
> >
> > You are right. The additional symbol is necessary.
> > The initilal ash-0.2 code was without support aliases and
> > -PEOF=SYNBASE=129
> > syntax_index in our version have addition symbol[1]=SPCTL_CIGN_CIGN_CIGN
> > but not have symbol for '\127'+SYNBASE. Thanks!
>
> Sure. I hadn't noticed it until I added some comments to the
> syntax_index_table in my patch.
>
> > > In any case, here's my latest patch. I still haven't changed the code
> > > regarding tokendlist. I'm getting a savings of about 2k over the current
> > > cvs version. Major new changes were to cmdtxt(), calcsiz(), copynode(),
> > > and ulimitcmd. There are other minor changes here and there though.
> >
> > Ah, Amazingly! My variant worse 20 bytes now (for syntax table magic) and
> > I not surrender ;)
>
> ;-)
Ur. I have achieved a prize in 52 bytes! Look this magic of syntactic indexes
in my performance.
It not real patch to CVS versions, but only demonstration patch to old syntactic
tables
their initial CVS versions. I have tried to make maximum flexibly and readably.
I like to compete with you Manuel.
Where still it is so much get time... It seems soon me will fire. ;-)
--w
vodz
-------------- next part --------------
--- ash0.c Thu Aug 9 16:11:03 2001
+++ ash.c Thu Aug 9 15:56:10 2001
@@ -179,11 +179,6 @@
#define TEND 29
-#define BASESYNTAX (basesyntax + SYNBASE)
-#define DQSYNTAX (dqsyntax + SYNBASE)
-#define SQSYNTAX (sqsyntax + SYNBASE)
-#define ARISYNTAX (arisyntax + SYNBASE)
-
/* control characters in argument strings */
#define CTLESC '\201'
#define CTLVAR '\202'
@@ -205,6 +200,7 @@
&& ((0xc1ff920dUL >> (((unsigned int)c) - 33)) & 1))
+
#define _DIAGASSERT(x)
@@ -692,282 +688,337 @@
static void out2c(int c) { putc(c, stderr); }
#endif
-/* syntax table used when not in quotes */
-static const char basesyntax[257] = {
- CENDFILE, CSPCL, CWORD, CCTL,
- CCTL, CCTL, CCTL, CCTL,
- CCTL, CCTL, CCTL, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CSPCL,
- CNL, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CSPCL, CWORD,
- CDQUOTE, CWORD, CVAR, CWORD,
- CSPCL, CSQUOTE, CSPCL, CSPCL,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CSPCL, CSPCL, CWORD,
- CSPCL, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CBACK, CWORD,
- CWORD, CWORD, CBQUOTE, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CSPCL, CENDVAR,
- CWORD
-};
-
-/* syntax table used when in double quotes */
-static const char dqsyntax[257] = {
- CENDFILE, CIGN, CWORD, CCTL,
- CCTL, CCTL, CCTL, CCTL,
- CCTL, CCTL, CCTL, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CNL, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CCTL,
- CENDQUOTE,CWORD, CVAR, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CCTL, CWORD, CWORD, CCTL,
- CWORD, CCTL, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CCTL, CWORD, CWORD, CCTL,
- CWORD, CCTL, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CCTL, CBACK, CCTL,
- CWORD, CWORD, CBQUOTE, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CENDVAR,
- CCTL
-};
-
-/* syntax table used when in single quotes */
-static const char sqsyntax[257] = {
- CENDFILE, CIGN, CWORD, CCTL,
- CCTL, CCTL, CCTL, CCTL,
- CCTL, CCTL, CCTL, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CNL, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CCTL,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CENDQUOTE,CWORD, CWORD,
- CCTL, CWORD, CWORD, CCTL,
- CWORD, CCTL, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CCTL, CWORD, CWORD, CCTL,
- CWORD, CCTL, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CCTL, CCTL, CCTL,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CCTL
-};
-
-/* syntax table used when in arithmetic */
-static const char arisyntax[257] = {
- CENDFILE, CIGN, CWORD, CCTL,
- CCTL, CCTL, CCTL, CCTL,
- CCTL, CCTL, CCTL, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CNL, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CDQUOTE, CWORD, CVAR, CWORD,
- CWORD, CSQUOTE, CLP, CRP,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CBACK, CWORD,
- CWORD, CWORD, CBQUOTE, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CWORD,
- CWORD, CWORD, CWORD, CENDVAR,
- CWORD
+
+/* syntax table used when
+ 1. not in quotes
+ 2. in double quotes
+ 3. in single quotes
+ 4. in arithmetic
+*/
+
+/* number syntax index */
+#define BASESYNTAX 0
+#define DQSYNTAX 1
+#define SQSYNTAX 2
+#define ARISYNTAX 3
+
+static const char S_I_T[][4] = {
+#ifndef ASH_OPTIMIZE_FOR_SIZE
+ /* 0 */ { CENDFILE, CENDFILE, CENDFILE, CENDFILE }, /* PEOF */
+#endif
+ /* 1 */ { CSPCL, CIGN, CIGN, CIGN }, /* PEOA */
+#ifndef ASH_OPTIMIZE_FOR_SIZE
+ /* 2 */ { CWORD, CWORD, CWORD, CWORD }, /* 0-9A-Za-z */
+ /* 3 */ { CCTL, CCTL, CCTL, CCTL }, /* CTLESC ... */
+#endif
+ /* 4 */ { CSPCL, CWORD, CWORD, CWORD }, /* ' ' */
+ /* 5 */ { CNL, CNL, CNL, CNL }, /* \n */
+ /* 6 */ { CWORD, CCTL, CCTL, CWORD },
+ /* 7 */ { CDQUOTE, CENDQUOTE, CWORD, CDQUOTE },
+ /* 8 */ { CVAR, CVAR, CWORD, CVAR },
+ /* 9 */ { CSQUOTE, CWORD, CENDQUOTE, CSQUOTE },
+ /* 10 */ { CSPCL, CWORD, CWORD, CLP },
+ /* 11 */ { CSPCL, CWORD, CWORD, CRP },
+ /* 12 */ { CBACK, CBACK, CCTL, CBACK },
+ /* 13 */ { CBQUOTE, CBQUOTE, CWORD, CBQUOTE },
+ /* 14 */ { CENDVAR, CENDVAR, CWORD, CENDVAR }
};
+#ifndef ASH_OPTIMIZE_FOR_SIZE
+/* index line in S_I_T */
+static const char syntax_index_table[258] = {
+/* 0 -130 */ 0,
+/* 1 -129 */ 1,
+/* 2 -128 */ 2,
+/* 3 -127 */ 3,
+/* 4 -126 */ 3,
+/* 5 -125 */ 3,
+/* 6 -124 */ 3,
+/* 7 -123 */ 3,
+/* 8 -122 */ 3,
+/* 9 -121 */ 3,
+/* 10 -120 */ 3,
+/* 11 -119 */ 2,
+/* 12 -118 */ 2,
+/* 13 -117 */ 2,
+/* 14 -116 */ 2,
+/* 15 -115 */ 2,
+/* 16 -114 */ 2,
+/* 17 -113 */ 2,
+/* 18 -112 */ 2,
+/* 19 -111 */ 2,
+/* 20 -110 */ 2,
+/* 21 -109 */ 2,
+/* 22 -108 */ 2,
+/* 23 -107 */ 2,
+/* 24 -106 */ 2,
+/* 25 -105 */ 2,
+/* 26 -104 */ 2,
+/* 27 -103 */ 2,
+/* 28 -102 */ 2,
+/* 29 -101 */ 2,
+/* 30 -100 */ 2,
+/* 31 -99 */ 2,
+/* 32 -98 */ 2,
+/* 33 -97 */ 2,
+/* 34 -96 */ 2,
+/* 35 -95 */ 2,
+/* 36 -94 */ 2,
+/* 37 -93 */ 2,
+/* 38 -92 */ 2,
+/* 39 -91 */ 2,
+/* 40 -90 */ 2,
+/* 41 -89 */ 2,
+/* 42 -88 */ 2,
+/* 43 -87 */ 2,
+/* 44 -86 */ 2,
+/* 45 -85 */ 2,
+/* 46 -84 */ 2,
+/* 47 -83 */ 2,
+/* 48 -82 */ 2,
+/* 49 -81 */ 2,
+/* 50 -80 */ 2,
+/* 51 -79 */ 2,
+/* 52 -78 */ 2,
+/* 53 -77 */ 2,
+/* 54 -76 */ 2,
+/* 55 -75 */ 2,
+/* 56 -74 */ 2,
+/* 57 -73 */ 2,
+/* 58 -72 */ 2,
+/* 59 -71 */ 2,
+/* 60 -70 */ 2,
+/* 61 -69 */ 2,
+/* 62 -68 */ 2,
+/* 63 -67 */ 2,
+/* 64 -66 */ 2,
+/* 65 -65 */ 2,
+/* 66 -64 */ 2,
+/* 67 -63 */ 2,
+/* 68 -62 */ 2,
+/* 69 -61 */ 2,
+/* 70 -60 */ 2,
+/* 71 -59 */ 2,
+/* 72 -58 */ 2,
+/* 73 -57 */ 2,
+/* 74 -56 */ 2,
+/* 75 -55 */ 2,
+/* 76 -54 */ 2,
+/* 77 -53 */ 2,
+/* 78 -52 */ 2,
+/* 79 -51 */ 2,
+/* 80 -50 */ 2,
+/* 81 -49 */ 2,
+/* 82 -48 */ 2,
+/* 83 -47 */ 2,
+/* 84 -46 */ 2,
+/* 85 -45 */ 2,
+/* 86 -44 */ 2,
+/* 87 -43 */ 2,
+/* 88 -42 */ 2,
+/* 89 -41 */ 2,
+/* 90 -40 */ 2,
+/* 91 -39 */ 2,
+/* 92 -38 */ 2,
+/* 93 -37 */ 2,
+/* 94 -36 */ 2,
+/* 95 -35 */ 2,
+/* 96 -34 */ 2,
+/* 97 -33 */ 2,
+/* 98 -32 */ 2,
+/* 99 -31 */ 2,
+/* 100 -30 */ 2,
+/* 101 -29 */ 2,
+/* 102 -28 */ 2,
+/* 103 -27 */ 2,
+/* 104 -26 */ 2,
+/* 105 -25 */ 2,
+/* 106 -24 */ 2,
+/* 107 -23 */ 2,
+/* 108 -22 */ 2,
+/* 109 -21 */ 2,
+/* 110 -20 */ 2,
+/* 111 -19 */ 2,
+/* 112 -18 */ 2,
+/* 113 -17 */ 2,
+/* 114 -16 */ 2,
+/* 115 -15 */ 2,
+/* 116 -14 */ 2,
+/* 117 -13 */ 2,
+/* 118 -12 */ 2,
+/* 119 -11 */ 2,
+/* 120 -10 */ 2,
+/* 121 -9 */ 2,
+/* 122 -8 */ 2,
+/* 123 -7 */ 2,
+/* 124 -6 */ 2,
+/* 125 -5 */ 2,
+/* 126 -4 */ 2,
+/* 127 -3 */ 2,
+/* 128 -2 */ 2,
+/* 129 -1 */ 2,
+/* 130 0 */ 2,
+/* 131 1 */ 2,
+/* 132 2 */ 2,
+/* 133 3 */ 2,
+/* 134 4 */ 2,
+/* 135 5 */ 2,
+/* 136 6 */ 2,
+/* 137 7 */ 2,
+/* 138 8 */ 2,
+/* 139 9 '\t' */ 4,
+/* 140 10 '\n' */ 5,
+/* 141 11 */ 2,
+/* 142 12 */ 2,
+/* 143 13 */ 2,
+/* 144 14 */ 2,
+/* 145 15 */ 2,
+/* 146 16 */ 2,
+/* 147 17 */ 2,
+/* 148 18 */ 2,
+/* 149 19 */ 2,
+/* 150 20 */ 2,
+/* 151 21 */ 2,
+/* 152 22 */ 2,
+/* 153 23 */ 2,
+/* 154 24 */ 2,
+/* 155 25 */ 2,
+/* 156 26 */ 2,
+/* 157 27 */ 2,
+/* 158 28 */ 2,
+/* 159 29 */ 2,
+/* 160 30 */ 2,
+/* 161 31 */ 2,
+/* 162 32 " " */ 4,
+/* 163 33 "!" */ 6,
+/* 164 34 "\"" */ 7,
+/* 165 35 "#" */ 2,
+/* 166 36 "$" */ 8,
+/* 167 37 "%" */ 2,
+/* 168 38 "&" */ 4,
+/* 169 39 "'" */ 9,
+/* 170 40 "(" */ 10,
+/* 171 41 ")" */ 11,
+/* 172 42 "*" */ 6,
+/* 173 43 "+" */ 2,
+/* 174 44 "," */ 2,
+/* 175 45 "-" */ 6,
+/* 176 46 "." */ 2,
+/* 177 47 "/" */ 6,
+/* 178 48 "0" */ 2,
+/* 179 49 "1" */ 2,
+/* 180 50 "2" */ 2,
+/* 181 51 "3" */ 2,
+/* 182 52 "4" */ 2,
+/* 183 53 "5" */ 2,
+/* 184 54 "6" */ 2,
+/* 185 55 "7" */ 2,
+/* 186 56 "8" */ 2,
+/* 187 57 "9" */ 2,
+/* 188 58 ":" */ 6,
+/* 189 59 ";" */ 4,
+/* 190 60 "<" */ 4,
+/* 191 61 "=" */ 6,
+/* 192 62 ">" */ 4,
+/* 193 63 "?" */ 6,
+/* 194 64 "@" */ 2,
+/* 195 65 "A" */ 2,
+/* 196 66 "B" */ 2,
+/* 197 67 "C" */ 2,
+/* 198 68 "D" */ 2,
+/* 199 69 "E" */ 2,
+/* 200 70 "F" */ 2,
+/* 201 71 "G" */ 2,
+/* 202 72 "H" */ 2,
+/* 203 73 "I" */ 2,
+/* 204 74 "J" */ 2,
+/* 205 75 "K" */ 2,
+/* 206 76 "L" */ 2,
+/* 207 77 "M" */ 2,
+/* 208 78 "N" */ 2,
+/* 209 79 "O" */ 2,
+/* 210 80 "P" */ 2,
+/* 211 81 "Q" */ 2,
+/* 212 82 "R" */ 2,
+/* 213 83 "S" */ 2,
+/* 214 84 "T" */ 2,
+/* 215 85 "U" */ 2,
+/* 216 86 "V" */ 2,
+/* 217 87 "W" */ 2,
+/* 218 88 "X" */ 2,
+/* 219 89 "Y" */ 2,
+/* 220 90 "Z" */ 2,
+/* 221 91 "[" */ 6,
+/* 222 92 "\" */ 12,
+/* 223 93 "]" */ 6,
+/* 224 94 "^" */ 2,
+/* 225 95 "_" */ 2,
+/* 226 96 "`" */ 13,
+/* 227 97 "a" */ 2,
+/* 228 98 "b" */ 2,
+/* 229 99 "c" */ 2,
+/* 230 100 "d" */ 2,
+/* 231 101 "e" */ 2,
+/* 232 102 "f" */ 2,
+/* 233 103 "g" */ 2,
+/* 234 104 "h" */ 2,
+/* 235 105 "i" */ 2,
+/* 236 106 "j" */ 2,
+/* 237 107 "k" */ 2,
+/* 238 108 "l" */ 2,
+/* 239 109 "m" */ 2,
+/* 240 110 "n" */ 2,
+/* 241 111 "o" */ 2,
+/* 242 112 "p" */ 2,
+/* 243 113 "q" */ 2,
+/* 244 114 "r" */ 2,
+/* 245 115 "s" */ 2,
+/* 246 116 "t" */ 2,
+/* 247 117 "u" */ 2,
+/* 248 118 "v" */ 2,
+/* 249 119 "w" */ 2,
+/* 250 120 "x" */ 2,
+/* 251 121 "y" */ 2,
+/* 252 122 "z" */ 2,
+/* 253 123 "{" */ 2,
+/* 254 124 "|" */ 4,
+/* 255 125 "}" */ 14,
+/* 256 126 "~" */ 6,
+/* 257 127 */ 2,
+};
+
+#define SIT(c, syntax) S_I_T[(int)syntax_index_table[((int)c)+SYNBASE]][syntax]
+
+#else /* ASH_OPTIMIZE_FOR_SIZE */
+#define U_C(c) ((unsigned char)(c))
+
+static int SIT(int c, int syntax)
+{
+ static const char spec_symbls[]="\t\n !\"$&'()*-/:;<=>?[\\]`|}~";
+ static const char syntax_index_table [] = {
+ 1, 2, 1, 3, 4, 5, 1, 6, /* "\t\n !\"$&'" */
+ 7, 8, 3, 3, 3, 3, 1, 1, /* "()*-/:;<" */
+ 3, 1, 3, 3, 9, 3,10, 1, /* "=>?[\\]`|" */
+ 11,3 }; /* "}~" */
+ const char *s;
+ int indx;
+
+ if(c==PEOF) /* 2^8+2 */
+ return CENDFILE;
+ if(c==PEOA) /* 2^8+1 */
+ indx = 0;
+ else if(U_C(c)>=U_C(CTLESC) && U_C(c)<=U_C(CTLQUOTEMARK))
+ return CCTL;
+ else {
+ s = strchr(spec_symbls, c);
+ if(s==0)
+ return CWORD;
+ indx = syntax_index_table[(s-spec_symbls)];
+ }
+ return S_I_T[indx][syntax];
+}
+#endif /* ASH_OPTIMIZE_FOR_SIZE */
+
/* first char is indicating which tokens mark the end of a list */
static const char *const tokname_array[] = {
"\1end of file",
@@ -4325,7 +4376,7 @@
static void expbackq (union node *, int, int);
static int subevalvar (char *, char *, int, int, int, int, int);
static int varisset (char *, int);
-static void strtodest (const char *, const char *, int);
+static void strtodest (const char *, int, int);
static void varvalue (char *, int, int);
static void recordregion (int, int, int);
static void removerecordregions (int);
@@ -4819,7 +4870,7 @@
struct nodelist *volatile saveargbackq;
char lastc;
int startloc = dest - stackblock();
- char const *syntax = quoted? DQSYNTAX : BASESYNTAX;
+ int syntax = quoted ? DQSYNTAX : BASESYNTAX;
volatile int saveherefd;
int quotes = flag & (EXP_FULL | EXP_CASE);
struct jmploc jmploc;
@@ -4876,7 +4927,7 @@
}
lastc = *p++;
if (lastc != '\0') {
- if (quotes && syntax[(int)lastc] == CCTL)
+ if (quotes && SIT(lastc, syntax) == CCTL)
STPUTC(CTLESC, dest);
STPUTC(lastc, dest);
}
@@ -5077,10 +5128,10 @@
*/
static void
-strtodest(const char *p, const char *syntax, int quotes)
+strtodest(const char *p, int syntax, int quotes)
{
while (*p) {
- if (quotes && syntax[(int) *p] == CCTL)
+ if (quotes && SIT(*p, syntax) == CCTL)
STPUTC(CTLESC, expdest);
STPUTC(*p++, expdest);
}
@@ -5102,7 +5153,7 @@
int sep;
int sepq = 0;
char **ap;
- char const *syntax;
+ int syntax;
int allow_split = flags & EXP_FULL;
int quotes = flags & (EXP_FULL | EXP_CASE);
@@ -5137,7 +5188,7 @@
case '*':
sep = ifsset() ? ifsval()[0] : ' ';
if (quotes) {
- sepq = syntax[(int) sep] == CCTL;
+ sepq = SIT(sep, syntax) == CCTL;
}
param:
for (ap = shellparam.p ; (p = *ap++) != NULL ; ) {
@@ -9250,7 +9301,7 @@
static char peektoken (void);
static int readtoken (void);
static int xxreadtoken (void);
-static int readtoken1(int, char const *, const char *, int);
+static int readtoken1 (int, int, const char *, int);
static int noexpand (const char *);
static void synexpect (int) __attribute__((noreturn));
static void synerror (const char *) __attribute__((noreturn));
@@ -10004,7 +10055,7 @@
#define PARSEARITH() {goto parsearith; parsearith_return:;}
static int
-readtoken1(int firstc, char const *syntax, const char *eofmark, int striptabs)
+readtoken1(int firstc, int syntax, const char *eofmark, int striptabs)
{
int c = firstc;
char *out;
@@ -10018,7 +10069,7 @@
int parenlevel; /* levels of parens in arithmetic */
int dqvarnest; /* levels of variables expansion within double quotes */
int oldstyle;
- char const *prevsyntax; /* syntax before arithmetic */
+ int prevsyntax; /* syntax before arithmetic */
#if __GNUC__
/* Avoid longjmp clobbering */
(void) &out;
@@ -10049,7 +10100,7 @@
CHECKEND(); /* set c to PEOF if at end of here document */
for (;;) { /* until end of line or end of word */
CHECKSTRSPACE(3, out); /* permit 3 calls to USTPUTC */
- switch(syntax[c]) {
+ switch(SIT(c, syntax)) {
case CNL: /* '\n' */
if (syntax == BASESYNTAX)
goto endword; /* exit outer loop */
@@ -10084,7 +10135,7 @@
if (dblquote && c != '\\' && c != '`' && c != '$'
&& (c != '"' || eofmark != NULL))
USTPUTC('\\', out);
- if (SQSYNTAX[c] == CCTL)
+ if (SIT(c, SQSYNTAX) == CCTL)
USTPUTC(CTLESC, out);
else if (eofmark == NULL)
USTPUTC(CTLQUOTEMARK, out);
@@ -10328,6 +10379,7 @@
int flags;
char *p;
+
c = pgetc();
if (
c <= PEOA ||
@@ -10623,7 +10675,7 @@
continue;
if (c == CTLESC)
p++;
- else if (BASESYNTAX[(int)c] == CCTL)
+ else if (SIT(c, BASESYNTAX) == CCTL)
return 0;
}
return 1;
More information about the busybox
mailing list