--- parser3/src/lib/json/pa_json.C 2013/07/29 10:06:38 1.2 +++ parser3/src/lib/json/pa_json.C 2013/07/29 19:36:06 1.8 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Vincent Hanquez + * Copyright (C) 2009-2011 Vincent Hanquez * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -264,7 +264,7 @@ static int state_grow(json_parser *parse ptr = parser_realloc(parser, parser->stack, newsize * sizeof(uint8_t)); if (!ptr) return JSON_ERROR_NO_MEMORY; - parser->stack = (uint8_t*)ptr; + parser->stack = ptr; parser->stack_size = newsize; return 0; } @@ -305,7 +305,7 @@ static int buffer_grow(json_parser *pars ptr = parser_realloc(parser, parser->buffer, newsize * sizeof(char)); if (!ptr) return JSON_ERROR_NO_MEMORY; - parser->buffer = (char *)ptr; + parser->buffer = ptr; parser->buffer_size = newsize; return 0; } @@ -380,7 +380,7 @@ static int decode_unicode_char(json_pars { uint32_t uval; char *b = parser->buffer; - int offset = parser->buffer_offset; + uint32_t offset = parser->buffer_offset; uval = (hex(b[offset - 4]) << 12) | (hex(b[offset - 3]) << 8) | (hex(b[offset - 2]) << 4) | hex(b[offset - 1]); @@ -409,7 +409,7 @@ static int decode_unicode_char(json_pars if (IS_LOW_SURROGATE(uval)) return JSON_ERROR_UNICODE_UNEXPECTED_LOW_SURROGATE; if (IS_HIGH_SURROGATE(uval)) { - parser->unicode_multi = uval; + parser->unicode_multi = (uint16_t)uval; return 0; } @@ -442,9 +442,9 @@ static int buffer_push_escape(json_parse return buffer_push(parser, c); } -#define CHK(f) ({ ret = f; if (ret) return ret; }) +#define CHK(f) { ret = f; if (ret) return ret; } -int act_uc(json_parser *parser) +static int act_uc(json_parser *parser) { int ret; CHK(decode_unicode_char(parser)); @@ -452,7 +452,7 @@ int act_uc(json_parser *parser) return 0; } -int act_yb(json_parser *parser) +static int act_yb(json_parser *parser) { if (!parser->config.allow_yaml_comments) return JSON_ERROR_COMMENT_NOT_ALLOWED; @@ -460,7 +460,7 @@ int act_yb(json_parser *parser) return 0; } -int act_cb(json_parser *parser) +static int act_cb(json_parser *parser) { if (!parser->config.allow_c_comments) return JSON_ERROR_COMMENT_NOT_ALLOWED; @@ -468,13 +468,13 @@ int act_cb(json_parser *parser) return 0; } -int act_ce(json_parser *parser) +static int act_ce(json_parser *parser) { parser->state = (parser->save_state > STATE__A) ? STATE_OK : parser->save_state; return 0; } -int act_ob(json_parser *parser) +static int act_ob(json_parser *parser) { int ret; CHK(do_callback(parser, JSON_OBJECT_BEGIN)); @@ -483,31 +483,31 @@ int act_ob(json_parser *parser) return 0; } -int act_oe(json_parser *parser) +static int act_oe(json_parser *parser) { int ret; - CHK(do_callback(parser, JSON_OBJECT_END)); CHK(state_pop(parser, MODE_OBJECT)); + CHK(do_callback(parser, JSON_OBJECT_END)); parser->expecting_key = 0; return 0; } -int act_ab(json_parser *parser) +static int act_ab(json_parser *parser) { int ret; CHK(do_callback(parser, JSON_ARRAY_BEGIN)); CHK(state_push(parser, MODE_ARRAY)); return 0; } -int act_ae(json_parser *parser) +static int act_ae(json_parser *parser) { int ret; - CHK(do_callback(parser, JSON_ARRAY_END)); CHK(state_pop(parser, MODE_ARRAY)); + CHK(do_callback(parser, JSON_ARRAY_END)); return 0; } -int act_se(json_parser *parser) +static int act_se(json_parser *parser) { int ret; CHK(do_callback_withbuf(parser, (parser->expecting_key) ? JSON_KEY : JSON_STRING)); @@ -517,7 +517,7 @@ int act_se(json_parser *parser) return 0; } -int act_sp(json_parser *parser) +static int act_sp(json_parser *parser) { if (parser->stack_offset == 0) return JSON_ERROR_COMMA_OUT_OF_STRUCTURE; @@ -538,28 +538,28 @@ struct action_descr }; static struct action_descr actions_map[] = { - [STATE_MX & ~0x80] = { NULL, JSON_INT, STATE_M0, 0 }, - [STATE_ZX & ~0x80] = { NULL, JSON_INT, STATE_Z0, 0 }, - [STATE_IX & ~0x80] = { NULL, JSON_INT, STATE_I0, 0 }, - [STATE_DE & ~0x80] = { NULL, JSON_FLOAT, STATE_X1, 0 }, - [STATE_DF & ~0x80] = { NULL, JSON_FLOAT, STATE_R1, 0 }, - [STATE_NU & ~0x80] = { NULL, JSON_NULL, STATE_OK, 0 }, - [STATE_FA & ~0x80] = { NULL, JSON_FALSE, STATE_OK, 0 }, - [STATE_TR & ~0x80] = { NULL, JSON_TRUE, STATE_OK, 0 }, - [STATE_KS & ~0x80] = { NULL, JSON_NONE, STATE__V, 0 }, - [STATE_UC & ~0x80] = { act_uc, JSON_NONE, 0, 0 }, - [STATE_YB & ~0x80] = { act_yb, JSON_NONE, STATE_Y1, 1 }, - [STATE_CB & ~0x80] = { act_cb, JSON_NONE, STATE_C1, 1 }, - [STATE_CE & ~0x80] = { act_ce, JSON_NONE, 0, 0 }, - [STATE_OB & ~0x80] = { act_ob, JSON_NONE, STATE__O, 0 }, - [STATE_OE & ~0x80] = { act_oe, JSON_NONE, STATE_OK, 1 }, - [STATE_AB & ~0x80] = { act_ab, JSON_NONE, STATE__A, 0 }, - [STATE_AE & ~0x80] = { act_ae, JSON_NONE, STATE_OK, 1 }, - [STATE_SE & ~0x80] = { act_se, JSON_NONE, 0, 0 }, - [STATE_SP & ~0x80] = { act_sp, JSON_NONE, 0, 1 }, + { NULL, JSON_NONE, STATE__V, 0 }, /* KS */ + { act_sp, JSON_NONE, 0, 1 }, /* SP */ + { act_ab, JSON_NONE, STATE__A, 0 }, /* AB */ + { act_ae, JSON_NONE, STATE_OK, 1 }, /* AE */ + { act_ob, JSON_NONE, STATE__O, 0 }, /* OB */ + { act_oe, JSON_NONE, STATE_OK, 1 }, /* OE */ + { act_cb, JSON_NONE, STATE_C1, 1 }, /* CB */ + { act_yb, JSON_NONE, STATE_Y1, 1 }, /* YB */ + { act_ce, JSON_NONE, 0, 0 }, /* CE */ + { NULL, JSON_FALSE, STATE_OK, 0 }, /* FA */ + { NULL, JSON_TRUE, STATE_OK, 0 }, /* TR */ + { NULL, JSON_NULL, STATE_OK, 0 }, /* NU */ + { NULL, JSON_FLOAT, STATE_X1, 0 }, /* DE */ + { NULL, JSON_FLOAT, STATE_R1, 0 }, /* DF */ + { act_se, JSON_NONE, 0, 0 }, /* SE */ + { NULL, JSON_INT, STATE_M0, 0 }, /* MX */ + { NULL, JSON_INT, STATE_Z0, 0 }, /* ZX */ + { NULL, JSON_INT, STATE_I0, 0 }, /* IX */ + { act_uc, JSON_NONE, 0, 0 }, /* UC */ }; -static int do_action(json_parser *parser, int next_state) +static int do_action(json_parser *parser, uint8_t next_state) { struct action_descr *descr = &actions_map[next_state & ~0x80]; @@ -645,8 +645,8 @@ int json_parser_string(json_parser *pars uint32_t length, uint32_t *processed) { int ret; - int next_class, next_state; - int buffer_policy; + uint8_t next_class, next_state; + uint32_t buffer_policy; uint32_t i; ret = 0;