| Index: third_party/sqlite/src/tool/lempar.c
 | 
| diff --git a/third_party/sqlite/src/tool/lempar.c b/third_party/sqlite/src/tool/lempar.c
 | 
| index 312507e5f13d040afff652285c08ac469ae0c5c0..21ed9d79abe3fd9b5d61bc5d709c675146e02feb 100644
 | 
| --- a/third_party/sqlite/src/tool/lempar.c
 | 
| +++ b/third_party/sqlite/src/tool/lempar.c
 | 
| @@ -87,10 +87,6 @@
 | 
|  %%
 | 
|  /************* End control #defines *******************************************/
 | 
|  
 | 
| -/* The yyzerominor constant is used to initialize instances of
 | 
| -** YYMINORTYPE objects to zero. */
 | 
| -static const YYMINORTYPE yyzerominor = { 0 };
 | 
| -
 | 
|  /* Define the yytestcase() macro to be a no-op if is not already defined
 | 
|  ** otherwise.
 | 
|  **
 | 
| @@ -120,7 +116,7 @@ static const YYMINORTYPE yyzerominor = { 0 };
 | 
|  **
 | 
|  **   N between YY_MIN_REDUCE            Reduce by rule N-YY_MIN_REDUCE
 | 
|  **     and YY_MAX_REDUCE
 | 
| -
 | 
| +**
 | 
|  **   N == YY_ERROR_ACTION               A syntax error has occurred.
 | 
|  **
 | 
|  **   N == YY_ACCEPT_ACTION              The parser accepts its input.
 | 
| @@ -129,16 +125,20 @@ static const YYMINORTYPE yyzerominor = { 0 };
 | 
|  **                                      slots in the yy_action[] table.
 | 
|  **
 | 
|  ** The action table is constructed as a single large table named yy_action[].
 | 
| -** Given state S and lookahead X, the action is computed as
 | 
| +** Given state S and lookahead X, the action is computed as either:
 | 
|  **
 | 
| -**      yy_action[ yy_shift_ofst[S] + X ]
 | 
| +**    (A)   N = yy_action[ yy_shift_ofst[S] + X ]
 | 
| +**    (B)   N = yy_default[S]
 | 
|  **
 | 
| -** If the index value yy_shift_ofst[S]+X is out of range or if the value
 | 
| -** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
 | 
| -** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
 | 
| -** and that yy_default[S] should be used instead.  
 | 
| +** The (A) formula is preferred.  The B formula is used instead if:
 | 
| +**    (1)  The yy_shift_ofst[S]+X value is out of range, or
 | 
| +**    (2)  yy_lookahead[yy_shift_ofst[S]+X] is not equal to X, or
 | 
| +**    (3)  yy_shift_ofst[S] equal YY_SHIFT_USE_DFLT.
 | 
| +** (Implementation note: YY_SHIFT_USE_DFLT is chosen so that
 | 
| +** YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X.
 | 
| +** Hence only tests (1) and (2) need to be evaluated.)
 | 
|  **
 | 
| -** The formula above is for computing the action when the lookahead is
 | 
| +** The formulas above are for computing the action when the lookahead is
 | 
|  ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
 | 
|  ** a reduce action) then the yy_reduce_ofst[] array is used in place of
 | 
|  ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
 | 
| @@ -207,15 +207,18 @@ typedef struct yyStackEntry yyStackEntry;
 | 
|  /* The state of the parser is completely contained in an instance of
 | 
|  ** the following structure */
 | 
