summaryrefslogtreecommitdiff
path: root/ext/json/json_parser.y
diff options
context:
space:
mode:
authorJakub Zelenka <bukka@php.net>2015-06-07 15:22:09 +0100
committerJakub Zelenka <bukka@php.net>2015-06-07 15:22:09 +0100
commit61de771afa1152423ef547abbe64501cc133821d (patch)
tree796d0496f387b7def13a449c4caf48cedb83bffe /ext/json/json_parser.y
parent05ef3b7c0de6d85480bc1dff3b1a4db5b06a3ad1 (diff)
downloadphp-git-61de771afa1152423ef547abbe64501cc133821d.tar.gz
Improve json parser code
Diffstat (limited to 'ext/json/json_parser.y')
-rw-r--r--ext/json/json_parser.y97
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 */