Skip to content

Commit f50e814

Browse files
committed
Resync YARP to ruby/prism@11ad3fb590
1 parent 40002dd commit f50e814

File tree

4 files changed

+71
-33
lines changed

4 files changed

+71
-33
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if 1..2 ; end
2+
if ..1 ; end
3+
if 1.. ; end
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ProgramNode(0...39)(
2+
[],
3+
StatementsNode(0...39)(
4+
[IfNode(0...13)(
5+
(0...2),
6+
FlipFlopNode(3...7)(
7+
IntegerNode(3...4)(),
8+
IntegerNode(6...7)(),
9+
(4...6),
10+
0
11+
),
12+
nil,
13+
nil,
14+
(10...13)
15+
),
16+
IfNode(14...26)(
17+
(14...16),
18+
FlipFlopNode(17...20)(nil, IntegerNode(19...20)(), (17...19), 0),
19+
nil,
20+
nil,
21+
(23...26)
22+
),
23+
IfNode(27...39)(
24+
(27...29),
25+
FlipFlopNode(30...33)(IntegerNode(30...31)(), nil, (31...33), 0),
26+
nil,
27+
nil,
28+
(36...39)
29+
)]
30+
)
31+
)

yarp/api_node.c

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
10091009
VALUE argv[2];
10101010

10111011
// arguments
1012-
argv[0] = rb_ary_new();
1012+
argv[0] = rb_ary_new_capa(cast->arguments.size);
10131013
for (size_t index = 0; index < cast->arguments.size; index++) {
10141014
rb_ary_push(argv[0], rb_ary_pop(value_stack));
10151015
}
@@ -1026,7 +1026,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
10261026
VALUE argv[4];
10271027

10281028
// elements
1029-
argv[0] = rb_ary_new();
1029+
argv[0] = rb_ary_new_capa(cast->elements.size);
10301030
for (size_t index = 0; index < cast->elements.size; index++) {
10311031
rb_ary_push(argv[0], rb_ary_pop(value_stack));
10321032
}
@@ -1052,7 +1052,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
10521052
argv[0] = rb_ary_pop(value_stack);
10531053

10541054
// requireds
1055-
argv[1] = rb_ary_new();
1055+
argv[1] = rb_ary_new_capa(cast->requireds.size);
10561056
for (size_t index = 0; index < cast->requireds.size; index++) {
10571057
rb_ary_push(argv[1], rb_ary_pop(value_stack));
10581058
}
@@ -1061,7 +1061,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
10611061
argv[2] = rb_ary_pop(value_stack);
10621062

10631063
// posts
1064-
argv[3] = rb_ary_new();
1064+
argv[3] = rb_ary_new_capa(cast->posts.size);
10651065
for (size_t index = 0; index < cast->posts.size; index++) {
10661066
rb_ary_push(argv[3], rb_ary_pop(value_stack));
10671067
}
@@ -1177,7 +1177,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
11771177
VALUE argv[6];
11781178

11791179
// locals
1180-
argv[0] = rb_ary_new();
1180+
argv[0] = rb_ary_new_capa(cast->locals.size);
11811181
for (size_t index = 0; index < cast->locals.size; index++) {
11821182
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
11831183
}
@@ -1226,7 +1226,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
12261226
argv[0] = rb_ary_pop(value_stack);
12271227

