yarp 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
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>