diff options
| author | Jakub Zelenka <bukka@php.net> | 2015-06-07 15:22:09 +0100 |
|---|---|---|
| committer | Jakub Zelenka <bukka@php.net> | 2015-06-07 15:22:09 +0100 |
| commit | 61de771afa1152423ef547abbe64501cc133821d (patch) | |
| tree | 796d0496f387b7def13a449c4caf48cedb83bffe /ext/json/json_parser.y | |
| parent | 05ef3b7c0de6d85480bc1dff3b1a4db5b06a3ad1 (diff) | |
| download | php-git-61de771afa1152423ef547abbe64501cc133821d.tar.gz | |
Improve json parser code
Diffstat (limited to 'ext/json/json_parser.y')
| -rw-r--r-- | ext/json/json_parser.y | 97 |
1 files changed, 80 insertions, 17 deletions
diff --git a/ext/json/json_parser.y b/ext/json/json_parser.y index 044b82eb51..500a0ff11d 100644 --- a/ext/json/json_parser.y +++ b/ext/json/json_parser.y @@ -89,53 +89,112 @@ void php_json_parser_array_append(zval *array, zval *zvalue); %% /* Rules */ start: - value PHP_JSON_T_EOI { ZVAL_COPY_VALUE(&$$, &$1); ZVAL_COPY_VALUE(parser->return_value, &$1); PHP_JSON_USE($2); YYACCEPT; } - | value errlex { PHP_JSON_USE_2($$, $1, $2); } + value PHP_JSON_T_EOI + { + ZVAL_COPY_VALUE(&$$, &$1); + ZVAL_COPY_VALUE(parser->return_value, &$1); + PHP_JSON_USE($2); YYACCEPT; + } + | value errlex + { + PHP_JSON_USE_2($$, $1, $2); + } ; object: - '{' { PHP_JSON_DEPTH_INC; } members object_end { PHP_JSON_DEPTH_DEC; $$ = $3; } + '{' { PHP_JSON_DEPTH_INC; } members object_end + { + PHP_JSON_DEPTH_DEC; + $$ = $3; + } ; object_end: '}' - | ']' { parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } + | ']' + { + parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; + YYERROR; + } ; members: - /* empty */ { php_json_parser_object_init(parser, &$$); } + /* empty */ + { + php_json_parser_object_init(parser, &$$); + } | member ; member: - pair { php_json_parser_object_init(parser, &$$); php_json_parser_object_update(parser, &$$, $1.key, &$1.val); } - | member ',' pair { php_json_parser_object_update(parser, &$1, $3.key, &$3.val); ZVAL_COPY_VALUE(&$$, &$1); } - | member errlex { PHP_JSON_USE_2($$, $1, $2); } + pair + { + php_json_parser_object_init(parser, &$$); + php_json_parser_object_update(parser, &$$, $1.key, &$1.val); + } + | member ',' pair + { + php_json_parser_object_update(parser, &$1, $3.key, &$3.val); + ZVAL_COPY_VALUE(&$$, &$1); + } + | member errlex + { + PHP_JSON_USE_2($$, $1, $2); + } ; pair: - key ':' value { $$.key = Z_STR($1); ZVAL_COPY_VALUE(&$$.val, &$3); } - | key errlex { PHP_JSON_USE_2($$, $1, $2); } + key ':' value + { + $$.key = Z_STR($1); + ZVAL_COPY_VALUE(&$$.val, &$3); + } + | key errlex + { + PHP_JSON_USE_2($$, $1, $2); + } ; array: - '[' { PHP_JSON_DEPTH_INC; } elements array_end { PHP_JSON_DEPTH_DEC; ZVAL_COPY_VALUE(&$$, &$3); } + '[' { PHP_JSON_DEPTH_INC; } elements array_end + { + PHP_JSON_DEPTH_DEC; + ZVAL_COPY_VALUE(&$$, &$3); + } ; array_end: ']' - | '}' { parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } + | '}' + { + parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; + YYERROR; + } ; elements: - /* empty */ { php_json_parser_array_init(&$$); } + /* empty */ + { + php_json_parser_array_init(&$$); + } | element ; element: - value { php_json_parser_array_init(&$$); php_json_parser_array_append(&$$, &$1); } - | element ',' value { php_json_parser_array_append(&$1, &$3); ZVAL_COPY_VALUE(&$$, &$1); } - | element errlex { PHP_JSON_USE_2($$, $1, $2); } + value + { + php_json_parser_array_init(&$$); + php_json_parser_array_append(&$$, &$1); + } + | element ',' value + { + php_json_parser_array_append(&$1, &$3); + ZVAL_COPY_VALUE(&$$, &$1); + } + | element errlex + { + PHP_JSON_USE_2($$, $1, $2); + } ; key: @@ -157,7 +216,11 @@ value: ; errlex: - PHP_JSON_T_ERROR { PHP_JSON_USE_1($$, $1); YYERROR; } + PHP_JSON_T_ERROR + { + PHP_JSON_USE_1($$, $1); + YYERROR; + } ; %% /* Functions */ |
