static json_t *parse_json(lex_t *lex, size_t flags, json_error_t *error)
{
+ json_t *result;
+
lex_scan(lex, error);
if(lex->token != '[' && lex->token != '{') {
error_set(error, lex, "'[' or '{' expected");
return NULL;
}
- return parse_value(lex, flags, error);
+ result = parse_value(lex, flags, error);
+ if(!result)
+ return NULL;
+
+ lex_scan(lex, error);
+ if(lex->token != TOKEN_EOF) {
+ error_set(error, lex, "end of file expected");
+ json_decref(result);
+ result = NULL;
+ }
+
+ return result;
}
typedef struct
return NULL;
jsonp_error_init(error, "<string>");
-
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
-
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-out:
lex_close(&lex);
return result;
}
return NULL;
jsonp_error_init(error, "<buffer>");
-
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-
-out:
lex_close(&lex);
return result;
}
source = "<stream>";
jsonp_error_init(error, source);
-
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
-
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-out:
lex_close(&lex);
return result;
}