12281228
// locals
1229-
argv[1] = rb_ary_new();
1229+
argv[1] = rb_ary_new_capa(cast->locals.size);
12301230
for (size_t index = 0; index < cast->locals.size; index++) {
12311231
yp_location_t location = cast->locals.locations[index];
12321232
rb_ary_push(argv[1], yp_location_new(parser, location.start, location.end, source));
@@ -1391,7 +1391,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
13911391
argv[0] = rb_ary_pop(value_stack);
13921392

13931393
// conditions
1394-
argv[1] = rb_ary_new();
1394+
argv[1] = rb_ary_new_capa(cast->conditions.size);
13951395
for (size_t index = 0; index < cast->conditions.size; index++) {
13961396
rb_ary_push(argv[1], rb_ary_pop(value_stack));
13971397
}
@@ -1417,7 +1417,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
14171417
VALUE argv[8];
14181418

14191419
// locals
1420-
argv[0] = rb_ary_new();
1420+
argv[0] = rb_ary_new_capa(cast->locals.size);
14211421
for (size_t index = 0; index < cast->locals.size; index++) {
14221422
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
14231423
}
@@ -1753,7 +1753,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
17531753
argv[3] = rb_ary_pop(value_stack);
17541754

17551755
// locals
1756-
argv[4] = rb_ary_new();
1756+
argv[4] = rb_ary_new_capa(cast->locals.size);
17571757
for (size_t index = 0; index < cast->locals.size; index++) {
17581758
rb_ary_push(argv[4], rb_id2sym(constants[cast->locals.ids[index] - 1]));
17591759
}
@@ -1904,7 +1904,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
19041904
argv[1] = rb_ary_pop(value_stack);
19051905

19061906
// requireds
1907-
argv[2] = rb_ary_new();
1907+
argv[2] = rb_ary_new_capa(cast->requireds.size);
19081908
for (size_t index = 0; index < cast->requireds.size; index++) {
19091909
rb_ary_push(argv[2], rb_ary_pop(value_stack));
19101910
}
@@ -2124,7 +2124,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
21242124
argv[0] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
21252125

21262126
// elements
2127-
argv[1] = rb_ary_new();
2127+
argv[1] = rb_ary_new_capa(cast->elements.size);
21282128
for (size_t index = 0; index < cast->elements.size; index++) {
21292129
rb_ary_push(argv[1], rb_ary_pop(value_stack));
21302130
}
@@ -2147,7 +2147,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
21472147
argv[0] = rb_ary_pop(value_stack);
21482148

21492149
// assocs
2150-
argv[1] = rb_ary_new();
2150+
argv[1] = rb_ary_new_capa(cast->assocs.size);
21512151
for (size_t index = 0; index < cast->assocs.size; index++) {
21522152
rb_ary_push(argv[1], rb_ary_pop(value_stack));
21532153
}
@@ -2341,7 +2341,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
23412341
argv[0] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
23422342

23432343
// parts
2344-
argv[1] = rb_ary_new();
2344+
argv[1] = rb_ary_new_capa(cast->parts.size);
23452345
for (size_t index = 0; index < cast->parts.size; index++) {
23462346
rb_ary_push(argv[1], rb_ary_pop(value_stack));
23472347
}
@@ -2367,7 +2367,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
23672367
argv[0] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
23682368

23692369
// parts
2370-
argv[1] = rb_ary_new();
2370+
argv[1] = rb_ary_new_capa(cast->parts.size);
23712371
for (size_t index = 0; index < cast->parts.size; index++) {
23722372
rb_ary_push(argv[1], rb_ary_pop(value_stack));
23732373
}
@@ -2390,7 +2390,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
23902390
argv[0] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
23912391

23922392
// parts
2393-
argv[1] = rb_ary_new();
2393+
argv[1] = rb_ary_new_capa(cast->parts.size);
23942394
for (size_t index = 0; index < cast->parts.size; index++) {
23952395
rb_ary_push(argv[1], rb_ary_pop(value_stack));
23962396
}
@@ -2413,7 +2413,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
24132413
argv[0] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
24142414

24152415
// parts
2416-
argv[1] = rb_ary_new();
2416+
argv[1] = rb_ary_new_capa(cast->parts.size);
24172417
for (size_t index = 0; index < cast->parts.size; index++) {
24182418
rb_ary_push(argv[1], rb_ary_pop(value_stack));
24192419
}
@@ -2433,7 +2433,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
24332433
VALUE argv[2];
24342434

24352435
// elements
2436-
argv[0] = rb_ary_new();
2436+
argv[0] = rb_ary_new_capa(cast->elements.size);
24372437
for (size_t index = 0; index < cast->elements.size; index++) {
24382438
rb_ary_push(argv[0], rb_ary_pop(value_stack));
24392439
}
@@ -2484,7 +2484,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
24842484
VALUE argv[5];
24852485

24862486
// locals
2487-
argv[0] = rb_ary_new();
2487+
argv[0] = rb_ary_new_capa(cast->locals.size);
24882488
for (size_t index = 0; index < cast->locals.size; index++) {
24892489
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
24902490
}
@@ -2675,7 +2675,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
26752675
VALUE argv[6];
26762676

26772677
// locals
2678-
argv[0] = rb_ary_new();
2678+
argv[0] = rb_ary_new_capa(cast->locals.size);
26792679
for (size_t index = 0; index < cast->locals.size; index++) {
26802680
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
26812681
}
@@ -2704,7 +2704,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
27042704
VALUE argv[6];
27052705

27062706
// targets
2707-
argv[0] = rb_ary_new();
2707+
argv[0] = rb_ary_new_capa(cast->targets.size);
27082708
for (size_t index = 0; index < cast->targets.size; index++) {
27092709
rb_ary_push(argv[0], rb_ary_pop(value_stack));
27102710
}
@@ -2830,19 +2830,19 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
28302830
VALUE argv[8];
28312831

28322832
// requireds
2833-
argv[0] = rb_ary_new();
2833+
argv[0] = rb_ary_new_capa(cast->requireds.size);
28342834
for (size_t index = 0; index < cast->requireds.size; index++) {
28352835
rb_ary_push(argv[0], rb_ary_pop(value_stack));
28362836
}
28372837

28382838
// optionals
2839-
argv[1] = rb_ary_new();
2839+
argv[1] = rb_ary_new_capa(cast->optionals.size);
28402840
for (size_t index = 0; index < cast->optionals.size; index++) {
28412841
rb_ary_push(argv[1], rb_ary_pop(value_stack));
28422842
}
28432843

28442844
// posts
2845-
argv[2] = rb_ary_new();
2845+
argv[2] = rb_ary_new_capa(cast->posts.size);
28462846
for (size_t index = 0; index < cast->posts.size; index++) {
28472847
rb_ary_push(argv[2], rb_ary_pop(value_stack));
28482848
}
@@ -2851,7 +2851,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
28512851
argv[3] = rb_ary_pop(value_stack);
28522852

28532853
// keywords
2854-
argv[4] = rb_ary_new();
2854+
argv[4] = rb_ary_new_capa(cast->keywords.size);
28552855
for (size_t index = 0; index < cast->keywords.size; index++) {
28562856
rb_ary_push(argv[4], rb_ary_pop(value_stack));
28572857
}
@@ -2980,7 +2980,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
29802980
VALUE argv[3];
29812981

29822982
// locals
2983-
argv[0] = rb_ary_new();
2983+
argv[0] = rb_ary_new_capa(cast->locals.size);
29842984
for (size_t index = 0; index < cast->locals.size; index++) {
29852985
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
29862986
}
@@ -3072,7 +3072,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
30723072
VALUE argv[4];
30733073

30743074
// parameters
3075-
argv[0] = rb_ary_new();
3075+
argv[0] = rb_ary_new_capa(cast->parameters.size);
30763076
for (size_t index = 0; index < cast->parameters.size; index++) {
30773077
rb_ary_push(argv[0], rb_ary_pop(value_stack));
30783078
}
@@ -3132,7 +3132,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
31323132
argv[0] = yp_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
31333133

31343134
// exceptions
3135-
argv[1] = rb_ary_new();
3135+
argv[1] = rb_ary_new_capa(cast->exceptions.size);
31363136
for (size_t index = 0; index < cast->exceptions.size; index++) {
31373137
rb_ary_push(argv[1], rb_ary_pop(value_stack));
31383138
}
@@ -3215,7 +3215,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
32153215
VALUE argv[7];
32163216

32173217
// locals
3218-
argv[0] = rb_ary_new();
3218+
argv[0] = rb_ary_new_capa(cast->locals.size);
32193219
for (size_t index = 0; index < cast->locals.size; index++) {
32203220
rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
32213221
}
@@ -3298,7 +3298,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
32983298
VALUE argv[2];
32993299

33003300
// body
3301-
argv[0] = rb_ary_new();
3301+
argv[0] = rb_ary_new_capa(cast->body.size);
33023302
for (size_t index = 0; index < cast->body.size; index++) {
33033303
rb_ary_push(argv[0], rb_ary_pop(value_stack));
33043304
}
@@ -3413,7 +3413,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
34133413
VALUE argv[3];
34143414

34153415
// names
3416-
argv[0] = rb_ary_new();
3416+
argv[0] = rb_ary_new_capa(cast->names.size);
34173417
for (size_t index = 0; index < cast->names.size; index++) {
34183418
rb_ary_push(argv[0], rb_ary_pop(value_stack));
34193419
}
@@ -3485,7 +3485,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
34853485
argv[0] = yp_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
34863486

34873487
// conditions
3488-
argv[1] = rb_ary_new();
3488+
argv[1] = rb_ary_new_capa(cast->conditions.size);
34893489
for (size_t index = 0; index < cast->conditions.size; index++) {
34903490
rb_ary_push(argv[1], rb_ary_pop(value_stack));
34913491
}

yarp/yarp.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,12 @@ yp_flip_flop(yp_node_t *node) {
459459
}
460460
case YP_NODE_RANGE_NODE: {
461461
yp_range_node_t *cast = (yp_range_node_t *) node;
462-
yp_flip_flop(cast->left);
463-
yp_flip_flop(cast->right);
462+
if (cast->left) {
463+
yp_flip_flop(cast->left);
464+
}
465+
if (cast->right) {
466+
yp_flip_flop(cast->right);
467+
}
464468

465469
// Here we change the range node into a flip flop node. We can do
466470
// this since the nodes are exactly the same except for the type.

0 commit comments

Comments
 (0)