[BusyBox] further ash size reduction

Vladimir N. Oleynik dzo at simtreas.ru
Thu Aug 9 06:19:48 UTC 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