summaryrefslogtreecommitdiff
path: root/jsmn.c
diff options
context:
space:
mode:
authorSerge A. Zaitsev <devnull@localhost>2010-11-15 17:58:50 +0200
committerSerge A. Zaitsev <devnull@localhost>2010-11-15 17:58:50 +0200
commitb0e73ec44dc2693b6be327c01b905193f153df4c (patch)
tree9b38258ac02434a748ee92104e15df19797eb2df /jsmn.c
parenta70dab5cf97ba4f23b0d1582948a607cbae713fa (diff)
Design: objects and arrays are different types now
Diffstat (limited to 'jsmn.c')
-rw-r--r--jsmn.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/jsmn.c b/jsmn.c
index 4e2e405ba..bdaa49c5e 100644
--- a/jsmn.c
+++ b/jsmn.c
@@ -103,14 +103,15 @@ int jsmn_parse(const unsigned char *js, jsontok_t *tokens, size_t num_tokens, in
struct jsmn_params params;
int r;
+ unsigned int i;
const unsigned char *p;
+ jsontype_t type;
jsontok_t *cur_token;
params.num_tokens = num_tokens;
params.tokens = tokens;
params.errpos = errpos;
- unsigned int i;
for (i = 0; i<num_tokens; i++) {
tokens[i].start = tokens[i].end = -1;
tokens[i].type = JSON_OTHER;
@@ -119,11 +120,13 @@ int jsmn_parse(const unsigned char *js, jsontok_t *tokens, size_t num_tokens, in
for (p = js; *p != '\0'; ) {
switch (*p) {
case '{': case '[':
- cur_token = jsmn_token_start(&params, JSON_OBJECT, p - js);
+ type = (*p == '{' ? JSON_OBJECT : JSON_ARRAY);
+ cur_token = jsmn_token_start(&params, type, p - js);
cur_token->start = p - js;
break;
case '}' : case ']':
- cur_token = jsmn_token_end(&params, JSON_OBJECT, p - js + 1);
+ type = (*p == '}' ? JSON_OBJECT : JSON_ARRAY);
+ cur_token = jsmn_token_end(&params, type, p - js + 1);
cur_token->end = p - js + 1;
break;