yarp 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
}
|