1. Serge Zaitsev
  2. jsmn

Commits

Serge A. Zaitsev  committed b4737a8

tokens array items are now being initialized during allocation, removed redundant code that significantly slowed down the parser

  • Participants
  • Parent commits 700bc7a
  • Branches default

Comments (0)

Files changed (2)

File jsmn.c

View file
  • Ignore whitespace
  */
 static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, 
 		jsmntok_t *tokens, size_t num_tokens) {
-	unsigned int i;
-	for (i = parser->toknext; i < num_tokens; i++) {
-		if (tokens[i].start == -1 && tokens[i].end == -1) {
-			parser->toknext = i + 1;
-			return &tokens[i];
-		}
+	jsmntok_t *tok;
+	if (parser->toknext >= num_tokens) {
+		return NULL;
 	}
-	return NULL;
+	tok = &tokens[parser->toknext++];
+	tok->start = tok->end = -1;
+	tok->size = 0;
+	return tok;
 }
 
 /**
 	unsigned int tokindex;
 	jsmntok_t *token;
 
-	/* initialize the rest of tokens (they could be reallocated) */
-	for (tokindex = parser->toknext; tokindex < num_tokens; tokindex++) {
-		jsmn_fill_token(&tokens[tokindex], JSMN_PRIMITIVE, -1, -1);
-	}
-
 	for (; js[parser->pos] != '\0'; parser->pos++) {
 		char c;
 		jsmntype_t type;

File jsmn_test.c

View file
  • Ignore whitespace
 	r = jsmn_parse(&p, js, tok, 10);
 	check(r == JSMN_ERROR_PART && tok[0].type == JSMN_STRING);
 	check(TOKEN_STRING(js, tok[0], "x"));
-	check(TOKEN_EQ(tok[1], -1, -1, 0));
+	check(p.toknext == 1);
 
 	js = "\"x\": \"valu";
 	r = jsmn_parse(&p, js, tok, 10);
 	check(r == JSMN_ERROR_PART && tok[0].type == JSMN_STRING);
 	check(TOKEN_STRING(js, tok[0], "x"));
-	check(TOKEN_EQ(tok[1], -1, -1, 0));
+	check(p.toknext == 1);
 
 	js = "\"x\": \"value\"";
 	r = jsmn_parse(&p, js, tok, 10);