-C Honor\sthe\sSQLITE_OPEN_READONLY\sflag\seven\son\sa\s:memory:\sor\stemporary\sdatabase,\neven\sthough\ssuch\sa\sdatabase\sis\spointless.\s\sTicket\s#3908.\s(CVS\s6748)
-D 2009-06-11T17:32:45
+C Modifications\sto\sthe\sparser\sto\seliminate\sunreachable\scode.\s(CVS\s6749)
+D 2009-06-12T02:27:15
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 8b8fb7823264331210cddf103831816c286ba446
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/os_win.c 725c38a524d168ce280446ad8761d731bc516405
F src/pager.c efdd56a49622fe87d5cf4b6e69aeb62b45bcb9b0
F src/pager.h 73f481a308a873ccd626d97331c081db3b53e2e5
-F src/parse.y 07690df997d50b3fdb5e5121e5a27f1a080db13d
+F src/parse.y 5d6ab0304cdbe6f156e763adba9b95bac2800a10
F src/pcache.c 395f752a13574120bd7513a400ba02a265aaa76d
F src/pcache.h 9b927ccc5a538e31b4c3bc7eec4f976db42a1324
F src/pcache1.c 97e7e8e6e34026fb43b47d08532b0c02e959c26c
F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
F tool/genfkey.test 405a43d54f1646bfaa7a84b03bb959aef62a3a49
F tool/lemon.c 1a94e70103e59f20df8f81539a453629df2aa523
-F tool/lempar.c aeba88b8566ff66f8a67c96b3eb2dd95e7d8908d
+F tool/lempar.c d2fbe360eb398075947ba6de9197f99247d3d5a8
F tool/mkkeywordhash.c 511a848b2ac7a3d93f36adc1e1086b4c5741224b
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
-P 1fdb3e1e9af0672072f133dde06594fea2ef13c5
-R 823b08d915257a93dc411921f9d74d82
+P 73ba841ac1ed39fb09b3917bafe0ce349e88eb04
+R 75fd71147dd2bc566349956acaaf3bc9
U drh
-Z ad0e99c3cc9d6218240a0d7748e56426
+Z c4d949dc1090f86c65a60e0c95668a95
-73ba841ac1ed39fb09b3917bafe0ce349e88eb04
\ No newline at end of file
+457e0b245b1833c0d297bc6f4ff9785e6a2cee02
\ No newline at end of file
** the parser. Lemon will also generate a header file containing
** numeric codes for all of the tokens.
**
-** @(#) $Id: parse.y,v 1.278 2009/05/28 01:00:55 drh Exp $
+** @(#) $Id: parse.y,v 1.279 2009/06/12 02:27:15 drh Exp $
*/
// All token codes are small integers with #defines that begin with "TK_"
%include {
#include "sqliteInt.h"
+/*
+** Disable all error recovery processing in the parser push-down
+** automaton.
+*/
+#define YYNOERRORRECOVERY 1
+
/*
** An instance of this structure holds information about the
** LIMIT clause of a SELECT statement.
//
stl_prefix(A) ::= seltablist(X) joinop(Y). {
A = X;
- if( A && A->nSrc>0 ) A->a[A->nSrc-1].jointype = (u8)Y;
+ if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].jointype = (u8)Y;
}
stl_prefix(A) ::= . {A = 0;}
seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) indexed_opt(I) on_opt(N) using_opt(U). {
}
sortlist(A) ::= sortitem(Y) sortorder(Z). {
A = sqlite3ExprListAppend(pParse,0,Y);
- if( A && A->a ) A->a[0].sortOrder = (u8)Z;
+ if( A && ALWAYS(A->a) ) A->a[0].sortOrder = (u8)Z;
}
sortitem(A) ::= expr(X). {A = X.pExpr;}
/*
** The following code executes when the parse fails
*/
+#ifndef YYNOERRORRECOVERY
static void yy_parse_failed(
yyParser *yypParser /* The parser */
){
%%
ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
}
+#endif /* YYNOERRORRECOVERY */
/*
** The following code executes when a syntax error first occurs.
}
yypParser->yyerrcnt = 3;
yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+ /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+ ** do any kind of error recovery. Instead, simply invoke the syntax
+ ** error routine and continue going as if nothing had happened.
+ **
+ ** 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_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+ yymajor = YYNOCODE;
+
#else /* YYERRORSYMBOL is not defined */
/* This is what we do if the grammar does not define ERROR:
**