Lines Matching refs:parser

8 static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
11 if (parser->toknext >= num_tokens) {
14 tok = &tokens[parser->toknext++];
37 static jsmnerr_t jsmn_parse_primitive(jsmn_parser *parser, const char *js,
42 start = parser->pos;
44 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
45 switch (js[parser->pos]) {
54 if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
55 parser->pos = start;
61 parser->pos = start;
67 parser->pos--;
70 token = jsmn_alloc_token(parser, tokens, num_tokens);
72 parser->pos = start;
75 jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos);
77 token->parent = parser->toksuper;
79 parser->pos--;
86 static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
90 int start = parser->pos;
92 parser->pos++;
95 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
96 char c = js[parser->pos];
103 token = jsmn_alloc_token(parser, tokens, num_tokens);
105 parser->pos = start;
108 jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos);
110 token->parent = parser->toksuper;
117 parser->pos++;
118 switch (js[parser->pos]) {
125 parser->pos++;
127 for(; i < 4 && js[parser->pos] != '\0'; i++) {
129 if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
130 (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
131 (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
132 parser->pos = start;
135 parser->pos++;
137 parser->pos--;
141 parser->pos = start;
146 parser->pos = start;
153 jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
160 for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
164 c = js[parser->pos];
171 token = jsmn_alloc_token(parser, tokens, num_tokens);
174 if (parser->toksuper != -1) {
175 tokens[parser->toksuper].size++;
177 token->parent = parser->toksuper;
181 token->start = parser->pos;
182 parser->toksuper = parser->toknext - 1;
189 if (parser->toknext < 1) {
192 token = &tokens[parser->toknext - 1];
198 token->end = parser->pos + 1;
199 parser->toksuper = token->parent;
208 for (i = parser->toknext - 1; i >= 0; i--) {
214 parser->toksuper = -1;
215 token->end = parser->pos + 1;
224 parser->toksuper = i;
231 r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
234 if (parser->toksuper != -1 && tokens != NULL)
235 tokens[parser->toksuper].size++;
248 r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
251 if (parser->toksuper != -1 && tokens != NULL)
252 tokens[parser->toksuper].size++;
263 for (i = parser->toknext - 1; i >= 0; i--) {
274 * Creates a new parser based over a given buffer with an array of tokens
277 void jsmn_init(jsmn_parser *parser) {
278 parser->pos = 0;
279 parser->toknext = 0;
280 parser->toksuper = -1;