diff options
author | drh <> | 2023-04-27 19:30:53 +0000 |
---|---|---|
committer | drh <> | 2023-04-27 19:30:53 +0000 |
commit | ae31f48826a250096945ab1494dad4c1c30852ee (patch) | |
tree | 76830bad31d244ec119ba67602bde7114875ae45 /src/json.c | |
parent | 1371df21178ff21728a2d06582ac849aefdb0159 (diff) | |
download | sqlite-ae31f48826a250096945ab1494dad4c1c30852ee.tar.gz sqlite-ae31f48826a250096945ab1494dad4c1c30852ee.zip |
Further optimizations to the JSON parser.
FossilOrigin-Name: bb8f1c16f244f893170f3d03bc445bd15fc337804c7c3e76c548397f5b95b39a
Diffstat (limited to 'src/json.c')
-rw-r--r-- | src/json.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/src/json.c b/src/json.c index ce33f83d5..72ec1af10 100644 --- a/src/json.c +++ b/src/json.c @@ -891,8 +891,8 @@ static int jsonParseAddNode( return jsonParseAddNodeExpand(pParse, eType, n, zContent); } p = &pParse->aNode[pParse->nNode]; - p->eType = (u8)eType; - p->jnFlags = 0; + p->eType = (u8)(eType & 0xff); + p->jnFlags = (u8)(eType >> 8); VVA( p->eU = zContent ? 1 : 0 ); p->n = n; p->u.zJContent = zContent; @@ -1092,10 +1092,7 @@ json_parse_restart: if( sqlite3Isalpha(z[j]) || z[j]=='_' || z[j]=='$' ){ int k; for(k=j+1; sqlite3Isalnum(z[k]) || z[k]=='_' || z[k]=='$'; k++){} - jsonParseAddNode(pParse, JSON_STRING, k-j, &z[j]); - if( !pParse->oom ){ - pParse->aNode[pParse->nNode-1].jnFlags = JNODE_RAW; - } + jsonParseAddNode(pParse, JSON_STRING | (JNODE_RAW<<8), k-j, &z[j]); pParse->has5 = 1; x = k; }else{ @@ -1239,8 +1236,7 @@ json_parse_restart: } j++; } - jsonParseAddNode(pParse, JSON_STRING, j+1-i, &z[i]); - if( !pParse->oom ) pParse->aNode[pParse->nNode-1].jnFlags = jnFlags; + jsonParseAddNode(pParse, JSON_STRING | (jnFlags<<8), j+1-i, &z[i]); return j+1; } case 'n': { @@ -1395,10 +1391,7 @@ json_parse_restart: } } parse_number_finish: - jsonParseAddNode(pParse, seenDP, j - i, &z[i]); - if( jnFlags && !pParse->oom ){ - pParse->aNode[pParse->nNode-1].jnFlags = jnFlags; - } + jsonParseAddNode(pParse, seenDP | (jnFlags<<8), j - i, &z[i]); return j; } case 'N': { |