191 const unsigned char * buf;
193 size_t * offset = &(hand->bytesConsumed);
205 if (*offset != jsonTextLen) {
207 offset, &buf, &bufLen);
210 hand->parseError =
"trailing garbage";
234 offset, &buf, &bufLen);
243 if (hand->callbacks && hand->callbacks->yajl_string) {
244 _CC_CHK(hand->callbacks->yajl_string(hand->ctx,
249 if (hand->callbacks && hand->callbacks->yajl_string) {
252 _CC_CHK(hand->callbacks->yajl_string(
258 if (hand->callbacks && hand->callbacks->yajl_boolean) {
259 _CC_CHK(hand->callbacks->yajl_boolean(hand->ctx,
264 if (hand->callbacks && hand->callbacks->yajl_null) {
265 _CC_CHK(hand->callbacks->yajl_null(hand->ctx));
269 if (hand->callbacks && hand->callbacks->yajl_start_map) {
270 _CC_CHK(hand->callbacks->yajl_start_map(hand->ctx));
275 if (hand->callbacks && hand->callbacks->yajl_start_array) {
276 _CC_CHK(hand->callbacks->yajl_start_array(hand->ctx));
281 if (hand->callbacks) {
282 if (hand->callbacks->yajl_number) {
283 _CC_CHK(hand->callbacks->yajl_number(
284 hand->ctx,(
const char *) buf, bufLen));
285 }
else if (hand->callbacks->yajl_integer) {
293 hand->parseError =
"integer overflow" ;
295 if (*offset >= bufLen) *offset -= bufLen;
299 _CC_CHK(hand->callbacks->yajl_integer(hand->ctx,
305 if (hand->callbacks) {
306 if (hand->callbacks->yajl_number) {
307 _CC_CHK(hand->callbacks->yajl_number(
308 hand->ctx, (
const char *) buf, bufLen));
309 }
else if (hand->callbacks->yajl_double) {
314 d = strtod((
char *) buf,
NULL);
315 if ((d == HUGE_VAL || d == -HUGE_VAL) &&
320 hand->parseError =
"numeric (floating point) " 323 if (*offset >= bufLen) *offset -= bufLen;
327 _CC_CHK(hand->callbacks->yajl_double(hand->ctx,
337 if (hand->callbacks &&
338 hand->callbacks->yajl_end_array)
340 _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx));
352 "unallowed token at this point in JSON text";
356 hand->parseError =
"invalid token, internal error";
382 offset, &buf, &bufLen);
390 if (hand->callbacks && hand->callbacks->yajl_map_key) {
398 if (hand->callbacks && hand->callbacks->yajl_map_key) {
399 _CC_CHK(hand->callbacks->yajl_map_key(hand->ctx, buf,
408 if (hand->callbacks && hand->callbacks->yajl_end_map) {
409 _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx));
418 "invalid object key (must be a string)";
424 offset, &buf, &bufLen);
436 hand->parseError =
"object key and value must " 437 "be separated by a colon (':')";
443 offset, &buf, &bufLen);
446 if (hand->callbacks && hand->callbacks->yajl_end_map) {
447 _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx));
461 hand->parseError =
"after key and value, inside map, " 462 "I expect ',' or '}'";
464 if (*offset >= bufLen) *offset -= bufLen;
471 offset, &buf, &bufLen);
474 if (hand->callbacks && hand->callbacks->yajl_end_array) {
475 _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx));
490 "after array element, I expect ',' or ']'";
#define yajl_bs_push(obs, byte)
#define yajl_bs_set(obs, byte)
#define yajl_bs_current(obs)
size_t yajl_buf_len(yajl_buf buf)
void yajl_buf_append(yajl_buf buf, const void *data, size_t len)
yajl_tok yajl_lex_lex(yajl_lexer lexer, const unsigned char *jsonText, size_t jsonTextLen, size_t *offset, const unsigned char **outBuf, size_t *outLen)
void yajl_buf_clear(yajl_buf buf)
long long yajl_parse_integer(const unsigned char *number, size_t length)
const unsigned char * yajl_buf_data(yajl_buf buf)
void yajl_string_decode(yajl_buf buf, const unsigned char *str, size_t len)