From: Jakub Zelenka Date: Sun, 7 Jun 2015 14:22:09 +0000 (+0100) Subject: Improve json parser code X-Git-Tag: php-7.0.0alpha1~26 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=61de771afa1152423ef547abbe64501cc133821d;p=php Improve json parser code --- diff --git a/ext/json/json_parser.tab.c b/ext/json/json_parser.tab.c index a5f5c6fb09..45a982bbcc 100644 --- a/ext/json/json_parser.tab.c +++ b/ext/json/json_parser.tab.c @@ -514,10 +514,10 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 92, 92, 93, 97, 97, 101, 102, 106, 107, - 111, 112, 113, 117, 118, 122, 122, 126, 127, 131, - 132, 136, 137, 138, 142, 143, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 160 + 0, 92, 92, 98, 105, 105, 113, 114, 123, 126, + 130, 135, 140, 147, 152, 159, 159, 167, 168, 177, + 180, 184, 189, 194, 201, 202, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 219 }; #endif @@ -1447,13 +1447,19 @@ yyreduce: { case 2: - { ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[-1].value)); PHP_JSON_USE((yyvsp[0].value)); YYACCEPT; } + { + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); + ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[-1].value)); + PHP_JSON_USE((yyvsp[0].value)); YYACCEPT; + } break; case 3: - { PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); } + { + PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + } break; @@ -1465,49 +1471,70 @@ yyreduce: case 5: - { PHP_JSON_DEPTH_DEC; (yyval.value) = (yyvsp[-1].value); } + { + PHP_JSON_DEPTH_DEC; + (yyval.value) = (yyvsp[-1].value); + } break; case 7: - { parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } + { + parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; + YYERROR; + } break; case 8: - { php_json_parser_object_init(parser, &(yyval.value)); } + { + php_json_parser_object_init(parser, &(yyval.value)); + } break; case 10: - { php_json_parser_object_init(parser, &(yyval.value)); php_json_parser_object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val); } + { + php_json_parser_object_init(parser, &(yyval.value)); + php_json_parser_object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val); + } break; case 11: - { php_json_parser_object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val); ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); } + { + php_json_parser_object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); + } break; case 12: - { PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); } + { + PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + } break; case 13: - { (yyval.pair).key = Z_STR((yyvsp[-2].value)); ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[0].value)); } + { + (yyval.pair).key = Z_STR((yyvsp[-2].value)); + ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[0].value)); + } break; case 14: - { PHP_JSON_USE_2((yyval.pair), (yyvsp[-1].value), (yyvsp[0].value)); } + { + PHP_JSON_USE_2((yyval.pair), (yyvsp[-1].value), (yyvsp[0].value)); + } break; @@ -1519,43 +1546,62 @@ yyreduce: case 16: - { PHP_JSON_DEPTH_DEC; ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); } + { + PHP_JSON_DEPTH_DEC; + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); + } break; case 18: - { parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } + { + parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; + YYERROR; + } break; case 19: - { php_json_parser_array_init(&(yyval.value)); } + { + php_json_parser_array_init(&(yyval.value)); + } break; case 21: - { php_json_parser_array_init(&(yyval.value)); php_json_parser_array_append(&(yyval.value), &(yyvsp[0].value)); } + { + php_json_parser_array_init(&(yyval.value)); + php_json_parser_array_append(&(yyval.value), &(yyvsp[0].value)); + } break; case 22: - { php_json_parser_array_append(&(yyvsp[-2].value), &(yyvsp[0].value)); ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); } + { + php_json_parser_array_append(&(yyvsp[-2].value), &(yyvsp[0].value)); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); + } break; case 23: - { PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); } + { + PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + } break; case 36: - { PHP_JSON_USE_1((yyval.value), (yyvsp[0].value)); YYERROR; } + { + PHP_JSON_USE_1((yyval.value), (yyvsp[0].value)); + YYERROR; + } break; 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 */