mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-09 14:21:03 +03:00
Performance optimization in the JSON parser.
FossilOrigin-Name: 5a88ba743f55d45b1c0ce0090bb3b396bcf7fcf7b3bcb989aaf30b8bb772599e
This commit is contained in:
33
src/json.c
33
src/json.c
@@ -1075,19 +1075,35 @@ json_parse_restart:
|
||||
if( z[j]==':' ){
|
||||
j++;
|
||||
}else{
|
||||
if( fast_isspace(z[j]) ){
|
||||
do{ j++; }while( fast_isspace(z[j]) );
|
||||
if( z[j]==':' ){
|
||||
j++;
|
||||
goto parse_object_value;
|
||||
}
|
||||
}
|
||||
x = jsonParseValue(pParse, j);
|
||||
if( x!=(-5) ) return -1;
|
||||
j = pParse->iErr+1;
|
||||
}
|
||||
parse_object_value:
|
||||
x = jsonParseValue(pParse, j);
|
||||
pParse->iDepth--;
|
||||
if( x<0 ) return -1;
|
||||
if( x<=0 ) return -1;
|
||||
j = x;
|
||||
if( z[j]==',' ){
|
||||
continue;
|
||||
}else if( z[j]=='}' ){
|
||||
break;
|
||||
}else{
|
||||
if( fast_isspace(z[j]) ){
|
||||
do{ j++; }while( fast_isspace(z[j]) );
|
||||
if( z[j]==',' ){
|
||||
continue;
|
||||
}else if( z[j]=='}' ){
|
||||
break;
|
||||
}
|
||||
}
|
||||
x = jsonParseValue(pParse, j);
|
||||
if( x==(-4) ){
|
||||
j = pParse->iErr;
|
||||
@@ -1112,7 +1128,7 @@ json_parse_restart:
|
||||
if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1;
|
||||
x = jsonParseValue(pParse, j);
|
||||
pParse->iDepth--;
|
||||
if( x<0 ){
|
||||
if( x<=0 ){
|
||||
if( x==(-3) ){
|
||||
j = pParse->iErr;
|
||||
if( pParse->nNode!=(u32)iThis+1 ) pParse->has5 = 1;
|
||||
@@ -1126,6 +1142,14 @@ json_parse_restart:
|
||||
}else if( z[j]==']' ){
|
||||
break;
|
||||
}else{
|
||||
if( fast_isspace(z[j]) ){
|
||||
do{ j++; }while( fast_isspace(z[j]) );
|
||||
if( z[j]==',' ){
|
||||
continue;
|
||||
}else if( z[j]==']' ){
|
||||
break;
|
||||
}
|
||||
}
|
||||
x = jsonParseValue(pParse, j);
|
||||
if( x==(-4) ){
|
||||
j = pParse->iErr;
|
||||
@@ -1378,7 +1402,10 @@ static int jsonParse(
|
||||
while( fast_isspace(zJson[i]) ) i++;
|
||||
if( zJson[i] ){
|
||||
i += json5Whitespace(&zJson[i]);
|
||||
if( zJson[i] ) return -1;
|
||||
if( zJson[i] ){
|
||||
jsonParseReset(pParse);
|
||||
return 1;
|
||||
}
|
||||
pParse->has5 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user