Skip to content

Commit 37048c0

Browse files
committed
Use embedded json parser method structure
1 parent 93b67dd commit 37048c0

File tree

3 files changed

+27
-27
lines changed

3 files changed

+27
-27
lines changed

ext/json/json_parser.tab.c

+13-13
Original file line numberDiff line numberDiff line change
@@ -1464,7 +1464,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
14641464

14651465
{
14661466
PHP_JSON_DEPTH_INC;
1467-
if (parser->methods->object_start && FAILURE == parser->methods->object_start(parser)) {
1467+
if (parser->methods.object_start && FAILURE == parser->methods.object_start(parser)) {
14681468
YYERROR;
14691469
}
14701470
}
@@ -1476,7 +1476,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
14761476
{
14771477
ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value));
14781478
PHP_JSON_DEPTH_DEC;
1479-
if (parser->methods->object_end && FAILURE == parser->methods->object_end(parser, &(yyval.value))) {
1479+
if (parser->methods.object_end && FAILURE == parser->methods.object_end(parser, &(yyval.value))) {
14801480
YYERROR;
14811481
}
14821482
}
@@ -1495,16 +1495,16 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
14951495
case 8:
14961496

14971497
{
1498-
parser->methods->object_create(parser, &(yyval.value));
1498+
parser->methods.object_create(parser, &(yyval.value));
14991499
}
15001500

15011501
break;
15021502

15031503
case 10:
15041504

15051505
{
1506-
parser->methods->object_create(parser, &(yyval.value));
1507-
if (parser->methods->object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) {
1506+
parser->methods.object_create(parser, &(yyval.value));
1507+
if (parser->methods.object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) {
15081508
YYERROR;
15091509
}
15101510
}
@@ -1514,7 +1514,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
15141514
case 11:
15151515

15161516
{
1517-
if (parser->methods->object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) {
1517+
if (parser->methods.object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) {
15181518
YYERROR;
15191519
}
15201520
ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value));
@@ -1551,7 +1551,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
15511551

15521552
{
15531553
PHP_JSON_DEPTH_INC;
1554-
if (parser->methods->array_start && FAILURE == parser->methods->array_start(parser)) {
1554+
if (parser->methods.array_start && FAILURE == parser->methods.array_start(parser)) {
15551555
YYERROR;
15561556
}
15571557
}
@@ -1563,7 +1563,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
15631563
{
15641564
ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value));
15651565
PHP_JSON_DEPTH_DEC;
1566-
if (parser->methods->array_end && FAILURE == parser->methods->array_end(parser, &(yyval.value))) {
1566+
if (parser->methods.array_end && FAILURE == parser->methods.array_end(parser, &(yyval.value))) {
15671567
YYERROR;
15681568
}
15691569
}
@@ -1582,24 +1582,24 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
15821582
case 19:
15831583

15841584
{
1585-
parser->methods->array_create(parser, &(yyval.value));
1585+
parser->methods.array_create(parser, &(yyval.value));
15861586
}
15871587

15881588
break;
15891589

15901590
case 21:
15911591

15921592
{
1593-
parser->methods->array_create(parser, &(yyval.value));
1594-
parser->methods->array_append(parser, &(yyval.value), &(yyvsp[0].value));
1593+
parser->methods.array_create(parser, &(yyval.value));
1594+
parser->methods.array_append(parser, &(yyval.value), &(yyvsp[0].value));
15951595
}
15961596

15971597
break;
15981598

15991599
case 22:
16001600

16011601
{
1602-
parser->methods->array_append(parser, &(yyvsp[-2].value), &(yyvsp[0].value));
1602+
parser->methods.array_append(parser, &(yyvsp[-2].value), &(yyvsp[0].value));
16031603
ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value));
16041604
}
16051605

@@ -1947,7 +1947,7 @@ void php_json_parser_init_ex(php_json_parser *parser,
19471947
parser->depth = 1;
19481948
parser->max_depth = max_depth;
19491949
parser->return_value = return_value;
1950-
parser->methods = parser_methods;
1950+
memcpy(&parser->methods, parser_methods, sizeof(php_json_parser_methods));
19511951
}
19521952

