yarp 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -1
- data/config.yml +105 -6
- data/ext/yarp/api_node.c +200 -34
- data/ext/yarp/extension.c +8 -1
- data/ext/yarp/extension.h +1 -1
- data/include/yarp/ast.h +246 -293
- data/include/yarp/diagnostic.h +7 -2
- data/include/yarp/enc/yp_encoding.h +1 -1
- data/include/yarp/parser.h +44 -16
- data/include/yarp/util/yp_char.h +21 -5
- data/include/yarp/version.h +2 -2
- data/lib/yarp/mutation_visitor.rb +28 -3
- data/lib/yarp/node.rb +3507 -85
- data/lib/yarp/serialize.rb +146 -136
- data/lib/yarp.rb +57 -42
- data/src/diagnostic.c +6 -1
- data/src/enc/yp_unicode.c +5 -5
- data/src/node.c +87 -8
- data/src/prettyprint.c +85 -21
- data/src/serialize.c +59 -19
- data/src/util/yp_char.c +57 -9
- data/src/util/yp_constant_pool.c +69 -18
- data/src/yarp.c +1528 -1018
- data/yarp.gemspec +1 -1
- metadata +3 -3
data/ext/yarp/api_node.c
CHANGED
@@ -14,7 +14,8 @@ extern VALUE rb_cYARPSource;
|
|
14
14
|
extern VALUE rb_cYARPToken;
|
15
15
|
extern VALUE rb_cYARPLocation;
|
16
16
|
|
17
|
-
static VALUE
|
17
|
+
static VALUE rb_cYARPAliasGlobalVariableNode;
|
18
|
+
static VALUE rb_cYARPAliasMethodNode;
|
18
19
|
static VALUE rb_cYARPAlternationPatternNode;
|
19
20
|
static VALUE rb_cYARPAndNode;
|
20
21
|
static VALUE rb_cYARPArgumentsNode;
|
@@ -79,6 +80,7 @@ static VALUE rb_cYARPHashNode;
|
|
79
80
|
static VALUE rb_cYARPHashPatternNode;
|
80
81
|
static VALUE rb_cYARPIfNode;
|
81
82
|
static VALUE rb_cYARPImaginaryNode;
|
83
|
+
static VALUE rb_cYARPImplicitNode;
|
82
84
|
static VALUE rb_cYARPInNode;
|
83
85
|
static VALUE rb_cYARPInstanceVariableAndWriteNode;
|
84
86
|
static VALUE rb_cYARPInstanceVariableOperatorWriteNode;
|
@@ -87,6 +89,7 @@ static VALUE rb_cYARPInstanceVariableReadNode;
|
|
87
89
|
static VALUE rb_cYARPInstanceVariableTargetNode;
|
88
90
|
static VALUE rb_cYARPInstanceVariableWriteNode;
|
89
91
|
static VALUE rb_cYARPIntegerNode;
|
92
|
+
static VALUE rb_cYARPInterpolatedMatchLastLineNode;
|
90
93
|
static VALUE rb_cYARPInterpolatedRegularExpressionNode;
|
91
94
|
static VALUE rb_cYARPInterpolatedStringNode;
|
92
95
|
static VALUE rb_cYARPInterpolatedSymbolNode;
|
@@ -101,8 +104,10 @@ static VALUE rb_cYARPLocalVariableOrWriteNode;
|
|
101
104
|
static VALUE rb_cYARPLocalVariableReadNode;
|
102
105
|
static VALUE rb_cYARPLocalVariableTargetNode;
|
103
106
|
static VALUE rb_cYARPLocalVariableWriteNode;
|
107
|
+
static VALUE rb_cYARPMatchLastLineNode;
|
104
108
|
static VALUE rb_cYARPMatchPredicateNode;
|
105
109
|
static VALUE rb_cYARPMatchRequiredNode;
|
110
|
+
static VALUE rb_cYARPMatchWriteNode;
|
106
111
|
static VALUE rb_cYARPMissingNode;
|
107
112
|
static VALUE rb_cYARPModuleNode;
|
108
113
|
static VALUE rb_cYARPMultiTargetNode;
|
@@ -246,8 +251,15 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
246
251
|
|
247
252
|
switch (YP_NODE_TYPE(node)) {
|
248
253
|
#line 111 "api_node.c.erb"
|
249
|
-
case
|
250
|
-
|
254
|
+
case YP_ALIAS_GLOBAL_VARIABLE_NODE: {
|
255
|
+
yp_alias_global_variable_node_t *cast = (yp_alias_global_variable_node_t *) node;
|
256
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->new_name);
|
257
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->old_name);
|
258
|
+
break;
|
259
|
+
}
|
260
|
+
#line 111 "api_node.c.erb"
|
261
|
+
case YP_ALIAS_METHOD_NODE: {
|
262
|
+
yp_alias_method_node_t *cast = (yp_alias_method_node_t *) node;
|
251
263
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->new_name);
|
252
264
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->old_name);
|
253
265
|
break;
|
@@ -618,6 +630,12 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
618
630
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->numeric);
|
619
631
|
break;
|
620
632
|
}
|
633
|
+
#line 111 "api_node.c.erb"
|
634
|
+
case YP_IMPLICIT_NODE: {
|
635
|
+
yp_implicit_node_t *cast = (yp_implicit_node_t *) node;
|
636
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
|
637
|
+
break;
|
638
|
+
}
|
621
639
|
#line 111 "api_node.c.erb"
|
622
640
|
case YP_IN_NODE: {
|
623
641
|
yp_in_node_t *cast = (yp_in_node_t *) node;
|
@@ -649,6 +667,14 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
649
667
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
|
650
668
|
break;
|
651
669
|
}
|
670
|
+
#line 111 "api_node.c.erb"
|
671
|
+
case YP_INTERPOLATED_MATCH_LAST_LINE_NODE: {
|
672
|
+
yp_interpolated_match_last_line_node_t *cast = (yp_interpolated_match_last_line_node_t *) node;
|
673
|
+
for (size_t index = 0; index < cast->parts.size; index++) {
|
674
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->parts.nodes[index]);
|
675
|
+
}
|
676
|
+
break;
|
677
|
+
}
|
652
678
|
#line 111 "api_node.c.erb"
|
653
679
|
case YP_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
|
654
680
|
yp_interpolated_regular_expression_node_t *cast = (yp_interpolated_regular_expression_node_t *) node;
|
@@ -740,6 +766,12 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
740
766
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->pattern);
|
741
767
|
break;
|
742
768
|
}
|
769
|
+
#line 111 "api_node.c.erb"
|
770
|
+
case YP_MATCH_WRITE_NODE: {
|
771
|
+
yp_match_write_node_t *cast = (yp_match_write_node_t *) node;
|
772
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->call);
|
773
|
+
break;
|
774
|
+
}
|
743
775
|
#line 111 "api_node.c.erb"
|
744
776
|
case YP_MODULE_NODE: {
|
745
777
|
yp_module_node_t *cast = (yp_module_node_t *) node;
|
@@ -792,10 +824,10 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
792
824
|
for (size_t index = 0; index < cast->optionals.size; index++) {
|
793
825
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->optionals.nodes[index]);
|
794
826
|
}
|
827
|
+
yp_node_stack_push(&node_stack, (yp_node_t *) cast->rest);
|
795
828
|
for (size_t index = 0; index < cast->posts.size; index++) {
|
796
829
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->posts.nodes[index]);
|
797
830
|
}
|
798
|
-
yp_node_stack_push(&node_stack, (yp_node_t *) cast->rest);
|
799
831
|
for (size_t index = 0; index < cast->keywords.size; index++) {
|
800
832
|
yp_node_stack_push(&node_stack, (yp_node_t *) cast->keywords.nodes[index]);
|
801
833
|
}
|
@@ -973,8 +1005,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
973
1005
|
|
974
1006
|
switch (YP_NODE_TYPE(node)) {
|
975
1007
|
#line 137 "api_node.c.erb"
|
976
|
-
case
|
977
|
-
|
1008
|
+
case YP_ALIAS_GLOBAL_VARIABLE_NODE: {
|
1009
|
+
yp_alias_global_variable_node_t *cast = (yp_alias_global_variable_node_t *) node;
|
978
1010
|
VALUE argv[4];
|
979
1011
|
|
980
1012
|
// new_name
|
@@ -992,7 +1024,30 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
992
1024
|
// location
|
993
1025
|
argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
|
994
1026
|
|
995
|
-
rb_ary_push(value_stack, rb_class_new_instance(4, argv,
|
1027
|
+
rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPAliasGlobalVariableNode));
|
1028
|
+
break;
|
1029
|
+
}
|
1030
|
+
#line 137 "api_node.c.erb"
|
1031
|
+
case YP_ALIAS_METHOD_NODE: {
|
1032
|
+
yp_alias_method_node_t *cast = (yp_alias_method_node_t *) node;
|
1033
|
+
VALUE argv[4];
|
1034
|
+
|
1035
|
+
// new_name
|
1036
|
+
#line 148 "api_node.c.erb"
|
1037
|
+
argv[0] = rb_ary_pop(value_stack);
|
1038
|
+
|
1039
|
+
// old_name
|
1040
|
+
#line 148 "api_node.c.erb"
|
1041
|
+
argv[1] = rb_ary_pop(value_stack);
|
1042
|
+
|
1043
|
+
// keyword_loc
|
1044
|
+
#line 173 "api_node.c.erb"
|
1045
|
+
argv[2] = yp_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
|
1046
|
+
|
1047
|
+
// location
|
1048
|
+
argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
|
1049
|
+
|
1050
|
+
rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPAliasMethodNode));
|
996
1051
|
break;
|
997
1052
|
}
|
998
1053
|
#line 137 "api_node.c.erb"
|
@@ -1385,7 +1440,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
1385
1440
|
|
1386
1441
|
// flags
|
1387
1442
|
#line 182 "api_node.c.erb"
|
1388
|
-
argv[6] = ULONG2NUM(node->flags >>
|
1443
|
+
argv[6] = ULONG2NUM(node->flags >> 2);
|
1389
1444
|
|
1390
1445
|
// read_name
|
1391
1446
|
#line 157 "api_node.c.erb"
|
@@ -1444,7 +1499,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
1444
1499
|
|
1445
1500
|
// flags
|
1446
1501
|
#line 182 "api_node.c.erb"
|
1447
|
-
argv[7] = ULONG2NUM(node->flags >>
|
1502
|
+
argv[7] = ULONG2NUM(node->flags >> 2);
|
1448
1503
|
|
1449
1504
|
// name
|
1450
1505
|
#line 157 "api_node.c.erb"
|
@@ -1487,7 +1542,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
1487
1542
|
|
1488
1543
|
// flags
|
1489
1544
|
#line 182 "api_node.c.erb"
|
1490
|
-
argv[6] = ULONG2NUM(node->flags >>
|
1545
|
+
argv[6] = ULONG2NUM(node->flags >> 2);
|
1491
1546
|
|
1492
1547
|
// read_name
|
1493
1548
|
#line 157 "api_node.c.erb"
|
@@ -1547,7 +1602,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
1547
1602
|
|
1548
1603
|
// flags
|
1549
1604
|
#line 182 "api_node.c.erb"
|
1550
|
-
argv[6] = ULONG2NUM(node->flags >>
|
1605
|
+
argv[6] = ULONG2NUM(node->flags >> 2);
|
1551
1606
|
|
1552
1607
|
// read_name
|
1553
1608
|
#line 157 "api_node.c.erb"
|
@@ -2363,7 +2418,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
2363
2418
|
|
2364
2419
|
// flags
|
2365
2420
|
#line 182 "api_node.c.erb"
|
2366
|
-
argv[3] = ULONG2NUM(node->flags >>
|
2421
|
+
argv[3] = ULONG2NUM(node->flags >> 2);
|
2367
2422
|
|
2368
2423
|
// location
|
2369
2424
|
argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -2708,6 +2763,20 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
2708
2763
|
rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPImaginaryNode));
|
2709
2764
|
break;
|
2710
2765
|
}
|
2766
|
+
#line 137 "api_node.c.erb"
|
2767
|
+
case YP_IMPLICIT_NODE: {
|
2768
|
+
VALUE argv[2];
|
2769
|
+
|
2770
|
+
// value
|
2771
|
+
#line 148 "api_node.c.erb"
|
2772
|
+
argv[0] = rb_ary_pop(value_stack);
|
2773
|
+
|
2774
|
+
// location
|
2775
|
+
argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
|
2776
|
+
|
2777
|
+
rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPImplicitNode));
|
2778
|
+
break;
|
2779
|
+
}
|
2711
2780
|
#line 137 "api_node.c.erb"
|
2712
2781
|
case YP_IN_NODE: {
|
2713
2782
|
yp_in_node_t *cast = (yp_in_node_t *) node;
|
@@ -2886,12 +2955,46 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
2886
2955
|
}
|
2887
2956
|
#line 137 "api_node.c.erb"
|
2888
2957
|
case YP_INTEGER_NODE: {
|
2889
|
-
VALUE argv[
|
2958
|
+
VALUE argv[2];
|
2959
|
+
|
2960
|
+
// flags
|
2961
|
+
#line 182 "api_node.c.erb"
|
2962
|
+
argv[0] = ULONG2NUM(node->flags >> 2);
|
2890
2963
|
|
2891
2964
|
// location
|
2892
|
-
argv[
|
2965
|
+
argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
|
2966
|
+
|
2967
|
+
rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPIntegerNode));
|
2968
|
+
break;
|
2969
|
+
}
|
2970
|
+
#line 137 "api_node.c.erb"
|
2971
|
+
case YP_INTERPOLATED_MATCH_LAST_LINE_NODE: {
|
2972
|
+
yp_interpolated_match_last_line_node_t *cast = (yp_interpolated_match_last_line_node_t *) node;
|
2973
|
+
VALUE argv[5];
|
2974
|
+
|
2975
|
+
// opening_loc
|
2976
|
+
#line 173 "api_node.c.erb"
|
2977
|
+
argv[0] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
|
2978
|
+
|
2979
|
+
// parts
|
2980
|
+
#line 151 "api_node.c.erb"
|
2981
|
+
argv[1] = rb_ary_new_capa(cast->parts.size);
|
2982
|
+
for (size_t index = 0; index < cast->parts.size; index++) {
|
2983
|
+
rb_ary_push(argv[1], rb_ary_pop(value_stack));
|
2984
|
+
}
|
2985
|
+
|
2986
|
+
// closing_loc
|
2987
|
+
#line 173 "api_node.c.erb"
|
2988
|
+
argv[2] = yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
|
2989
|
+
|
2990
|
+
// flags
|
2991
|
+
#line 182 "api_node.c.erb"
|
2992
|
+
argv[3] = ULONG2NUM(node->flags >> 2);
|
2893
2993
|
|
2894
|
-
|
2994
|
+
// location
|
2995
|
+
argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
|
2996
|
+
|
2997
|
+
rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInterpolatedMatchLastLineNode));
|
2895
2998
|
break;
|
2896
2999
|
}
|
2897
3000
|
#line 137 "api_node.c.erb"
|
@@ -2916,7 +3019,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
2916
3019
|
|
2917
3020
|
// flags
|
2918
3021
|
#line 182 "api_node.c.erb"
|
2919
|
-
argv[3] = ULONG2NUM(node->flags >>
|
3022
|
+
argv[3] = ULONG2NUM(node->flags >> 2);
|
2920
3023
|
|
2921
3024
|
// location
|
2922
3025
|
argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -3278,6 +3381,37 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
3278
3381
|
rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPLocalVariableWriteNode));
|
3279
3382
|
break;
|
3280
3383
|
}
|
3384
|
+
#line 137 "api_node.c.erb"
|
3385
|
+
case YP_MATCH_LAST_LINE_NODE: {
|
3386
|
+
yp_match_last_line_node_t *cast = (yp_match_last_line_node_t *) node;
|
3387
|
+
VALUE argv[6];
|
3388
|
+
|
3389
|
+
// opening_loc
|
3390
|
+
#line 173 "api_node.c.erb"
|
3391
|
+
argv[0] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
|
3392
|
+
|
3393
|
+
// content_loc
|
3394
|
+
#line 173 "api_node.c.erb"
|
3395
|
+
argv[1] = yp_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
|
3396
|
+
|
3397
|
+
// closing_loc
|
3398
|
+
#line 173 "api_node.c.erb"
|
3399
|
+
argv[2] = yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
|
3400
|
+
|
3401
|
+
// unescaped
|
3402
|
+
#line 157 "api_node.c.erb"
|
3403
|
+
argv[3] = yp_string_new(&cast->unescaped, encoding);
|
3404
|
+
|
3405
|
+
// flags
|
3406
|
+
#line 182 "api_node.c.erb"
|
3407
|
+
argv[4] = ULONG2NUM(node->flags >> 2);
|
3408
|
+
|
3409
|
+
// location
|
3410
|
+
argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
|
3411
|
+
|
3412
|
+
rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPMatchLastLineNode));
|
3413
|
+
break;
|
3414
|
+
}
|
3281
3415
|
#line 137 "api_node.c.erb"
|
3282
3416
|
case YP_MATCH_PREDICATE_NODE: {
|
3283
3417
|
yp_match_predicate_node_t *cast = (yp_match_predicate_node_t *) node;
|
@@ -3324,6 +3458,29 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
3324
3458
|
rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPMatchRequiredNode));
|
3325
3459
|
break;
|
3326
3460
|
}
|
3461
|
+
#line 137 "api_node.c.erb"
|
3462
|
+
case YP_MATCH_WRITE_NODE: {
|
3463
|
+
yp_match_write_node_t *cast = (yp_match_write_node_t *) node;
|
3464
|
+
VALUE argv[3];
|
3465
|
+
|
3466
|
+
// call
|
3467
|
+
#line 148 "api_node.c.erb"
|
3468
|
+
argv[0] = rb_ary_pop(value_stack);
|
3469
|
+
|
3470
|
+
// locals
|
3471
|
+
#line 166 "api_node.c.erb"
|
3472
|
+
argv[1] = rb_ary_new_capa(cast->locals.size);
|
3473
|
+
for (size_t index = 0; index < cast->locals.size; index++) {
|
3474
|
+
assert(cast->locals.ids[index] != 0);
|
3475
|
+
rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
|
3476
|
+
}
|
3477
|
+
|
3478
|
+
// location
|
3479
|
+
argv[2] = yp_location_new(parser, node->location.start, node->location.end, source);
|
3480
|
+
|
3481
|
+
rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cYARPMatchWriteNode));
|
3482
|
+
break;
|
3483
|
+
}
|
3327
3484
|
#line 137 "api_node.c.erb"
|
3328
3485
|
case YP_MISSING_NODE: {
|
3329
3486
|
VALUE argv[1];
|
@@ -3567,17 +3724,17 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
3567
3724
|
rb_ary_push(argv[1], rb_ary_pop(value_stack));
|
3568
3725
|
}
|
3569
3726
|
|
3727
|
+
// rest
|
3728
|
+
#line 148 "api_node.c.erb"
|
3729
|
+
argv[2] = rb_ary_pop(value_stack);
|
3730
|
+
|
3570
3731
|
// posts
|
3571
3732
|
#line 151 "api_node.c.erb"
|
3572
|
-
argv[
|
3733
|
+
argv[3] = rb_ary_new_capa(cast->posts.size);
|
3573
3734
|
for (size_t index = 0; index < cast->posts.size; index++) {
|
3574
|
-
rb_ary_push(argv[
|
3735
|
+
rb_ary_push(argv[3], rb_ary_pop(value_stack));
|
3575
3736
|
}
|
3576
3737
|
|
3577
|
-
// rest
|
3578
|
-
#line 148 "api_node.c.erb"
|
3579
|
-
argv[3] = rb_ary_pop(value_stack);
|
3580
|
-
|
3581
3738
|
// keywords
|
3582
3739
|
#line 151 "api_node.c.erb"
|
3583
3740
|
argv[4] = rb_ary_new_capa(cast->keywords.size);
|
@@ -3764,7 +3921,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
3764
3921
|
|
3765
3922
|
// flags
|
3766
3923
|
#line 182 "api_node.c.erb"
|
3767
|
-
argv[3] = ULONG2NUM(node->flags >>
|
3924
|
+
argv[3] = ULONG2NUM(node->flags >> 2);
|
3768
3925
|
|
3769
3926
|
// location
|
3770
3927
|
argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -3819,7 +3976,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
3819
3976
|
|
3820
3977
|
// flags
|
3821
3978
|
#line 182 "api_node.c.erb"
|
3822
|
-
argv[4] = ULONG2NUM(node->flags >>
|
3979
|
+
argv[4] = ULONG2NUM(node->flags >> 2);
|
3823
3980
|
|
3824
3981
|
// location
|
3825
3982
|
argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -4123,28 +4280,32 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
4123
4280
|
#line 137 "api_node.c.erb"
|
4124
4281
|
case YP_STRING_NODE: {
|
4125
4282
|
yp_string_node_t *cast = (yp_string_node_t *) node;
|
4126
|
-
VALUE argv[
|
4283
|
+
VALUE argv[6];
|
4284
|
+
|
4285
|
+
// flags
|
4286
|
+
#line 182 "api_node.c.erb"
|
4287
|
+
argv[0] = ULONG2NUM(node->flags >> 2);
|
4127
4288
|
|
4128
4289
|
// opening_loc
|
4129
4290
|
#line 176 "api_node.c.erb"
|
4130
|
-
argv[
|
4291
|
+
argv[1] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
|
4131
4292
|
|
4132
4293
|
// content_loc
|
4133
4294
|
#line 173 "api_node.c.erb"
|
4134
|
-
argv[
|
4295
|
+
argv[2] = yp_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
|
4135
4296
|
|
4136
4297
|
// closing_loc
|
4137
4298
|
#line 176 "api_node.c.erb"
|
4138
|
-
argv[
|
4299
|
+
argv[3] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
|
4139
4300
|
|
4140
4301
|
// unescaped
|
4141
4302
|
#line 157 "api_node.c.erb"
|
4142
|
-
argv[
|
4303
|
+
argv[4] = yp_string_new(&cast->unescaped, encoding);
|
4143
4304
|
|
4144
4305
|
// location
|
4145
|
-
argv[
|
4306
|
+
argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
|
4146
4307
|
|
4147
|
-
rb_ary_push(value_stack, rb_class_new_instance(
|
4308
|
+
rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPStringNode));
|
4148
4309
|
break;
|
4149
4310
|
}
|
4150
4311
|
#line 137 "api_node.c.erb"
|
@@ -4291,7 +4452,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
4291
4452
|
|
4292
4453
|
// flags
|
4293
4454
|
#line 182 "api_node.c.erb"
|
4294
|
-
argv[4] = ULONG2NUM(node->flags >>
|
4455
|
+
argv[4] = ULONG2NUM(node->flags >> 2);
|
4295
4456
|
|
4296
4457
|
// location
|
4297
4458
|
argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -4348,7 +4509,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
4348
4509
|
|
4349
4510
|
// flags
|
4350
4511
|
#line 182 "api_node.c.erb"
|
4351
|
-
argv[4] = ULONG2NUM(node->flags >>
|
4512
|
+
argv[4] = ULONG2NUM(node->flags >> 2);
|
4352
4513
|
|
4353
4514
|
// location
|
4354
4515
|
argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
|
@@ -4423,7 +4584,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
|
|
4423
4584
|
|
4424
4585
|
void
|
4425
4586
|
Init_yarp_api_node(void) {
|
4426
|
-
|
4587
|
+
rb_cYARPAliasGlobalVariableNode = rb_define_class_under(rb_cYARP, "AliasGlobalVariableNode", rb_cYARPNode);
|
4588
|
+
rb_cYARPAliasMethodNode = rb_define_class_under(rb_cYARP, "AliasMethodNode", rb_cYARPNode);
|
4427
4589
|
rb_cYARPAlternationPatternNode = rb_define_class_under(rb_cYARP, "AlternationPatternNode", rb_cYARPNode);
|
4428
4590
|
rb_cYARPAndNode = rb_define_class_under(rb_cYARP, "AndNode", rb_cYARPNode);
|
4429
4591
|
rb_cYARPArgumentsNode = rb_define_class_under(rb_cYARP, "ArgumentsNode", rb_cYARPNode);
|
@@ -4488,6 +4650,7 @@ Init_yarp_api_node(void) {
|
|
4488
4650
|
rb_cYARPHashPatternNode = rb_define_class_under(rb_cYARP, "HashPatternNode", rb_cYARPNode);
|
4489
4651
|
rb_cYARPIfNode = rb_define_class_under(rb_cYARP, "IfNode", rb_cYARPNode);
|
4490
4652
|
rb_cYARPImaginaryNode = rb_define_class_under(rb_cYARP, "ImaginaryNode", rb_cYARPNode);
|
4653
|
+
rb_cYARPImplicitNode = rb_define_class_under(rb_cYARP, "ImplicitNode", rb_cYARPNode);
|
4491
4654
|
rb_cYARPInNode = rb_define_class_under(rb_cYARP, "InNode", rb_cYARPNode);
|
4492
4655
|
rb_cYARPInstanceVariableAndWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableAndWriteNode", rb_cYARPNode);
|
4493
4656
|
rb_cYARPInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableOperatorWriteNode", rb_cYARPNode);
|
@@ -4496,6 +4659,7 @@ Init_yarp_api_node(void) {
|
|
4496
4659
|
rb_cYARPInstanceVariableTargetNode = rb_define_class_under(rb_cYARP, "InstanceVariableTargetNode", rb_cYARPNode);
|
4497
4660
|
rb_cYARPInstanceVariableWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableWriteNode", rb_cYARPNode);
|
4498
4661
|
rb_cYARPIntegerNode = rb_define_class_under(rb_cYARP, "IntegerNode", rb_cYARPNode);
|
4662
|
+
rb_cYARPInterpolatedMatchLastLineNode = rb_define_class_under(rb_cYARP, "InterpolatedMatchLastLineNode", rb_cYARPNode);
|
4499
4663
|
rb_cYARPInterpolatedRegularExpressionNode = rb_define_class_under(rb_cYARP, "InterpolatedRegularExpressionNode", rb_cYARPNode);
|
4500
4664
|
rb_cYARPInterpolatedStringNode = rb_define_class_under(rb_cYARP, "InterpolatedStringNode", rb_cYARPNode);
|
4501
4665
|
rb_cYARPInterpolatedSymbolNode = rb_define_class_under(rb_cYARP, "InterpolatedSymbolNode", rb_cYARPNode);
|
@@ -4510,8 +4674,10 @@ Init_yarp_api_node(void) {
|
|
4510
4674
|
rb_cYARPLocalVariableReadNode = rb_define_class_under(rb_cYARP, "LocalVariableReadNode", rb_cYARPNode);
|
4511
4675
|
rb_cYARPLocalVariableTargetNode = rb_define_class_under(rb_cYARP, "LocalVariableTargetNode", rb_cYARPNode);
|
4512
4676
|
rb_cYARPLocalVariableWriteNode = rb_define_class_under(rb_cYARP, "LocalVariableWriteNode", rb_cYARPNode);
|
4677
|
+
rb_cYARPMatchLastLineNode = rb_define_class_under(rb_cYARP, "MatchLastLineNode", rb_cYARPNode);
|
4513
4678
|
rb_cYARPMatchPredicateNode = rb_define_class_under(rb_cYARP, "MatchPredicateNode", rb_cYARPNode);
|
4514
4679
|
rb_cYARPMatchRequiredNode = rb_define_class_under(rb_cYARP, "MatchRequiredNode", rb_cYARPNode);
|
4680
|
+
rb_cYARPMatchWriteNode = rb_define_class_under(rb_cYARP, "MatchWriteNode", rb_cYARPNode);
|
4515
4681
|
rb_cYARPMissingNode = rb_define_class_under(rb_cYARP, "MissingNode", rb_cYARPNode);
|
4516
4682
|
rb_cYARPModuleNode = rb_define_class_under(rb_cYARP, "ModuleNode", rb_cYARPNode);
|
4517
4683
|
rb_cYARPMultiTargetNode = rb_define_class_under(rb_cYARP, "MultiTargetNode", rb_cYARPNode);
|
data/ext/yarp/extension.c
CHANGED
@@ -413,7 +413,11 @@ parse_lex(int argc, VALUE *argv, VALUE self) {
|
|
413
413
|
|
414
414
|
yp_string_t input;
|
415
415
|
input_load_string(&input, string);
|
416
|
-
|
416
|
+
|
417
|
+
VALUE value = parse_lex_input(&input, check_string(filepath), true);
|
418
|
+
yp_string_free(&input);
|
419
|
+
|
420
|
+
return value;
|
417
421
|
}
|
418
422
|
|
419
423
|
// Parse and lex the given file and return a ParseResult instance.
|
@@ -530,6 +534,8 @@ profile_file(VALUE self, VALUE filepath) {
|
|
530
534
|
yp_node_destroy(&parser, node);
|
531
535
|
yp_parser_free(&parser);
|
532
536
|
|
537
|
+
yp_string_free(&input);
|
538
|
+
|
533
539
|
return Qnil;
|
534
540
|
}
|
535
541
|
|
@@ -547,6 +553,7 @@ parse_serialize_file_metadata(VALUE self, VALUE filepath, VALUE metadata) {
|
|
547
553
|
yp_parse_serialize(yp_string_source(&input), yp_string_length(&input), &buffer, check_string(metadata));
|
548
554
|
VALUE result = rb_str_new(yp_buffer_value(&buffer), yp_buffer_length(&buffer));
|
549
555
|
|
556
|
+
yp_string_free(&input);
|
550
557
|
yp_buffer_free(&buffer);
|
551
558
|
return result;
|
552
559
|
}
|