Lines Matching full:parser

27 static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,  in jsmn_alloc_token()  argument
30 if (parser->toknext >= num_tokens) { in jsmn_alloc_token()
33 tok = &tokens[parser->toknext++]; in jsmn_alloc_token()
56 static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, in jsmn_parse_primitive() argument
61 start = parser->pos; in jsmn_parse_primitive()
63 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { in jsmn_parse_primitive()
64 switch (js[parser->pos]) { in jsmn_parse_primitive()
73 if (js[parser->pos] < 32 || js[parser->pos] >= 127) { in jsmn_parse_primitive()
74 parser->pos = start; in jsmn_parse_primitive()
80 parser->pos = start; in jsmn_parse_primitive()
86 parser->pos--; in jsmn_parse_primitive()
89 token = jsmn_alloc_token(parser, tokens, num_tokens); in jsmn_parse_primitive()
91 parser->pos = start; in jsmn_parse_primitive()
94 jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos); in jsmn_parse_primitive()
96 token->parent = parser->toksuper; in jsmn_parse_primitive()
98 parser->pos--; in jsmn_parse_primitive()
105 static int jsmn_parse_string(jsmn_parser *parser, const char *js, in jsmn_parse_string() argument
109 int start = parser->pos; in jsmn_parse_string()
111 parser->pos++; in jsmn_parse_string()
114 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { in jsmn_parse_string()
115 char c = js[parser->pos]; in jsmn_parse_string()
122 token = jsmn_alloc_token(parser, tokens, num_tokens); in jsmn_parse_string()
124 parser->pos = start; in jsmn_parse_string()
127 jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos); in jsmn_parse_string()
129 token->parent = parser->toksuper; in jsmn_parse_string()
135 if (c == '\\' && parser->pos + 1 < len) { in jsmn_parse_string()
137 parser->pos++; in jsmn_parse_string()
138 switch (js[parser->pos]) { in jsmn_parse_string()
145 parser->pos++; in jsmn_parse_string()
146 for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) { in jsmn_parse_string()
148 if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */ in jsmn_parse_string()
149 (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */ in jsmn_parse_string()
150 (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */ in jsmn_parse_string()
151 parser->pos = start; in jsmn_parse_string()
154 parser->pos++; in jsmn_parse_string()
156 parser->pos--; in jsmn_parse_string()
160 parser->pos = start; in jsmn_parse_string()
165 parser->pos = start; in jsmn_parse_string()
172 int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, in jsmn_parse() argument
177 int count = parser->toknext; in jsmn_parse()
179 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { in jsmn_parse()
183 c = js[parser->pos]; in jsmn_parse()
190 token = jsmn_alloc_token(parser, tokens, num_tokens); in jsmn_parse()
193 if (parser->toksuper != -1) { in jsmn_parse()
194 tokens[parser->toksuper].size++; in jsmn_parse()
196 token->parent = parser->toksuper; in jsmn_parse()
200 token->start = parser->pos; in jsmn_parse()
201 parser->toksuper = parser->toknext - 1; in jsmn_parse()
208 if (parser->toknext < 1) { in jsmn_parse()
211 token = &tokens[parser->toknext - 1]; in jsmn_parse()
217 token->end = parser->pos + 1; in jsmn_parse()
218 parser->toksuper = token->parent; in jsmn_parse()
227 for (i = parser->toknext - 1; i >= 0; i--) { in jsmn_parse()
233 parser->toksuper = -1; in jsmn_parse()
234 token->end = parser->pos + 1; in jsmn_parse()
243 parser->toksuper = i; in jsmn_parse()
250 r = jsmn_parse_string(parser, js, len, tokens, num_tokens); in jsmn_parse()
253 if (parser->toksuper != -1 && tokens != NULL) in jsmn_parse()
254 tokens[parser->toksuper].size++; in jsmn_parse()
259 parser->toksuper = parser->toknext - 1; in jsmn_parse()
262 if (tokens != NULL && parser->toksuper != -1 && in jsmn_parse()
263 tokens[parser->toksuper].type != JSMN_ARRAY && in jsmn_parse()
264 tokens[parser->toksuper].type != JSMN_OBJECT) { in jsmn_parse()
266 parser->toksuper = tokens[parser->toksuper].parent; in jsmn_parse()
268 for (i = parser->toknext - 1; i >= 0; i--) { in jsmn_parse()
271 parser->toksuper = i; in jsmn_parse()
285 if (tokens != NULL && parser->toksuper != -1) { in jsmn_parse()
286 jsmntok_t *t = &tokens[parser->toksuper]; in jsmn_parse()
296 r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens); in jsmn_parse()
299 if (parser->toksuper != -1 && tokens != NULL) in jsmn_parse()
300 tokens[parser->toksuper].size++; in jsmn_parse()
312 for (i = parser->toknext - 1; i >= 0; i--) { in jsmn_parse()
324 * Creates a new parser based over a given buffer with an array of tokens
327 void jsmn_init(jsmn_parser *parser) { in jsmn_init() argument
328 parser->pos = 0; in jsmn_init()
329 parser->toknext = 0; in jsmn_init()
330 parser->toksuper = -1; in jsmn_init()