aboutsummaryrefslogtreecommitdiff
path: root/src/json.c
diff options
context:
space:
mode:
authordrh <>2023-04-27 19:30:53 +0000
committerdrh <>2023-04-27 19:30:53 +0000
commitae31f48826a250096945ab1494dad4c1c30852ee (patch)
tree76830bad31d244ec119ba67602bde7114875ae45 /src/json.c
parent1371df21178ff21728a2d06582ac849aefdb0159 (diff)
downloadsqlite-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.c17
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': {