mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-09 14:21:03 +03:00
Allow underscores to occur in hex literals.
FossilOrigin-Name: 81a56229460cc5b6acfd3c3729fcf89ea3cccb546ca2b4f4035b140c60911e18
This commit is contained in:
@@ -437,58 +437,70 @@ int sqlite3GetToken(const unsigned char *z, int *tokenType){
|
||||
*tokenType = TK_INTEGER;
|
||||
#ifndef SQLITE_OMIT_HEX_INTEGER
|
||||
if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){
|
||||
for(i=3; sqlite3Isxdigit(z[i]); i++){}
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
for(i=0; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
for(i=3; 1; i++){
|
||||
if( sqlite3Isxdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isxdigit(z[i-1])
|
||||
&& sqlite3Isxdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else
|
||||
#endif
|
||||
{
|
||||
for(i=0; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifndef SQLITE_OMIT_FLOATING_POINT
|
||||
if( z[i]=='.' ){
|
||||
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
|
||||
for(i++; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
if( z[i]=='.' ){
|
||||
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
|
||||
for(i++; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if( (z[i]=='e' || z[i]=='E') &&
|
||||
( sqlite3Isdigit(z[i+1])
|
||||
|| ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
|
||||
)
|
||||
){
|
||||
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
|
||||
for(i+=2; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
if( (z[i]=='e' || z[i]=='E') &&
|
||||
( sqlite3Isdigit(z[i+1])
|
||||
|| ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
|
||||
)
|
||||
){
|
||||
if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
|
||||
for(i+=2; 1; i++){
|
||||
if( sqlite3Isdigit(z[i])==0 ){
|
||||
if( z[i]==SQLITE_DIGIT_SEPARATOR
|
||||
&& sqlite3Isdigit(z[i-1])
|
||||
&& sqlite3Isdigit(z[i+1])
|
||||
){
|
||||
*tokenType = TK_QNUMBER;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
while( IdChar(z[i]) ){
|
||||
*tokenType = TK_ILLEGAL;
|
||||
i++;
|
||||
|
||||
Reference in New Issue
Block a user