|  struct yyParser {
 | 
| -  int yyidx;                    /* Index of top element in stack */
 | 
| +  yyStackEntry *yytos;          /* Pointer to top element of the stack */
 | 
|  #ifdef YYTRACKMAXSTACKDEPTH
 | 
| -  int yyidxMax;                 /* Maximum value of yyidx */
 | 
| +  int yyhwm;                    /* High-water mark of the stack */
 | 
|  #endif
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
|    int yyerrcnt;                 /* Shifts left before out of the error */
 | 
| +#endif
 | 
|    ParseARG_SDECL                /* A place to hold %extra_argument */
 | 
|  #if YYSTACKDEPTH<=0
 | 
|    int yystksz;                  /* Current side of the stack */
 | 
|    yyStackEntry *yystack;        /* The parser's stack */
 | 
| +  yyStackEntry yystk0;          /* First stack entry */
 | 
|  #else
 | 
|    yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
 | 
|  #endif
 | 
| @@ -273,24 +276,34 @@ static const char *const yyRuleName[] = {
 | 
|  
 | 
|  #if YYSTACKDEPTH<=0
 | 
|  /*
 | 
| -** Try to increase the size of the parser stack.
 | 
| +** Try to increase the size of the parser stack.  Return the number
 | 
| +** of errors.  Return 0 on success.
 | 
|  */
 | 
| -static void yyGrowStack(yyParser *p){
 | 
| +static int yyGrowStack(yyParser *p){
 | 
|    int newSize;
 | 
| +  int idx;
 | 
|    yyStackEntry *pNew;
 | 
|  
 | 
|    newSize = p->yystksz*2 + 100;
 | 
| -  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
 | 
| +  idx = p->yytos ? (int)(p->yytos - p->yystack) : 0;
 | 
| +  if( p->yystack==&p->yystk0 ){
 | 
| +    pNew = malloc(newSize*sizeof(pNew[0]));
 | 
| +    if( pNew ) pNew[0] = p->yystk0;
 | 
| +  }else{
 | 
| +    pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
 | 
| +  }
 | 
|    if( pNew ){
 | 
|      p->yystack = pNew;
 | 
| -    p->yystksz = newSize;
 | 
| +    p->yytos = &p->yystack[idx];
 | 
|  #ifndef NDEBUG
 | 
|      if( yyTraceFILE ){
 | 
| -      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
 | 
| -              yyTracePrompt, p->yystksz);
 | 
| +      fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
 | 
| +              yyTracePrompt, p->yystksz, newSize);
 | 
|      }
 | 
|  #endif
 | 
| +    p->yystksz = newSize;
 | 
|    }
 | 
| +  return pNew==0; 
 | 
|  }
 | 
|  #endif
 | 
|  
 | 
| @@ -303,6 +316,31 @@ static void yyGrowStack(yyParser *p){
 | 
|  # define YYMALLOCARGTYPE size_t
 | 
|  #endif
 | 
|  
 | 
| +/* Initialize a new parser that has already been allocated.
 | 
| +*/
 | 
| +void ParseInit(void *yypParser){
 | 
| +  yyParser *pParser = (yyParser*)yypParser;
 | 
| +#ifdef YYTRACKMAXSTACKDEPTH
 | 
| +  pParser->yyhwm = 0;
 | 
| +#endif
 | 
| +#if YYSTACKDEPTH<=0
 | 
| +  pParser->yytos = NULL;
 | 
| +  pParser->yystack = NULL;
 | 
| +  pParser->yystksz = 0;
 | 
| +  if( yyGrowStack(pParser) ){
 | 
| +    pParser->yystack = &pParser->yystk0;
 | 
| +    pParser->yystksz = 1;
 | 
| +  }
 | 
| +#endif
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
| +  pParser->yyerrcnt = -1;
 | 
| +#endif
 | 
| +  pParser->yytos = pParser->yystack;
 | 
| +  pParser->yystack[0].stateno = 0;
 | 
| +  pParser->yystack[0].major = 0;
 | 
| +}
 | 
| +
 | 
| +#ifndef Parse_ENGINEALWAYSONSTACK
 | 
|  /* 
 | 
|  ** This function allocates a new parser.
 | 
|  ** The only argument is a pointer to a function which works like
 | 
| @@ -318,19 +356,11 @@ static void yyGrowStack(yyParser *p){
 | 
|  void *ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){
 | 
|    yyParser *pParser;
 | 
|    pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) );
 | 
| -  if( pParser ){
 | 
| -    pParser->yyidx = -1;
 | 
| -#ifdef YYTRACKMAXSTACKDEPTH
 | 
| -    pParser->yyidxMax = 0;
 | 
| -#endif
 | 
| -#if YYSTACKDEPTH<=0
 | 
| -    pParser->yystack = NULL;
 | 
| -    pParser->yystksz = 0;
 | 
| -    yyGrowStack(pParser);
 | 
| -#endif
 | 
| -  }
 | 
| +  if( pParser ) ParseInit(pParser);
 | 
|    return pParser;
 | 
|  }
 | 
| +#endif /* Parse_ENGINEALWAYSONSTACK */
 | 
| +
 | 
|  
 | 
|  /* The following function deletes the "minor type" or semantic value
 | 
|  ** associated with a symbol.  The symbol can be either a terminal
 | 
| @@ -371,8 +401,9 @@ static void yy_destructor(
 | 
|  */
 | 
|  static void yy_pop_parser_stack(yyParser *pParser){
 | 
|    yyStackEntry *yytos;
 | 
| -  assert( pParser->yyidx>=0 );
 | 
| -  yytos = &pParser->yystack[pParser->yyidx--];
 | 
| +  assert( pParser->yytos!=0 );
 | 
| +  assert( pParser->yytos > pParser->yystack );
 | 
| +  yytos = pParser->yytos--;
 | 
|  #ifndef NDEBUG
 | 
|    if( yyTraceFILE ){
 | 
|      fprintf(yyTraceFILE,"%sPopping %s\n",
 | 
| @@ -383,6 +414,18 @@ static void yy_pop_parser_stack(yyParser *pParser){
 | 
|    yy_destructor(pParser, yytos->major, &yytos->minor);
 | 
|  }
 | 
|  
 | 
| +/*
 | 
| +** Clear all secondary memory allocations from the parser
 | 
| +*/
 | 
| +void ParseFinalize(void *p){
 | 
| +  yyParser *pParser = (yyParser*)p;
 | 
| +  while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
 | 
| +#if YYSTACKDEPTH<=0
 | 
| +  if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack);
 | 
| +#endif
 | 
| +}
 | 
| +
 | 
| +#ifndef Parse_ENGINEALWAYSONSTACK
 | 
|  /* 
 | 
|  ** Deallocate and destroy a parser.  Destructors are called for
 | 
|  ** all stack elements before shutting the parser down.
 | 
| @@ -395,16 +438,13 @@ void ParseFree(
 | 
|    void *p,                    /* The parser to be deleted */
 | 
|    void (*freeProc)(void*)     /* Function used to reclaim memory */
 | 
|  ){
 | 
| -  yyParser *pParser = (yyParser*)p;
 | 
|  #ifndef YYPARSEFREENEVERNULL
 | 
| -  if( pParser==0 ) return;
 | 
| -#endif
 | 
| -  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
 | 
| -#if YYSTACKDEPTH<=0
 | 
| -  free(pParser->yystack);
 | 
| +  if( p==0 ) return;
 | 
|  #endif
 | 
| -  (*freeProc)((void*)pParser);
 | 
| +  ParseFinalize(p);
 | 
| +  (*freeProc)(p);
 | 
|  }
 | 
| +#endif /* Parse_ENGINEALWAYSONSTACK */
 | 
|  
 | 
|  /*
 | 
|  ** Return the peak depth of the stack for a parser.
 | 
| @@ -412,7 +452,7 @@ void ParseFree(
 | 
|  #ifdef YYTRACKMAXSTACKDEPTH
 | 
|  int ParseStackPeak(void *p){
 | 
|    yyParser *pParser = (yyParser*)p;
 | 
| -  return pParser->yyidxMax;
 | 
| +  return pParser->yyhwm;
 | 
|  }
 | 
|  #endif
 | 
|  
 | 
| @@ -420,61 +460,58 @@ int ParseStackPeak(void *p){
 | 
|  ** Find the appropriate action for a parser given the terminal
 | 
|  ** look-ahead token iLookAhead.
 | 
|  */
 | 
| -static int yy_find_shift_action(
 | 
| +static unsigned int yy_find_shift_action(
 | 
|    yyParser *pParser,        /* The parser */
 | 
|    YYCODETYPE iLookAhead     /* The look-ahead token */
 | 
|  ){
 | 
|    int i;
 | 
| -  int stateno = pParser->yystack[pParser->yyidx].stateno;
 | 
| +  int stateno = pParser->yytos->stateno;
 | 
|   
 | 
|    if( stateno>=YY_MIN_REDUCE ) return stateno;
 | 
|    assert( stateno <= YY_SHIFT_COUNT );
 | 
|    do{
 | 
|      i = yy_shift_ofst[stateno];
 | 
| -    if( i==YY_SHIFT_USE_DFLT ) return yy_default[stateno];
 | 
|      assert( iLookAhead!=YYNOCODE );
 | 
|      i += iLookAhead;
 | 
|      if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
 | 
| -      if( iLookAhead>0 ){
 | 
|  #ifdef YYFALLBACK
 | 
| -        YYCODETYPE iFallback;            /* Fallback token */
 | 
| -        if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
 | 
| -               && (iFallback = yyFallback[iLookAhead])!=0 ){
 | 
| +      YYCODETYPE iFallback;            /* Fallback token */
 | 
| +      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
 | 
| +             && (iFallback = yyFallback[iLookAhead])!=0 ){
 | 
|  #ifndef NDEBUG
 | 
| -          if( yyTraceFILE ){
 | 
| -            fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
 | 
| -               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
 | 
| -          }
 | 
| -#endif
 | 
| -          assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */
 | 
| -          iLookAhead = iFallback;
 | 
| -          continue;
 | 
| +        if( yyTraceFILE ){
 | 
| +          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
 | 
| +             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
 | 
|          }
 | 
|  #endif
 | 
| +        assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */
 | 
| +        iLookAhead = iFallback;
 | 
| +        continue;
 | 
| +      }
 | 
| +#endif
 | 
|  #ifdef YYWILDCARD
 | 
| -        {
 | 
| -          int j = i - iLookAhead + YYWILDCARD;
 | 
| -          if( 
 | 
| +      {
 | 
| +        int j = i - iLookAhead + YYWILDCARD;
 | 
| +        if( 
 | 
|  #if YY_SHIFT_MIN+YYWILDCARD<0
 | 
| -            j>=0 &&
 | 
| +          j>=0 &&
 | 
|  #endif
 | 
|  #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
 | 
| -            j<YY_ACTTAB_COUNT &&
 | 
| +          j<YY_ACTTAB_COUNT &&
 | 
|  #endif
 | 
| -            yy_lookahead[j]==YYWILDCARD
 | 
| -          ){
 | 
| +          yy_lookahead[j]==YYWILDCARD && iLookAhead>0
 | 
| +        ){
 | 
|  #ifndef NDEBUG
 | 
| -            if( yyTraceFILE ){
 | 
| -              fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
 | 
| -                 yyTracePrompt, yyTokenName[iLookAhead],
 | 
| -                 yyTokenName[YYWILDCARD]);
 | 
| -            }
 | 
| -#endif /* NDEBUG */
 | 
| -            return yy_action[j];
 | 
| +          if( yyTraceFILE ){
 | 
| +            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
 | 
| +               yyTracePrompt, yyTokenName[iLookAhead],
 | 
| +               yyTokenName[YYWILDCARD]);
 | 
|            }
 | 
| +#endif /* NDEBUG */
 | 
| +          return yy_action[j];
 | 
|          }
 | 
| -#endif /* YYWILDCARD */
 | 
|        }
 | 
| +#endif /* YYWILDCARD */
 | 
|        return yy_default[stateno];
 | 
|      }else{
 | 
|        return yy_action[i];
 | 
| @@ -516,15 +553,14 @@ static int yy_find_reduce_action(
 | 
|  /*
 | 
|  ** The following routine is called if the stack overflows.
 | 
|  */
 | 
| -static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
 | 
| +static void yyStackOverflow(yyParser *yypParser){
 | 
|     ParseARG_FETCH;
 | 
| -   yypParser->yyidx--;
 | 
|  #ifndef NDEBUG
 | 
|     if( yyTraceFILE ){
 | 
|       fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
 | 
|     }
 | 
|  #endif
 | 
| -   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
 | 
| +   while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
 | 
|     /* Here code is inserted which will execute if the parser
 | 
|     ** stack every overflows */
 | 
|  /******** Begin %stack_overflow code ******************************************/
 | 
| @@ -541,11 +577,11 @@ static void yyTraceShift(yyParser *yypParser, int yyNewState){
 | 
|    if( yyTraceFILE ){
 | 
|      if( yyNewState<YYNSTATE ){
 | 
|        fprintf(yyTraceFILE,"%sShift '%s', go to state %d\n",
 | 
| -         yyTracePrompt,yyTokenName[yypParser->yystack[yypParser->yyidx].major],
 | 
| +         yyTracePrompt,yyTokenName[yypParser->yytos->major],
 | 
|           yyNewState);
 | 
|      }else{
 | 
|        fprintf(yyTraceFILE,"%sShift '%s'\n",
 | 
| -         yyTracePrompt,yyTokenName[yypParser->yystack[yypParser->yyidx].major]);
 | 
| +         yyTracePrompt,yyTokenName[yypParser->yytos->major]);
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| @@ -560,33 +596,38 @@ static void yy_shift(
 | 
|    yyParser *yypParser,          /* The parser to be shifted */
 | 
|    int yyNewState,               /* The new state to shift in */
 | 
|    int yyMajor,                  /* The major token to shift in */
 | 
| -  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
 | 
| +  ParseTOKENTYPE yyMinor        /* The minor token to shift in */
 | 
|  ){
 | 
|    yyStackEntry *yytos;
 | 
| -  yypParser->yyidx++;
 | 
| +  yypParser->yytos++;
 | 
|  #ifdef YYTRACKMAXSTACKDEPTH
 | 
| -  if( yypParser->yyidx>yypParser->yyidxMax ){
 | 
| -    yypParser->yyidxMax = yypParser->yyidx;
 | 
| +  if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
 | 
| +    yypParser->yyhwm++;
 | 
| +    assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
 | 
|    }
 | 
|  #endif
 | 
|  #if YYSTACKDEPTH>0 
 | 
| -  if( yypParser->yyidx>=YYSTACKDEPTH ){
 | 
| -    yyStackOverflow(yypParser, yypMinor);
 | 
| +  if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH] ){
 | 
| +    yypParser->yytos--;
 | 
| +    yyStackOverflow(yypParser);
 | 
|      return;
 | 
|    }
 | 
|  #else
 | 
| -  if( yypParser->yyidx>=yypParser->yystksz ){
 | 
| -    yyGrowStack(yypParser);
 | 
| -    if( yypParser->yyidx>=yypParser->yystksz ){
 | 
| -      yyStackOverflow(yypParser, yypMinor);
 | 
| +  if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){
 | 
| +    if( yyGrowStack(yypParser) ){
 | 
| +      yypParser->yytos--;
 | 
| +      yyStackOverflow(yypParser);
 | 
|        return;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
| -  yytos = &yypParser->yystack[yypParser->yyidx];
 | 
| +  if( yyNewState > YY_MAX_SHIFT ){
 | 
| +    yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
 | 
| +  }
 | 
| +  yytos = yypParser->yytos;
 | 
|    yytos->stateno = (YYACTIONTYPE)yyNewState;
 | 
|    yytos->major = (YYCODETYPE)yyMajor;
 | 
| -  yytos->minor = *yypMinor;
 | 
| +  yytos->minor.yy0 = yyMinor;
 | 
|    yyTraceShift(yypParser, yyNewState);
 | 
|  }
 | 
|  
 | 
| @@ -608,24 +649,47 @@ static void yy_accept(yyParser*);  /* Forward Declaration */
 | 
|  */
 | 
|  static void yy_reduce(
 | 
|    yyParser *yypParser,         /* The parser */
 | 
| -  int yyruleno                 /* Number of the rule by which to reduce */
 | 
| +  unsigned int yyruleno        /* Number of the rule by which to reduce */
 | 
|  ){
 | 
|    int yygoto;                     /* The next state */
 | 
|    int yyact;                      /* The next action */
 | 
| -  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
 | 
|    yyStackEntry *yymsp;            /* The top of the parser's stack */
 | 
|    int yysize;                     /* Amount to pop the stack */
 | 
|    ParseARG_FETCH;
 | 
| -  yymsp = &yypParser->yystack[yypParser->yyidx];
 | 
| +  yymsp = yypParser->yytos;
 | 
|  #ifndef NDEBUG
 | 
| -  if( yyTraceFILE && yyruleno>=0 
 | 
| -        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
 | 
| +  if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
 | 
|      yysize = yyRuleInfo[yyruleno].nrhs;
 | 
|      fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt,
 | 
|        yyRuleName[yyruleno], yymsp[-yysize].stateno);
 | 
|    }
 | 
|  #endif /* NDEBUG */
 | 
| -  yygotominor = yyzerominor;
 | 
| +
 | 
| +  /* Check that the stack is large enough to grow by a single entry
 | 
| +  ** if the RHS of the rule is empty.  This ensures that there is room
 | 
| +  ** enough on the stack to push the LHS value */
 | 
| +  if( yyRuleInfo[yyruleno].nrhs==0 ){
 | 
| +#ifdef YYTRACKMAXSTACKDEPTH
 | 
| +    if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
 | 
| +      yypParser->yyhwm++;
 | 
| +      assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack));
 | 
| +    }
 | 
| +#endif
 | 
| +#if YYSTACKDEPTH>0 
 | 
| +    if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH-1] ){
 | 
| +      yyStackOverflow(yypParser);
 | 
| +      return;
 | 
| +    }
 | 
| +#else
 | 
| +    if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
 | 
| +      if( yyGrowStack(yypParser) ){
 | 
| +        yyStackOverflow(yypParser);
 | 
| +        return;
 | 
| +      }
 | 
| +      yymsp = yypParser->yytos;
 | 
| +    }
 | 
| +#endif
 | 
| +  }
 | 
|  
 | 
|    switch( yyruleno ){
 | 
|    /* Beginning here are the reduction cases.  A typical example
 | 
| @@ -640,29 +704,22 @@ static void yy_reduce(
 | 
|  %%
 | 
|  /********** End reduce actions ************************************************/
 | 
|    };
 | 
| -  assert( yyruleno>=0 && yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) );
 | 
| +  assert( yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) );
 | 
|    yygoto = yyRuleInfo[yyruleno].lhs;
 | 
|    yysize = yyRuleInfo[yyruleno].nrhs;
 | 
| -  yypParser->yyidx -= yysize;
 | 
|    yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
 | 
|    if( yyact <= YY_MAX_SHIFTREDUCE ){
 | 
| -    if( yyact>YY_MAX_SHIFT ) yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
 | 
| -    /* If the reduce action popped at least
 | 
| -    ** one element off the stack, then we can push the new element back
 | 
| -    ** onto the stack here, and skip the stack overflow test in yy_shift().
 | 
| -    ** That gives a significant speed improvement. */
 | 
| -    if( yysize ){
 | 
| -      yypParser->yyidx++;
 | 
| -      yymsp -= yysize-1;
 | 
| -      yymsp->stateno = (YYACTIONTYPE)yyact;
 | 
| -      yymsp->major = (YYCODETYPE)yygoto;
 | 
| -      yymsp->minor = yygotominor;
 | 
| -      yyTraceShift(yypParser, yyact);
 | 
| -    }else{
 | 
| -      yy_shift(yypParser,yyact,yygoto,&yygotominor);
 | 
| +    if( yyact>YY_MAX_SHIFT ){
 | 
| +      yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
 | 
|      }
 | 
| +    yymsp -= yysize-1;
 | 
| +    yypParser->yytos = yymsp;
 | 
| +    yymsp->stateno = (YYACTIONTYPE)yyact;
 | 
| +    yymsp->major = (YYCODETYPE)yygoto;
 | 
| +    yyTraceShift(yypParser, yyact);
 | 
|    }else{
 | 
|      assert( yyact == YY_ACCEPT_ACTION );
 | 
| +    yypParser->yytos -= yysize;
 | 
|      yy_accept(yypParser);
 | 
|    }
 | 
|  }
 | 
| @@ -680,7 +737,7 @@ static void yy_parse_failed(
 | 
|      fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
 | 
|    }
 | 
|  #endif
 | 
| -  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
 | 
| +  while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
 | 
|    /* Here code is inserted which will be executed whenever the
 | 
|    ** parser fails */
 | 
|  /************ Begin %parse_failure code ***************************************/
 | 
| @@ -696,10 +753,10 @@ static void yy_parse_failed(
 | 
|  static void yy_syntax_error(
 | 
|    yyParser *yypParser,           /* The parser */
 | 
|    int yymajor,                   /* The major type of the error token */
 | 
| -  YYMINORTYPE yyminor            /* The minor type of the error token */
 | 
| +  ParseTOKENTYPE yyminor         /* The minor type of the error token */
 | 
|  ){
 | 
|    ParseARG_FETCH;
 | 
| -#define TOKEN (yyminor.yy0)
 | 
| +#define TOKEN yyminor
 | 
|  /************ Begin %syntax_error code ****************************************/
 | 
|  %%
 | 
|  /************ End %syntax_error code ******************************************/
 | 
| @@ -718,7 +775,10 @@ static void yy_accept(
 | 
|      fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
 | 
|    }
 | 
|  #endif
 | 
| -  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
| +  yypParser->yyerrcnt = -1;
 | 
| +#endif
 | 
| +  assert( yypParser->yytos==yypParser->yystack );
 | 
|    /* Here code is inserted which will be executed whenever the
 | 
|    ** parser accepts */
 | 
|  /*********** Begin %parse_accept code *****************************************/
 | 
| @@ -753,7 +813,7 @@ void Parse(
 | 
|    ParseARG_PDECL               /* Optional %extra_argument parameter */
 | 
|  ){
 | 
|    YYMINORTYPE yyminorunion;
 | 
| -  int yyact;            /* The parser action. */
 | 
| +  unsigned int yyact;   /* The parser action. */
 | 
|  #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
 | 
|    int yyendofinput;     /* True if we are at the end of input */
 | 
|  #endif
 | 
| @@ -762,29 +822,8 @@ void Parse(
 | 
|  #endif
 | 
|    yyParser *yypParser;  /* The parser */
 | 
|  
 | 
| -  /* (re)initialize the parser, if necessary */
 | 
|    yypParser = (yyParser*)yyp;
 | 
| -  if( yypParser->yyidx<0 ){
 | 
| -#if YYSTACKDEPTH<=0
 | 
| -    if( yypParser->yystksz <=0 ){
 | 
| -      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
 | 
| -      yyminorunion = yyzerominor;
 | 
| -      yyStackOverflow(yypParser, &yyminorunion);
 | 
| -      return;
 | 
| -    }
 | 
| -#endif
 | 
| -    yypParser->yyidx = 0;
 | 
| -    yypParser->yyerrcnt = -1;
 | 
| -    yypParser->yystack[0].stateno = 0;
 | 
| -    yypParser->yystack[0].major = 0;
 | 
| -#ifndef NDEBUG
 | 
| -    if( yyTraceFILE ){
 | 
| -      fprintf(yyTraceFILE,"%sInitialize. Empty stack. State 0\n",
 | 
| -              yyTracePrompt);
 | 
| -    }
 | 
| -#endif
 | 
| -  }
 | 
| -  yyminorunion.yy0 = yyminor;
 | 
| +  assert( yypParser->yytos!=0 );
 | 
|  #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
 | 
|    yyendofinput = (yymajor==0);
 | 
|  #endif
 | 
| @@ -799,14 +838,16 @@ void Parse(
 | 
|    do{
 | 
|      yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
 | 
|      if( yyact <= YY_MAX_SHIFTREDUCE ){
 | 
| -      if( yyact > YY_MAX_SHIFT ) yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
 | 
| -      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
 | 
| +      yy_shift(yypParser,yyact,yymajor,yyminor);
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
|        yypParser->yyerrcnt--;
 | 
| +#endif
 | 
|        yymajor = YYNOCODE;
 | 
|      }else if( yyact <= YY_MAX_REDUCE ){
 | 
|        yy_reduce(yypParser,yyact-YY_MIN_REDUCE);
 | 
|      }else{
 | 
|        assert( yyact == YY_ERROR_ACTION );
 | 
| +      yyminorunion.yy0 = yyminor;
 | 
|  #ifdef YYERRORSYMBOL
 | 
|        int yymx;
 | 
|  #endif
 | 
| @@ -836,9 +877,9 @@ void Parse(
 | 
|        **
 | 
|        */
 | 
|        if( yypParser->yyerrcnt<0 ){
 | 
| -        yy_syntax_error(yypParser,yymajor,yyminorunion);
 | 
| +        yy_syntax_error(yypParser,yymajor,yyminor);
 | 
|        }
 | 
| -      yymx = yypParser->yystack[yypParser->yyidx].major;
 | 
| +      yymx = yypParser->yytos->major;
 | 
|        if( yymx==YYERRORSYMBOL || yyerrorhit ){
 | 
|  #ifndef NDEBUG
 | 
|          if( yyTraceFILE ){
 | 
| @@ -846,26 +887,26 @@ void Parse(
 | 
|               yyTracePrompt,yyTokenName[yymajor]);
 | 
|          }
 | 
|  #endif
 | 
| -        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
 | 
| +        yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion);
 | 
|          yymajor = YYNOCODE;
 | 
|        }else{
 | 
| -         while(
 | 
| -          yypParser->yyidx >= 0 &&
 | 
| -          yymx != YYERRORSYMBOL &&
 | 
| -          (yyact = yy_find_reduce_action(
 | 
| -                        yypParser->yystack[yypParser->yyidx].stateno,
 | 
| +        while( yypParser->yytos >= yypParser->yystack
 | 
| +            && yymx != YYERRORSYMBOL
 | 
| +            && (yyact = yy_find_reduce_action(
 | 
| +                        yypParser->yytos->stateno,
 | 
|                          YYERRORSYMBOL)) >= YY_MIN_REDUCE
 | 
|          ){
 | 
|            yy_pop_parser_stack(yypParser);
 | 
|          }
 | 
| -        if( yypParser->yyidx < 0 || yymajor==0 ){
 | 
| +        if( yypParser->yytos < yypParser->yystack || yymajor==0 ){
 | 
|            yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
 | 
|            yy_parse_failed(yypParser);
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
| +          yypParser->yyerrcnt = -1;
 | 
| +#endif
 | 
|            yymajor = YYNOCODE;
 | 
|          }else if( yymx!=YYERRORSYMBOL ){
 | 
| -          YYMINORTYPE u2;
 | 
| -          u2.YYERRSYMDT = 0;
 | 
| -          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
 | 
| +          yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor);
 | 
|          }
 | 
|        }
 | 
|        yypParser->yyerrcnt = 3;
 | 
| @@ -878,7 +919,7 @@ void Parse(
 | 
|        ** Applications can set this macro (for example inside %include) if
 | 
|        ** they intend to abandon the parse upon the first syntax error seen.
 | 
|        */
 | 
| -      yy_syntax_error(yypParser,yymajor,yyminorunion);
 | 
| +      yy_syntax_error(yypParser,yymajor, yyminor);
 | 
|        yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
 | 
|        yymajor = YYNOCODE;
 | 
|        
 | 
| @@ -893,24 +934,29 @@ void Parse(
 | 
|        ** three input tokens have been successfully shifted.
 | 
|        */
 | 
|        if( yypParser->yyerrcnt<=0 ){
 | 
| -        yy_syntax_error(yypParser,yymajor,yyminorunion);
 | 
| +        yy_syntax_error(yypParser,yymajor, yyminor);
 | 
|        }
 | 
|        yypParser->yyerrcnt = 3;
 | 
|        yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
 | 
|        if( yyendofinput ){
 | 
|          yy_parse_failed(yypParser);
 | 
| +#ifndef YYNOERRORRECOVERY
 | 
| +        yypParser->yyerrcnt = -1;
 | 
| +#endif
 | 
|        }
 | 
|        yymajor = YYNOCODE;
 | 
|  #endif
 | 
|      }
 | 
| -  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
 | 
| +  }while( yymajor!=YYNOCODE && yypParser->yytos>yypParser->yystack );
 | 
|  #ifndef NDEBUG
 | 
|    if( yyTraceFILE ){
 | 
| -    int i;
 | 
| +    yyStackEntry *i;
 | 
| +    char cDiv = '[';
 | 
|      fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt);
 | 
| -    for(i=1; i<=yypParser->yyidx; i++)
 | 
| -      fprintf(yyTraceFILE,"%c%s", i==1 ? '[' : ' ', 
 | 
| -              yyTokenName[yypParser->yystack[i].major]);
 | 
| +    for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){
 | 
| +      fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]);
 | 
| +      cDiv = ' ';
 | 
| +    }
 | 
|      fprintf(yyTraceFILE,"]\n");
 | 
|    }
 | 
|  #endif
 | 
| 
 |