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.
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 rb_cYARPAliasNode;
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 YP_ALIAS_NODE: {
250
- yp_alias_node_t *cast = (yp_alias_node_t *) node;
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 YP_ALIAS_NODE: {
977
- yp_alias_node_t *cast = (yp_alias_node_t *) node;
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, rb_cYARPAliasNode));
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 >> 1);
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 >> 1);
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 >> 1);
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 >> 1);
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 >> 1);
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[1];
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[0] = yp_location_new(parser, node->location.start, node->location.end, source);
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
- rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPIntegerNode));
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 >> 1);
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[2] = rb_ary_new_capa(cast->posts.size);
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[2], rb_ary_pop(value_stack));
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 >> 1);
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 >> 1);
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[5];
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[0] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
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[1] = yp_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
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[2] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
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[3] = yp_string_new(&cast->unescaped, encoding);
4303
+ argv[4] = yp_string_new(&cast->unescaped, encoding);
4143
4304
 
4144
4305
  // location
4145
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
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(5, argv, rb_cYARPStringNode));
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 >> 1);
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 >> 1);
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
- rb_cYARPAliasNode = rb_define_class_under(rb_cYARP, "AliasNode", rb_cYARPNode);
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
- return parse_lex_input(&input, check_string(filepath), true);
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
  }
data/ext/yarp/extension.h CHANGED
@@ -1,7 +1,7 @@
1
1
  #ifndef YARP_EXT_NODE_H
2
2
  #define YARP_EXT_NODE_H
3
3
 
4
- #define EXPECTED_YARP_VERSION "0.11.0"
4
+ #define EXPECTED_YARP_VERSION "0.12.0"
5
5
 
6
6
  #include <ruby.h>
7
7
  #include <ruby/encoding.h>