Lines Matching refs:parser

10 static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
13 if (parser->toknext >= num_tokens) {
16 tok = &tokens[parser->toknext++];
39 static jsmnerr_t jsmn_parse_primitive(jsmn_parser *parser, const char *js,
44 start = parser->pos;
46 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
47 switch (js[parser->pos]) {
56 if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
57 parser->pos = start;
63 parser->pos = start;
69 parser->pos--;
72 token = jsmn_alloc_token(parser, tokens, num_tokens);
74 parser->pos = start;
77 jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos);
79 token->parent = parser->toksuper;
81 parser->pos--;
88 static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
92 int start = parser->pos;
94 parser->pos++;
97 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
98 char c = js[parser->pos];
105 token = jsmn_alloc_token(parser, tokens, num_tokens);
107 parser->pos = start;
110 jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos);
112 token->parent = parser->toksuper;
118 if (c == '\\' && parser->pos + 1 < len) {
120 parser->pos++;
121 switch (js[parser->pos]) {
128 parser->pos++;
129 for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
131 if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
132 (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
133 (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
134 parser->pos = start;
137 parser->pos++;
139 parser->pos--;
143 parser->pos = start;
148 parser->pos = start;
155 jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
162 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
166 c = js[parser->pos];
173 token = jsmn_alloc_token(parser, tokens, num_tokens);
176 if (parser->toksuper != -1) {
177 tokens[parser->toksuper].size++;
179 token->parent = parser->toksuper;
183 token->start = parser->pos;
184 parser->toksuper = parser->toknext - 1;
191 if (parser->toknext < 1) {
194 token = &tokens[parser->toknext - 1];
200 token->end = parser->pos + 1;
201 parser->toksuper = token->parent;
210 for (i = parser->toknext - 1; i >= 0; i--) {
216 parser->toksuper = -1;
217 token->end = parser->pos + 1;
226 parser->toksuper = i;
233 r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
236 if (parser->toksuper != -1 && tokens != NULL)
237 tokens[parser->toksuper].size++;
242 parser->toksuper = parser->toknext - 1;
246 tokens[parser->toksuper].type != JSMN_ARRAY &&
247 tokens[parser->toksuper].type != JSMN_OBJECT) {
249 parser->toksuper = tokens[parser->toksuper].parent;
251 for (i = parser->toknext - 1; i >= 0; i--) {
254 parser->toksuper = i;
269 jsmntok_t *t = &tokens[parser->toksuper];
279 r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
282 if (parser->toksuper != -1 && tokens != NULL)
283 tokens[parser->toksuper].size++;
294 for (i = parser->toknext - 1; i >= 0; i--) {
306 * Creates a new parser based over a given buffer with an array of tokens
309 void jsmn_init(jsmn_parser *parser) {
310 parser->pos = 0;
311 parser->toknext = 0;
312 parser->toksuper = -1;