19531953
void php_json_parser_init(php_json_parser *parser,

ext/json/json_parser.y

+13-13
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ object:
102102
'{'
103103
{
104104
PHP_JSON_DEPTH_INC;
105-
if (parser->methods->object_start && FAILURE == parser->methods->object_start(parser)) {
105+
if (parser->methods.object_start && FAILURE == parser->methods.object_start(parser)) {
106106
YYERROR;
107107
}
108108
}
109109
members object_end
110110
{
111111
ZVAL_COPY_VALUE(&$$, &$3);
112112
PHP_JSON_DEPTH_DEC;
113-
if (parser->methods->object_end && FAILURE == parser->methods->object_end(parser, &$$)) {
113+
if (parser->methods.object_end && FAILURE == parser->methods.object_end(parser, &$$)) {
114114
YYERROR;
115115
}
116116
}
@@ -128,22 +128,22 @@ object_end:
128128
members:
129129
/* empty */
130130
{
131-
parser->methods->object_create(parser, &$$);
131+
parser->methods.object_create(parser, &$$);
132132
}
133133
| member
134134
;
135135

136136
member:
137137
pair
138138
{
139-
parser->methods->object_create(parser, &$$);
140-
if (parser->methods->object_update(parser, &$$, $1.key, &$1.val) == FAILURE) {
139+
parser->methods.object_create(parser, &$$);
140+
if (parser->methods.object_update(parser, &$$, $1.key, &$1.val) == FAILURE) {
141141
YYERROR;
142142
}
143143
}
144144
| member ',' pair
145145
{
146-
if (parser->methods->object_update(parser, &$1, $3.key, &$3.val) == FAILURE) {
146+
if (parser->methods.object_update(parser, &$1, $3.key, &$3.val) == FAILURE) {
147147
YYERROR;
148148
}
149149
ZVAL_COPY_VALUE(&$$, &$1);
@@ -170,15 +170,15 @@ array:
170170
'['
171171
{
172172
PHP_JSON_DEPTH_INC;
173-
if (parser->methods->array_start && FAILURE == parser->methods->array_start(parser)) {
173+
if (parser->methods.array_start && FAILURE == parser->methods.array_start(parser)) {
174174
YYERROR;
175175
}
176176
}
177177
elements array_end
178178
{
179179
ZVAL_COPY_VALUE(&$$, &$3);
180180
PHP_JSON_DEPTH_DEC;
181-
if (parser->methods->array_end && FAILURE == parser->methods->array_end(parser, &$$)) {
181+
if (parser->methods.array_end && FAILURE == parser->methods.array_end(parser, &$$)) {
182182
YYERROR;
183183
}
184184
}
@@ -196,20 +196,20 @@ array_end:
196196
elements:
197197
/* empty */
198198
{
199-
parser->methods->array_create(parser, &$$);
199+
parser->methods.array_create(parser, &$$);
200200
}
201201
| element
202202
;
203203

204204
element:
205205
value
206206
{
207-
parser->methods->array_create(parser, &$$);
208-
parser->methods->array_append(parser, &$$, &$1);
207+
parser->methods.array_create(parser, &$$);
208+
parser->methods.array_append(parser, &$$, &$1);
209209
}
210210
| element ',' value
211211
{
212-
parser->methods->array_append(parser, &$1, &$3);
212+
parser->methods.array_append(parser, &$1, &$3);
213213
ZVAL_COPY_VALUE(&$$, &$1);
214214
}
215215
| element errlex
@@ -339,7 +339,7 @@ void php_json_parser_init_ex(php_json_parser *parser,
339339
parser->depth = 1;
340340
parser->max_depth = max_depth;
341341
parser->return_value = return_value;
342-
parser->methods = parser_methods;
342+
memcpy(&parser->methods, parser_methods, sizeof(php_json_parser_methods));
343343
}
344344

345345
void php_json_parser_init(php_json_parser *parser,

ext/json/php_json_parser.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ struct _php_json_parser {
5757
zval *return_value;
5858
unsigned int depth;
5959
int max_depth;
60-
const php_json_parser_methods *methods;
60+
php_json_parser_methods methods;
6161
};
6262

6363
PHP_JSON_API void php_json_parser_init_ex(

0 commit comments

Comments
 (0)