mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-01 06:27:03 +03:00
Increase the size of the yy_lookahead table so that it is never necessary to
down bounds checking on the index. FossilOrigin-Name: bafd872398e58766e996963372c7acc03a1e20a6d39a3867ca45d3ea0ed2ac1d
This commit is contained in:
19
tool/lemon.c
19
tool/lemon.c
@ -4153,6 +4153,7 @@ void ReportTable(
|
||||
struct rule *rp;
|
||||
struct acttab *pActtab;
|
||||
int i, j, n, sz;
|
||||
int nLookAhead;
|
||||
int szActionType; /* sizeof(YYACTIONTYPE) */
|
||||
int szCodeType; /* sizeof(YYCODETYPE) */
|
||||
const char *name;
|
||||
@ -4403,13 +4404,29 @@ void ReportTable(
|
||||
if( la<0 ) la = lemp->nsymbol;
|
||||
if( j==0 ) fprintf(out," /* %5d */ ", i);
|
||||
fprintf(out, " %4d,", la);
|
||||
if( j==9 || i==n-1 ){
|
||||
if( j==9 ){
|
||||
fprintf(out, "\n"); lineno++;
|
||||
j = 0;
|
||||
}else{
|
||||
j++;
|
||||
}
|
||||
}
|
||||
/* Add extra entries to the end of the yy_lookahead[] table so that
|
||||
** yy_shift_ofst[]+iToken will always be a valid index into the array,
|
||||
** even for the largest possible value of yy_shift_ofst[] and iToken. */
|
||||
nLookAhead = lemp->nterminal + lemp->nactiontab;
|
||||
while( i<nLookAhead ){
|
||||
if( j==0 ) fprintf(out," /* %5d */ ", i);
|
||||
fprintf(out, " %4d,", lemp->nterminal);
|
||||
if( j==9 ){
|
||||
fprintf(out, "\n"); lineno++;
|
||||
j = 0;
|
||||
}else{
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if( j>0 ) fprintf(out, "\n"); lineno++;
|
||||
fprintf(out, "};\n"); lineno++;
|
||||
|
||||
/* Output the yy_shift_ofst[] table */
|
||||
|
@ -521,11 +521,13 @@ static YYACTIONTYPE yy_find_shift_action(
|
||||
do{
|
||||
i = yy_shift_ofst[stateno];
|
||||
assert( i>=0 );
|
||||
/* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */
|
||||
assert( i<=YY_ACTTAB_COUNT );
|
||||
assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD );
|
||||
assert( iLookAhead!=YYNOCODE );
|
||||
assert( iLookAhead < YYNTOKEN );
|
||||
i += iLookAhead;
|
||||
if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){
|
||||
assert( i<(int)YY_NLOOKAHEAD );
|
||||
if( yy_lookahead[i]!=iLookAhead ){
|
||||
#ifdef YYFALLBACK
|
||||
YYCODETYPE iFallback; /* Fallback token */
|
||||
if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
|
||||
|
Reference in New Issue
Block a user