yarp 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -1
  3. data/Makefile +5 -1
  4. data/README.md +4 -3
  5. data/config.yml +461 -150
  6. data/docs/configuration.md +1 -0
  7. data/docs/encoding.md +5 -5
  8. data/docs/ruby_api.md +2 -0
  9. data/docs/serialization.md +3 -3
  10. data/docs/testing.md +2 -2
  11. data/ext/yarp/api_node.c +810 -199
  12. data/ext/yarp/extension.c +94 -31
  13. data/ext/yarp/extension.h +2 -2
  14. data/include/yarp/ast.h +653 -150
  15. data/include/yarp/defines.h +2 -1
  16. data/include/yarp/diagnostic.h +3 -3
  17. data/include/yarp/enc/yp_encoding.h +10 -10
  18. data/include/yarp/node.h +10 -0
  19. data/include/yarp/parser.h +19 -19
  20. data/include/yarp/regexp.h +1 -1
  21. data/include/yarp/unescape.h +7 -5
  22. data/include/yarp/util/yp_buffer.h +3 -0
  23. data/include/yarp/util/yp_char.h +16 -16
  24. data/include/yarp/util/yp_constant_pool.h +2 -2
  25. data/include/yarp/util/yp_newline_list.h +7 -4
  26. data/include/yarp/util/yp_string.h +4 -4
  27. data/include/yarp/util/yp_string_list.h +0 -3
  28. data/include/yarp/util/yp_strpbrk.h +1 -1
  29. data/include/yarp/version.h +2 -2
  30. data/include/yarp.h +14 -3
  31. data/lib/yarp/desugar_visitor.rb +204 -0
  32. data/lib/yarp/ffi.rb +27 -1
  33. data/lib/yarp/lex_compat.rb +93 -25
  34. data/lib/yarp/mutation_visitor.rb +683 -0
  35. data/lib/yarp/node.rb +3121 -597
  36. data/lib/yarp/serialize.rb +198 -126
  37. data/lib/yarp.rb +53 -7
  38. data/src/diagnostic.c +1 -1
  39. data/src/enc/yp_big5.c +15 -42
  40. data/src/enc/yp_euc_jp.c +16 -43
  41. data/src/enc/yp_gbk.c +19 -46
  42. data/src/enc/yp_shift_jis.c +16 -43
  43. data/src/enc/yp_tables.c +36 -38
  44. data/src/enc/yp_unicode.c +20 -25
  45. data/src/enc/yp_windows_31j.c +16 -43
  46. data/src/node.c +1444 -836
  47. data/src/prettyprint.c +324 -103
  48. data/src/regexp.c +21 -21
  49. data/src/serialize.c +429 -276
  50. data/src/token_type.c +2 -2
  51. data/src/unescape.c +184 -136
  52. data/src/util/yp_buffer.c +7 -2
  53. data/src/util/yp_char.c +34 -34
  54. data/src/util/yp_constant_pool.c +4 -4
  55. data/src/util/yp_memchr.c +1 -1
  56. data/src/util/yp_newline_list.c +14 -3
  57. data/src/util/yp_string.c +22 -20
  58. data/src/util/yp_string_list.c +0 -6
  59. data/src/util/yp_strncasecmp.c +3 -6
  60. data/src/util/yp_strpbrk.c +8 -8
  61. data/src/yarp.c +1504 -615
  62. data/yarp.gemspec +3 -1
  63. metadata +4 -2
data/ext/yarp/api_node.c CHANGED
@@ -1,6 +1,6 @@
1
1
  /******************************************************************************/
2
- /* This file is generated by the bin/template script and should not be */
3
- /* modified manually. See */
2
+ /* This file is generated by the templates/template.rb script and should not */
3
+ /* be modified manually. See */
4
4
  /* templates/ext/yarp/api_node.c.erb */
5
5
  /* if you are looking to modify the */
6
6
  /* template */
@@ -17,7 +17,6 @@ extern VALUE rb_cYARPLocation;
17
17
  static VALUE rb_cYARPAliasNode;
18
18
  static VALUE rb_cYARPAlternationPatternNode;
19
19
  static VALUE rb_cYARPAndNode;
20
- static VALUE rb_cYARPAndWriteNode;
21
20
  static VALUE rb_cYARPArgumentsNode;
22
21
  static VALUE rb_cYARPArrayNode;
23
22
  static VALUE rb_cYARPArrayPatternNode;
@@ -37,11 +36,23 @@ static VALUE rb_cYARPCallOperatorWriteNode;
37
36
  static VALUE rb_cYARPCapturePatternNode;
38
37
  static VALUE rb_cYARPCaseNode;
39
38
  static VALUE rb_cYARPClassNode;
39
+ static VALUE rb_cYARPClassVariableAndWriteNode;
40
+ static VALUE rb_cYARPClassVariableOperatorWriteNode;
41
+ static VALUE rb_cYARPClassVariableOrWriteNode;
40
42
  static VALUE rb_cYARPClassVariableReadNode;
43
+ static VALUE rb_cYARPClassVariableTargetNode;
41
44
  static VALUE rb_cYARPClassVariableWriteNode;
45
+ static VALUE rb_cYARPConstantAndWriteNode;
46
+ static VALUE rb_cYARPConstantOperatorWriteNode;
47
+ static VALUE rb_cYARPConstantOrWriteNode;
48
+ static VALUE rb_cYARPConstantPathAndWriteNode;
42
49
  static VALUE rb_cYARPConstantPathNode;
50
+ static VALUE rb_cYARPConstantPathOperatorWriteNode;
51
+ static VALUE rb_cYARPConstantPathOrWriteNode;
52
+ static VALUE rb_cYARPConstantPathTargetNode;
43
53
  static VALUE rb_cYARPConstantPathWriteNode;
44
54
  static VALUE rb_cYARPConstantReadNode;
55
+ static VALUE rb_cYARPConstantTargetNode;
45
56
  static VALUE rb_cYARPConstantWriteNode;
46
57
  static VALUE rb_cYARPDefNode;
47
58
  static VALUE rb_cYARPDefinedNode;
@@ -57,14 +68,22 @@ static VALUE rb_cYARPForNode;
57
68
  static VALUE rb_cYARPForwardingArgumentsNode;
58
69
  static VALUE rb_cYARPForwardingParameterNode;
59
70
  static VALUE rb_cYARPForwardingSuperNode;
71
+ static VALUE rb_cYARPGlobalVariableAndWriteNode;
72
+ static VALUE rb_cYARPGlobalVariableOperatorWriteNode;
73
+ static VALUE rb_cYARPGlobalVariableOrWriteNode;
60
74
  static VALUE rb_cYARPGlobalVariableReadNode;
75
+ static VALUE rb_cYARPGlobalVariableTargetNode;
61
76
  static VALUE rb_cYARPGlobalVariableWriteNode;
62
77
  static VALUE rb_cYARPHashNode;
63
78
  static VALUE rb_cYARPHashPatternNode;
64
79
  static VALUE rb_cYARPIfNode;
65
80
  static VALUE rb_cYARPImaginaryNode;
66
81
  static VALUE rb_cYARPInNode;
82
+ static VALUE rb_cYARPInstanceVariableAndWriteNode;
83
+ static VALUE rb_cYARPInstanceVariableOperatorWriteNode;
84
+ static VALUE rb_cYARPInstanceVariableOrWriteNode;
67
85
  static VALUE rb_cYARPInstanceVariableReadNode;
86
+ static VALUE rb_cYARPInstanceVariableTargetNode;
68
87
  static VALUE rb_cYARPInstanceVariableWriteNode;
69
88
  static VALUE rb_cYARPIntegerNode;
70
89
  static VALUE rb_cYARPInterpolatedRegularExpressionNode;
@@ -75,7 +94,11 @@ static VALUE rb_cYARPKeywordHashNode;
75
94
  static VALUE rb_cYARPKeywordParameterNode;
76
95
  static VALUE rb_cYARPKeywordRestParameterNode;
77
96
  static VALUE rb_cYARPLambdaNode;
97
+ static VALUE rb_cYARPLocalVariableAndWriteNode;
98
+ static VALUE rb_cYARPLocalVariableOperatorWriteNode;
99
+ static VALUE rb_cYARPLocalVariableOrWriteNode;
78
100
  static VALUE rb_cYARPLocalVariableReadNode;
101
+ static VALUE rb_cYARPLocalVariableTargetNode;
79
102
  static VALUE rb_cYARPLocalVariableWriteNode;
80
103
  static VALUE rb_cYARPMatchPredicateNode;
81
104
  static VALUE rb_cYARPMatchRequiredNode;
@@ -86,10 +109,8 @@ static VALUE rb_cYARPNextNode;
86
109
  static VALUE rb_cYARPNilNode;
87
110
  static VALUE rb_cYARPNoKeywordsParameterNode;
88
111
  static VALUE rb_cYARPNumberedReferenceReadNode;
89
- static VALUE rb_cYARPOperatorWriteNode;
90
112
  static VALUE rb_cYARPOptionalParameterNode;
91
113
  static VALUE rb_cYARPOrNode;
92
- static VALUE rb_cYARPOrWriteNode;
93
114
  static VALUE rb_cYARPParametersNode;
94
115
  static VALUE rb_cYARPParenthesesNode;
95
116
  static VALUE rb_cYARPPinnedExpressionNode;
@@ -129,7 +150,7 @@ static VALUE rb_cYARPXStringNode;
129
150
  static VALUE rb_cYARPYieldNode;
130
151
 
131
152
  static VALUE
132
- yp_location_new(yp_parser_t *parser, const char *start, const char *end, VALUE source) {
153
+ yp_location_new(yp_parser_t *parser, const uint8_t *start, const uint8_t *end, VALUE source) {
133
154
  VALUE argv[] = { source, LONG2FIX(start - parser->start), LONG2FIX(end - start) };
134
155
  return rb_class_new_instance(3, argv, rb_cYARPLocation);
135
156
  }
@@ -141,7 +162,7 @@ yp_token_new(yp_parser_t *parser, yp_token_t *token, rb_encoding *encoding, VALU
141
162
 
142
163
  VALUE argv[] = {
143
164
  ID2SYM(type),
144
- rb_enc_str_new(token->start, token->end - token->start, encoding),
165
+ rb_enc_str_new((const char *) token->start, token->end - token->start, encoding),
145
166
  location
146
167
  };
147
168
 
@@ -150,13 +171,13 @@ yp_token_new(yp_parser_t *parser, yp_token_t *token, rb_encoding *encoding, VALU
150
171
 
151
172
  static VALUE
152
173
  yp_string_new(yp_string_t *string, rb_encoding *encoding) {
153
- return rb_enc_str_new(yp_string_source(string), yp_string_length(string), encoding);
174
+ return rb_enc_str_new((const char *) yp_string_source(string), yp_string_length(string), encoding);
154
175
  }
155
176
 
156
177
  // Create a YARP::Source object from the given parser.
157
178
  VALUE
158
179
  yp_source_new(yp_parser_t *parser) {
159
- VALUE source = rb_str_new(parser->start, parser->end - parser->start);
180
+ VALUE source = rb_str_new((const char *) parser->start, parser->end - parser->start);
160
181
  VALUE offsets = rb_ary_new_capa(parser->newline_list.size);
161
182
 
162
183
  for (size_t index = 0; index < parser->newline_list.size; index++) {
@@ -202,7 +223,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
202
223
  yp_constant_t constant = parser->constant_pool.constants[index];
203
224
 
204
225
  if (constant.id != 0) {
205
- constants[constant.id - 1] = rb_intern3(constant.start, constant.length, encoding);
226
+ constants[constant.id - 1] = rb_intern3((const char *) constant.start, constant.length, encoding);
206
227
  }
207
228
  }
208
229
 
@@ -243,13 +264,6 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
243
264
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->right);
244
265
  break;
245
266
  }
246
- #line 111 "api_node.c.erb"
247
- case YP_NODE_AND_WRITE_NODE: {
248
- yp_and_write_node_t *cast = (yp_and_write_node_t *) node;
249
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
250
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
251
- break;
252
- }
253
267
  #line 111 "api_node.c.erb"
254
268
  case YP_NODE_ARGUMENTS_NODE: {
255
269
  yp_arguments_node_t *cast = (yp_arguments_node_t *) node;
@@ -380,12 +394,55 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
380
394
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->body);
381
395
  break;
382
396
  }
397
+ #line 111 "api_node.c.erb"
398
+ case YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE: {
399
+ yp_class_variable_and_write_node_t *cast = (yp_class_variable_and_write_node_t *) node;
400
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
401
+ break;
402
+ }
403
+ #line 111 "api_node.c.erb"
404
+ case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
405
+ yp_class_variable_operator_write_node_t *cast = (yp_class_variable_operator_write_node_t *) node;
406
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
407
+ break;
408
+ }
409
+ #line 111 "api_node.c.erb"
410
+ case YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE: {
411
+ yp_class_variable_or_write_node_t *cast = (yp_class_variable_or_write_node_t *) node;
412
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
413
+ break;
414
+ }
383
415
  #line 111 "api_node.c.erb"
384
416
  case YP_NODE_CLASS_VARIABLE_WRITE_NODE: {
385
417
  yp_class_variable_write_node_t *cast = (yp_class_variable_write_node_t *) node;
386
418
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
387
419
  break;
388
420
  }
421
+ #line 111 "api_node.c.erb"
422
+ case YP_NODE_CONSTANT_AND_WRITE_NODE: {
423
+ yp_constant_and_write_node_t *cast = (yp_constant_and_write_node_t *) node;
424
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
425
+ break;
426
+ }
427
+ #line 111 "api_node.c.erb"
428
+ case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: {
429
+ yp_constant_operator_write_node_t *cast = (yp_constant_operator_write_node_t *) node;
430
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
431
+ break;
432
+ }
433
+ #line 111 "api_node.c.erb"
434
+ case YP_NODE_CONSTANT_OR_WRITE_NODE: {
435
+ yp_constant_or_write_node_t *cast = (yp_constant_or_write_node_t *) node;
436
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
437
+ break;
438
+ }
439
+ #line 111 "api_node.c.erb"
440
+ case YP_NODE_CONSTANT_PATH_AND_WRITE_NODE: {
441
+ yp_constant_path_and_write_node_t *cast = (yp_constant_path_and_write_node_t *) node;
442
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
443
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
444
+ break;
445
+ }
389
446
  #line 111 "api_node.c.erb"
390
447
  case YP_NODE_CONSTANT_PATH_NODE: {
391
448
  yp_constant_path_node_t *cast = (yp_constant_path_node_t *) node;
@@ -393,6 +450,27 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
393
450
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->child);
394
451
  break;
395
452
  }
453
+ #line 111 "api_node.c.erb"
454
+ case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
455
+ yp_constant_path_operator_write_node_t *cast = (yp_constant_path_operator_write_node_t *) node;
456
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
457
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
458
+ break;
459
+ }
460
+ #line 111 "api_node.c.erb"
461
+ case YP_NODE_CONSTANT_PATH_OR_WRITE_NODE: {
462
+ yp_constant_path_or_write_node_t *cast = (yp_constant_path_or_write_node_t *) node;
463
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
464
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
465
+ break;
466
+ }
467
+ #line 111 "api_node.c.erb"
468
+ case YP_NODE_CONSTANT_PATH_TARGET_NODE: {
469
+ yp_constant_path_target_node_t *cast = (yp_constant_path_target_node_t *) node;
470
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->parent);
471
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->child);
472
+ break;
473
+ }
396
474
  #line 111 "api_node.c.erb"
397
475
  case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
398
476
  yp_constant_path_write_node_t *cast = (yp_constant_path_write_node_t *) node;
@@ -476,6 +554,24 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
476
554
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->block);
477
555
  break;
478
556
  }
557
+ #line 111 "api_node.c.erb"
558
+ case YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE: {
559
+ yp_global_variable_and_write_node_t *cast = (yp_global_variable_and_write_node_t *) node;
560
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
561
+ break;
562
+ }
563
+ #line 111 "api_node.c.erb"
564
+ case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
565
+ yp_global_variable_operator_write_node_t *cast = (yp_global_variable_operator_write_node_t *) node;
566
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
567
+ break;
568
+ }
569
+ #line 111 "api_node.c.erb"
570
+ case YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE: {
571
+ yp_global_variable_or_write_node_t *cast = (yp_global_variable_or_write_node_t *) node;
572
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
573
+ break;
574
+ }
479
575
  #line 111 "api_node.c.erb"
480
576
  case YP_NODE_GLOBAL_VARIABLE_WRITE_NODE: {
481
577
  yp_global_variable_write_node_t *cast = (yp_global_variable_write_node_t *) node;
@@ -521,6 +617,24 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
521
617
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->statements);
522
618
  break;
523
619
  }
620
+ #line 111 "api_node.c.erb"
621
+ case YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE: {
622
+ yp_instance_variable_and_write_node_t *cast = (yp_instance_variable_and_write_node_t *) node;
623
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
624
+ break;
625
+ }
626
+ #line 111 "api_node.c.erb"
627
+ case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
628
+ yp_instance_variable_operator_write_node_t *cast = (yp_instance_variable_operator_write_node_t *) node;
629
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
630
+ break;
631
+ }
632
+ #line 111 "api_node.c.erb"
633
+ case YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE: {
634
+ yp_instance_variable_or_write_node_t *cast = (yp_instance_variable_or_write_node_t *) node;
635
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
636
+ break;
637
+ }
524
638
  #line 111 "api_node.c.erb"
525
639
  case YP_NODE_INSTANCE_VARIABLE_WRITE_NODE: {
526
640
  yp_instance_variable_write_node_t *cast = (yp_instance_variable_write_node_t *) node;
@@ -580,6 +694,24 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
580
694
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->body);
581
695
  break;
582
696
  }
697
+ #line 111 "api_node.c.erb"
698
+ case YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE: {
699
+ yp_local_variable_and_write_node_t *cast = (yp_local_variable_and_write_node_t *) node;
700
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
701
+ break;
702
+ }
703
+ #line 111 "api_node.c.erb"
704
+ case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
705
+ yp_local_variable_operator_write_node_t *cast = (yp_local_variable_operator_write_node_t *) node;
706
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
707
+ break;
708
+ }
709
+ #line 111 "api_node.c.erb"
710
+ case YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE: {
711
+ yp_local_variable_or_write_node_t *cast = (yp_local_variable_or_write_node_t *) node;
712
+ yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
713
+ break;
714
+ }
583
715
  #line 111 "api_node.c.erb"
584
716
  case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: {
585
717
  yp_local_variable_write_node_t *cast = (yp_local_variable_write_node_t *) node;
@@ -622,13 +754,6 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
622
754
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->arguments);
623
755
  break;
624
756
  }
625
- #line 111 "api_node.c.erb"
626
- case YP_NODE_OPERATOR_WRITE_NODE: {
627
- yp_operator_write_node_t *cast = (yp_operator_write_node_t *) node;
628
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
629
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
630
- break;
631
- }
632
757
  #line 111 "api_node.c.erb"
633
758
  case YP_NODE_OPTIONAL_PARAMETER_NODE: {
634
759
  yp_optional_parameter_node_t *cast = (yp_optional_parameter_node_t *) node;
@@ -642,13 +767,6 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
642
767
  yp_node_stack_push(&node_stack, (yp_node_t *) cast->right);
643
768
  break;
644
769
  }
645
- #line 111 "api_node.c.erb"
646
- case YP_NODE_OR_WRITE_NODE: {
647
- yp_or_write_node_t *cast = (yp_or_write_node_t *) node;
648
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->target);
649
- yp_node_stack_push(&node_stack, (yp_node_t *) cast->value);
650
- break;
651
- }
652
770
  #line 111 "api_node.c.erb"
653
771
  case YP_NODE_PARAMETERS_NODE: {
654
772
  yp_parameters_node_t *cast = (yp_parameters_node_t *) node;
@@ -898,26 +1016,6 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
898
1016
  rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPAndNode));
899
1017
  break;
900
1018
  }
901
- #line 137 "api_node.c.erb"
902
- case YP_NODE_AND_WRITE_NODE: {
903
- yp_and_write_node_t *cast = (yp_and_write_node_t *) node;
904
- VALUE argv[4];
905
-
906
- // target
907
- argv[0] = rb_ary_pop(value_stack);
908
-
909
- // value
910
- argv[1] = rb_ary_pop(value_stack);
911
-
912
- // operator_loc
913
- argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
914
-
915
- // location
916
- argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
917
-
918
- rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPAndWriteNode));
919
- break;
920
- }
921
1019
  #line 137 "api_node.c.erb"
922
1020
  case YP_NODE_ARGUMENTS_NODE: {
923
1021
  yp_arguments_node_t *cast = (yp_arguments_node_t *) node;
@@ -1268,8 +1366,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1268
1366
  // value
1269
1367
  argv[2] = rb_ary_pop(value_stack);
1270
1368
 
1271
- // operator_id
1272
- argv[3] = rb_id2sym(constants[cast->operator_id - 1]);
1369
+ // operator
1370
+ argv[3] = rb_id2sym(constants[cast->operator - 1]);
1273
1371
 
1274
1372
  // location
1275
1373
  argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
@@ -1329,7 +1427,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1329
1427
  #line 137 "api_node.c.erb"
1330
1428
  case YP_NODE_CLASS_NODE: {
1331
1429
  yp_class_node_t *cast = (yp_class_node_t *) node;
1332
- VALUE argv[8];
1430
+ VALUE argv[9];
1333
1431
 
1334
1432
  // locals
1335
1433
  argv[0] = rb_ary_new_capa(cast->locals.size);
@@ -1355,40 +1453,219 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1355
1453
  // end_keyword_loc
1356
1454
  argv[6] = yp_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
1357
1455
 
1456
+ // name
1457
+ argv[7] = yp_string_new(&cast->name, encoding);
1458
+
1358
1459
  // location
1359
- argv[7] = yp_location_new(parser, node->location.start, node->location.end, source);
1460
+ argv[8] = yp_location_new(parser, node->location.start, node->location.end, source);
1360
1461
 
1361
- rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cYARPClassNode));
1462
+ rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cYARPClassNode));
1463
+ break;
1464
+ }
1465
+ #line 137 "api_node.c.erb"
1466
+ case YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE: {
1467
+ yp_class_variable_and_write_node_t *cast = (yp_class_variable_and_write_node_t *) node;
1468
+ VALUE argv[5];
1469
+
1470
+ // name
1471
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1472
+
1473
+ // name_loc
1474
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1475
+
1476
+ // operator_loc
1477
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1478
+
1479
+ // value
1480
+ argv[3] = rb_ary_pop(value_stack);
1481
+
1482
+ // location
1483
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1484
+
1485
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPClassVariableAndWriteNode));
1486
+ break;
1487
+ }
1488
+ #line 137 "api_node.c.erb"
1489
+ case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
1490
+ yp_class_variable_operator_write_node_t *cast = (yp_class_variable_operator_write_node_t *) node;
1491
+ VALUE argv[6];
1492
+
1493
+ // name
1494
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1495
+
1496
+ // name_loc
1497
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1498
+
1499
+ // operator_loc
1500
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1501
+
1502
+ // value
1503
+ argv[3] = rb_ary_pop(value_stack);
1504
+
1505
+ // operator
1506
+ argv[4] = rb_id2sym(constants[cast->operator - 1]);
1507
+
1508
+ // location
1509
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
1510
+
1511
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPClassVariableOperatorWriteNode));
1512
+ break;
1513
+ }
1514
+ #line 137 "api_node.c.erb"
1515
+ case YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE: {
1516
+ yp_class_variable_or_write_node_t *cast = (yp_class_variable_or_write_node_t *) node;
1517
+ VALUE argv[5];
1518
+
1519
+ // name
1520
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1521
+
1522
+ // name_loc
1523
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1524
+
1525
+ // operator_loc
1526
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1527
+
1528
+ // value
1529
+ argv[3] = rb_ary_pop(value_stack);
1530
+
1531
+ // location
1532
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1533
+
1534
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPClassVariableOrWriteNode));
1362
1535
  break;
1363
1536
  }
1364
1537
  #line 137 "api_node.c.erb"
1365
1538
  case YP_NODE_CLASS_VARIABLE_READ_NODE: {
1366
- VALUE argv[1];
1539
+ yp_class_variable_read_node_t *cast = (yp_class_variable_read_node_t *) node;
1540
+ VALUE argv[2];
1541
+
1542
+ // name
1543
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1367
1544
 
1368
1545
  // location
1369
- argv[0] = yp_location_new(parser, node->location.start, node->location.end, source);
1546
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
1370
1547
 
1371
- rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPClassVariableReadNode));
1548
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPClassVariableReadNode));
1549
+ break;
1550
+ }
1551
+ #line 137 "api_node.c.erb"
1552
+ case YP_NODE_CLASS_VARIABLE_TARGET_NODE: {
1553
+ yp_class_variable_target_node_t *cast = (yp_class_variable_target_node_t *) node;
1554
+ VALUE argv[2];
1555
+
1556
+ // name
1557
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1558
+
1559
+ // location
1560
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
1561
+
1562
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPClassVariableTargetNode));
1372
1563
  break;
1373
1564
  }
1374
1565
  #line 137 "api_node.c.erb"
1375
1566
  case YP_NODE_CLASS_VARIABLE_WRITE_NODE: {
1376
1567
  yp_class_variable_write_node_t *cast = (yp_class_variable_write_node_t *) node;
1568
+ VALUE argv[5];
1569
+
1570
+ // name
1571
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1572
+
1573
+ // name_loc
1574
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1575
+
1576
+ // value
1577
+ argv[2] = rb_ary_pop(value_stack);
1578
+
1579
+ // operator_loc
1580
+ argv[3] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1581
+
1582
+ // location
1583
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1584
+
1585
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPClassVariableWriteNode));
1586
+ break;
1587
+ }
1588
+ #line 137 "api_node.c.erb"
1589
+ case YP_NODE_CONSTANT_AND_WRITE_NODE: {
1590
+ yp_constant_and_write_node_t *cast = (yp_constant_and_write_node_t *) node;
1377
1591
  VALUE argv[4];
1378
1592
 
1379
1593
  // name_loc
1380
1594
  argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1381
1595
 
1596
+ // operator_loc
1597
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1598
+
1382
1599
  // value
1383
- argv[1] = rb_ary_pop(value_stack);
1600
+ argv[2] = rb_ary_pop(value_stack);
1601
+
1602
+ // location
1603
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
1604
+
1605
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantAndWriteNode));
1606
+ break;
1607
+ }
1608
+ #line 137 "api_node.c.erb"
1609
+ case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: {
1610
+ yp_constant_operator_write_node_t *cast = (yp_constant_operator_write_node_t *) node;
1611
+ VALUE argv[5];
1612
+
1613
+ // name_loc
1614
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1384
1615
 
1385
1616
  // operator_loc
1386
- argv[2] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1617
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1618
+
1619
+ // value
1620
+ argv[2] = rb_ary_pop(value_stack);
1621
+
1622
+ // operator
1623
+ argv[3] = rb_id2sym(constants[cast->operator - 1]);
1624
+
1625
+ // location
1626
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1627
+
1628
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPConstantOperatorWriteNode));
1629
+ break;
1630
+ }
1631
+ #line 137 "api_node.c.erb"
1632
+ case YP_NODE_CONSTANT_OR_WRITE_NODE: {
1633
+ yp_constant_or_write_node_t *cast = (yp_constant_or_write_node_t *) node;
1634
+ VALUE argv[4];
1635
+
1636
+ // name_loc
1637
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1638
+
1639
+ // operator_loc
1640
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1641
+
1642
+ // value
1643
+ argv[2] = rb_ary_pop(value_stack);
1387
1644
 
1388
1645
  // location
1389
1646
  argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
1390
1647
 
1391
- rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPClassVariableWriteNode));
1648
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantOrWriteNode));
1649
+ break;
1650
+ }
1651
+ #line 137 "api_node.c.erb"
1652
+ case YP_NODE_CONSTANT_PATH_AND_WRITE_NODE: {
1653
+ yp_constant_path_and_write_node_t *cast = (yp_constant_path_and_write_node_t *) node;
1654
+ VALUE argv[4];
1655
+
1656
+ // target
1657
+ argv[0] = rb_ary_pop(value_stack);
1658
+
1659
+ // operator_loc
1660
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1661
+
1662
+ // value
1663
+ argv[2] = rb_ary_pop(value_stack);
1664
+
1665
+ // location
1666
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
1667
+
1668
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantPathAndWriteNode));
1392
1669
  break;
1393
1670
  }
1394
1671
  #line 137 "api_node.c.erb"
@@ -1411,6 +1688,69 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1411
1688
  rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantPathNode));
1412
1689
  break;
1413
1690
  }
1691
+ #line 137 "api_node.c.erb"
1692
+ case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
1693
+ yp_constant_path_operator_write_node_t *cast = (yp_constant_path_operator_write_node_t *) node;
1694
+ VALUE argv[5];
1695
+
1696
+ // target
1697
+ argv[0] = rb_ary_pop(value_stack);
1698
+
1699
+ // operator_loc
1700
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1701
+
1702
+ // value
1703
+ argv[2] = rb_ary_pop(value_stack);
1704
+
1705
+ // operator
1706
+ argv[3] = rb_id2sym(constants[cast->operator - 1]);
1707
+
1708
+ // location
1709
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1710
+
1711
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPConstantPathOperatorWriteNode));
1712
+ break;
1713
+ }
1714
+ #line 137 "api_node.c.erb"
1715
+ case YP_NODE_CONSTANT_PATH_OR_WRITE_NODE: {
1716
+ yp_constant_path_or_write_node_t *cast = (yp_constant_path_or_write_node_t *) node;
1717
+ VALUE argv[4];
1718
+
1719
+ // target
1720
+ argv[0] = rb_ary_pop(value_stack);
1721
+
1722
+ // operator_loc
1723
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1724
+
1725
+ // value
1726
+ argv[2] = rb_ary_pop(value_stack);
1727
+
1728
+ // location
1729
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
1730
+
1731
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantPathOrWriteNode));
1732
+ break;
1733
+ }
1734
+ #line 137 "api_node.c.erb"
1735
+ case YP_NODE_CONSTANT_PATH_TARGET_NODE: {
1736
+ yp_constant_path_target_node_t *cast = (yp_constant_path_target_node_t *) node;
1737
+ VALUE argv[4];
1738
+
1739
+ // parent
1740
+ argv[0] = rb_ary_pop(value_stack);
1741
+
1742
+ // child
1743
+ argv[1] = rb_ary_pop(value_stack);
1744
+
1745
+ // delimiter_loc
1746
+ argv[2] = yp_location_new(parser, cast->delimiter_loc.start, cast->delimiter_loc.end, source);
1747
+
1748
+ // location
1749
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
1750
+
1751
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPConstantPathTargetNode));
1752
+ break;
1753
+ }
1414
1754
  #line 137 "api_node.c.erb"
1415
1755
  case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
1416
1756
  yp_constant_path_write_node_t *cast = (yp_constant_path_write_node_t *) node;
@@ -1420,7 +1760,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1420
1760
  argv[0] = rb_ary_pop(value_stack);
1421
1761
 
1422
1762
  // operator_loc
1423
- argv[1] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1763
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1424
1764
 
1425
1765
  // value
1426
1766
  argv[2] = rb_ary_pop(value_stack);
@@ -1441,6 +1781,16 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1441
1781
  rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPConstantReadNode));
1442
1782
  break;
1443
1783
  }
1784
+ #line 137 "api_node.c.erb"
1785
+ case YP_NODE_CONSTANT_TARGET_NODE: {
1786
+ VALUE argv[1];
1787
+
1788
+ // location
1789
+ argv[0] = yp_location_new(parser, node->location.start, node->location.end, source);
1790
+
1791
+ rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPConstantTargetNode));
1792
+ break;
1793
+ }
1444
1794
  #line 137 "api_node.c.erb"
1445
1795
  case YP_NODE_CONSTANT_WRITE_NODE: {
1446
1796
  yp_constant_write_node_t *cast = (yp_constant_write_node_t *) node;
@@ -1453,7 +1803,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1453
1803
  argv[1] = rb_ary_pop(value_stack);
1454
1804
 
1455
1805
  // operator_loc
1456
- argv[2] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1806
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1457
1807
 
1458
1808
  // location
1459
1809
  argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
@@ -1748,6 +2098,69 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1748
2098
  rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPForwardingSuperNode));
1749
2099
  break;
1750
2100
  }
2101
+ #line 137 "api_node.c.erb"
2102
+ case YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE: {
2103
+ yp_global_variable_and_write_node_t *cast = (yp_global_variable_and_write_node_t *) node;
2104
+ VALUE argv[4];
2105
+
2106
+ // name_loc
2107
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2108
+
2109
+ // operator_loc
2110
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2111
+
2112
+ // value
2113
+ argv[2] = rb_ary_pop(value_stack);
2114
+
2115
+ // location
2116
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
2117
+
2118
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPGlobalVariableAndWriteNode));
2119
+ break;
2120
+ }
2121
+ #line 137 "api_node.c.erb"
2122
+ case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
2123
+ yp_global_variable_operator_write_node_t *cast = (yp_global_variable_operator_write_node_t *) node;
2124
+ VALUE argv[5];
2125
+
2126
+ // name_loc
2127
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2128
+
2129
+ // operator_loc
2130
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2131
+
2132
+ // value
2133
+ argv[2] = rb_ary_pop(value_stack);
2134
+
2135
+ // operator
2136
+ argv[3] = rb_id2sym(constants[cast->operator - 1]);
2137
+
2138
+ // location
2139
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
2140
+
2141
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPGlobalVariableOperatorWriteNode));
2142
+ break;
2143
+ }
2144
+ #line 137 "api_node.c.erb"
2145
+ case YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE: {
2146
+ yp_global_variable_or_write_node_t *cast = (yp_global_variable_or_write_node_t *) node;
2147
+ VALUE argv[4];
2148
+
2149
+ // name_loc
2150
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2151
+
2152
+ // operator_loc
2153
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2154
+
2155
+ // value
2156
+ argv[2] = rb_ary_pop(value_stack);
2157
+
2158
+ // location
2159
+ argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
2160
+
2161
+ rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPGlobalVariableOrWriteNode));
2162
+ break;
2163
+ }
1751
2164
  #line 137 "api_node.c.erb"
1752
2165
  case YP_NODE_GLOBAL_VARIABLE_READ_NODE: {
1753
2166
  VALUE argv[1];
@@ -1758,6 +2171,16 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1758
2171
  rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPGlobalVariableReadNode));
1759
2172
  break;
1760
2173
  }
2174
+ #line 137 "api_node.c.erb"
2175
+ case YP_NODE_GLOBAL_VARIABLE_TARGET_NODE: {
2176
+ VALUE argv[1];
2177
+
2178
+ // location
2179
+ argv[0] = yp_location_new(parser, node->location.start, node->location.end, source);
2180
+
2181
+ rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPGlobalVariableTargetNode));
2182
+ break;
2183
+ }
1761
2184
  #line 137 "api_node.c.erb"
1762
2185
  case YP_NODE_GLOBAL_VARIABLE_WRITE_NODE: {
1763
2186
  yp_global_variable_write_node_t *cast = (yp_global_variable_write_node_t *) node;
@@ -1766,11 +2189,11 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1766
2189
  // name_loc
1767
2190
  argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1768
2191
 
1769
- // operator_loc
1770
- argv[1] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1771
-
1772
2192
  // value
1773
- argv[2] = rb_ary_pop(value_stack);
2193
+ argv[1] = rb_ary_pop(value_stack);
2194
+
2195
+ // operator_loc
2196
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1774
2197
 
1775
2198
  // location
1776
2199
  argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
@@ -1821,105 +2244,198 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
1821
2244
  // opening_loc
1822
2245
  argv[3] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1823
2246
 
1824
- // closing_loc
1825
- argv[4] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2247
+ // closing_loc
2248
+ argv[4] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2249
+
2250
+ // location
2251
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2252
+
2253
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPHashPatternNode));
2254
+ break;
2255
+ }
2256
+ #line 137 "api_node.c.erb"
2257
+ case YP_NODE_IF_NODE: {
2258
+ yp_if_node_t *cast = (yp_if_node_t *) node;
2259
+ VALUE argv[6];
2260
+
2261
+ // if_keyword_loc
2262
+ argv[0] = cast->if_keyword_loc.start == NULL ? Qnil : yp_location_new(parser, cast->if_keyword_loc.start, cast->if_keyword_loc.end, source);
2263
+
2264
+ // predicate
2265
+ argv[1] = rb_ary_pop(value_stack);
2266
+
2267
+ // statements
2268
+ argv[2] = rb_ary_pop(value_stack);
2269
+
2270
+ // consequent
2271
+ argv[3] = rb_ary_pop(value_stack);
2272
+
2273
+ // end_keyword_loc
2274
+ argv[4] = cast->end_keyword_loc.start == NULL ? Qnil : yp_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2275
+
2276
+ // location
2277
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2278
+
2279
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPIfNode));
2280
+ break;
2281
+ }
2282
+ #line 137 "api_node.c.erb"
2283
+ case YP_NODE_IMAGINARY_NODE: {
2284
+ VALUE argv[2];
2285
+
2286
+ // numeric
2287
+ argv[0] = rb_ary_pop(value_stack);
2288
+
2289
+ // location
2290
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
2291
+
2292
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPImaginaryNode));
2293
+ break;
2294
+ }
2295
+ #line 137 "api_node.c.erb"
2296
+ case YP_NODE_IN_NODE: {
2297
+ yp_in_node_t *cast = (yp_in_node_t *) node;
2298
+ VALUE argv[5];
2299
+
2300
+ // pattern
2301
+ argv[0] = rb_ary_pop(value_stack);
2302
+
2303
+ // statements
2304
+ argv[1] = rb_ary_pop(value_stack);
2305
+
2306
+ // in_loc
2307
+ argv[2] = yp_location_new(parser, cast->in_loc.start, cast->in_loc.end, source);
2308
+
2309
+ // then_loc
2310
+ argv[3] = cast->then_loc.start == NULL ? Qnil : yp_location_new(parser, cast->then_loc.start, cast->then_loc.end, source);
2311
+
2312
+ // location
2313
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
2314
+
2315
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInNode));
2316
+ break;
2317
+ }
2318
+ #line 137 "api_node.c.erb"
2319
+ case YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE: {
2320
+ yp_instance_variable_and_write_node_t *cast = (yp_instance_variable_and_write_node_t *) node;
2321
+ VALUE argv[5];
2322
+
2323
+ // name
2324
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2325
+
2326
+ // name_loc
2327
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2328
+
2329
+ // operator_loc
2330
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2331
+
2332
+ // value
2333
+ argv[3] = rb_ary_pop(value_stack);
1826
2334
 
1827
2335
  // location
1828
- argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2336
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1829
2337
 
1830
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPHashPatternNode));
2338
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInstanceVariableAndWriteNode));
1831
2339
  break;
1832
2340
  }
1833
2341
  #line 137 "api_node.c.erb"
1834
- case YP_NODE_IF_NODE: {
1835
- yp_if_node_t *cast = (yp_if_node_t *) node;
2342
+ case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
2343
+ yp_instance_variable_operator_write_node_t *cast = (yp_instance_variable_operator_write_node_t *) node;
1836
2344
  VALUE argv[6];
1837
2345
 
1838
- // if_keyword_loc
1839
- argv[0] = cast->if_keyword_loc.start == NULL ? Qnil : yp_location_new(parser, cast->if_keyword_loc.start, cast->if_keyword_loc.end, source);
2346
+ // name
2347
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1840
2348
 
1841
- // predicate
1842
- argv[1] = rb_ary_pop(value_stack);
2349
+ // name_loc
2350
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1843
2351
 
1844
- // statements
1845
- argv[2] = rb_ary_pop(value_stack);
2352
+ // operator_loc
2353
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1846
2354
 
1847
- // consequent
2355
+ // value
1848
2356
  argv[3] = rb_ary_pop(value_stack);
1849
2357
 
1850
- // end_keyword_loc
1851
- argv[4] = cast->end_keyword_loc.start == NULL ? Qnil : yp_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2358
+ // operator
2359
+ argv[4] = rb_id2sym(constants[cast->operator - 1]);
1852
2360
 
1853
2361
  // location
1854
2362
  argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
1855
2363
 
1856
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPIfNode));
2364
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPInstanceVariableOperatorWriteNode));
1857
2365
  break;
1858
2366
  }
1859
2367
  #line 137 "api_node.c.erb"
1860
- case YP_NODE_IMAGINARY_NODE: {
1861
- VALUE argv[2];
2368
+ case YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE: {
2369
+ yp_instance_variable_or_write_node_t *cast = (yp_instance_variable_or_write_node_t *) node;
2370
+ VALUE argv[5];
1862
2371
 
1863
- // numeric
1864
- argv[0] = rb_ary_pop(value_stack);
2372
+ // name
2373
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2374
+
2375
+ // name_loc
2376
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2377
+
2378
+ // operator_loc
2379
+ argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2380
+
2381
+ // value
2382
+ argv[3] = rb_ary_pop(value_stack);
1865
2383
 
1866
2384
  // location
1867
- argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
2385
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1868
2386
 
1869
- rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPImaginaryNode));
2387
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInstanceVariableOrWriteNode));
1870
2388
  break;
1871
2389
  }
1872
2390
  #line 137 "api_node.c.erb"
1873
- case YP_NODE_IN_NODE: {
1874
- yp_in_node_t *cast = (yp_in_node_t *) node;
1875
- VALUE argv[5];
1876
-
1877
- // pattern
1878
- argv[0] = rb_ary_pop(value_stack);
1879
-
1880
- // statements
1881
- argv[1] = rb_ary_pop(value_stack);
1882
-
1883
- // in_loc
1884
- argv[2] = yp_location_new(parser, cast->in_loc.start, cast->in_loc.end, source);
2391
+ case YP_NODE_INSTANCE_VARIABLE_READ_NODE: {
2392
+ yp_instance_variable_read_node_t *cast = (yp_instance_variable_read_node_t *) node;
2393
+ VALUE argv[2];
1885
2394
 
1886
- // then_loc
1887
- argv[3] = cast->then_loc.start == NULL ? Qnil : yp_location_new(parser, cast->then_loc.start, cast->then_loc.end, source);
2395
+ // name
2396
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1888
2397
 
1889
2398
  // location
1890
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
2399
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
1891
2400
 
1892
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInNode));
2401
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPInstanceVariableReadNode));
1893
2402
  break;
1894
2403
  }
1895
2404
  #line 137 "api_node.c.erb"
1896
- case YP_NODE_INSTANCE_VARIABLE_READ_NODE: {
1897
- VALUE argv[1];
2405
+ case YP_NODE_INSTANCE_VARIABLE_TARGET_NODE: {
2406
+ yp_instance_variable_target_node_t *cast = (yp_instance_variable_target_node_t *) node;
2407
+ VALUE argv[2];
2408
+
2409
+ // name
2410
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1898
2411
 
1899
2412
  // location
1900
- argv[0] = yp_location_new(parser, node->location.start, node->location.end, source);
2413
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
1901
2414
 
1902
- rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPInstanceVariableReadNode));
2415
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPInstanceVariableTargetNode));
1903
2416
  break;
1904
2417
  }
1905
2418
  #line 137 "api_node.c.erb"
1906
2419
  case YP_NODE_INSTANCE_VARIABLE_WRITE_NODE: {
1907
2420
  yp_instance_variable_write_node_t *cast = (yp_instance_variable_write_node_t *) node;
1908
- VALUE argv[4];
2421
+ VALUE argv[5];
2422
+
2423
+ // name
2424
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1909
2425
 
1910
2426
  // name_loc
1911
- argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2427
+ argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
1912
2428
 
1913
2429
  // value
1914
- argv[1] = rb_ary_pop(value_stack);
2430
+ argv[2] = rb_ary_pop(value_stack);
1915
2431
 
1916
2432
  // operator_loc
1917
- argv[2] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2433
+ argv[3] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1918
2434
 
1919
2435
  // location
1920
- argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
2436
+ argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
1921
2437
 
1922
- rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPInstanceVariableWriteNode));
2438
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPInstanceVariableWriteNode));
1923
2439
  break;
1924
2440
  }
1925
2441
  #line 137 "api_node.c.erb"
@@ -2081,7 +2597,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2081
2597
  #line 137 "api_node.c.erb"
2082
2598
  case YP_NODE_LAMBDA_NODE: {
2083
2599
  yp_lambda_node_t *cast = (yp_lambda_node_t *) node;
2084
- VALUE argv[5];
2600
+ VALUE argv[7];
2085
2601
 
2086
2602
  // locals
2087
2603
  argv[0] = rb_ary_new_capa(cast->locals.size);
@@ -2089,19 +2605,106 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2089
2605
  rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
2090
2606
  }
2091
2607
 
2608
+ // operator_loc
2609
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2610
+
2092
2611
  // opening_loc
2093
- argv[1] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2612
+ argv[2] = yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2613
+
2614
+ // closing_loc
2615
+ argv[3] = yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2094
2616
 
2095
2617
  // parameters
2096
- argv[2] = rb_ary_pop(value_stack);
2618
+ argv[4] = rb_ary_pop(value_stack);
2097
2619
 
2098
2620
  // body
2099
- argv[3] = rb_ary_pop(value_stack);
2621
+ argv[5] = rb_ary_pop(value_stack);
2100
2622
 
2101
2623
  // location
2102
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
2624
+ argv[6] = yp_location_new(parser, node->location.start, node->location.end, source);
2625
+
2626
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cYARPLambdaNode));
2627
+ break;
2628
+ }
2629
+ #line 137 "api_node.c.erb"
2630
+ case YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE: {
2631
+ yp_local_variable_and_write_node_t *cast = (yp_local_variable_and_write_node_t *) node;
2632
+ VALUE argv[6];
2633
+
2634
+ // name_loc
2635
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2636
+
2637
+ // operator_loc
2638
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2639
+
2640
+ // value
2641
+ argv[2] = rb_ary_pop(value_stack);
2642
+
2643
+ // name
2644
+ argv[3] = rb_id2sym(constants[cast->name - 1]);
2645
+
2646
+ // depth
2647
+ argv[4] = ULONG2NUM(cast->depth);
2648
+
2649
+ // location
2650
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2651
+
2652
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPLocalVariableAndWriteNode));
2653
+ break;
2654
+ }
2655
+ #line 137 "api_node.c.erb"
2656
+ case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
2657
+ yp_local_variable_operator_write_node_t *cast = (yp_local_variable_operator_write_node_t *) node;
2658
+ VALUE argv[7];
2659
+
2660
+ // name_loc
2661
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2103
2662
 
2104
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPLambdaNode));
2663
+ // operator_loc
2664
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2665
+
2666
+ // value
2667
+ argv[2] = rb_ary_pop(value_stack);
2668
+
2669
+ // name
2670
+ argv[3] = rb_id2sym(constants[cast->name - 1]);
2671
+
2672
+ // operator
2673
+ argv[4] = rb_id2sym(constants[cast->operator - 1]);
2674
+
2675
+ // depth
2676
+ argv[5] = ULONG2NUM(cast->depth);
2677
+
2678
+ // location
2679
+ argv[6] = yp_location_new(parser, node->location.start, node->location.end, source);
2680
+
2681
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cYARPLocalVariableOperatorWriteNode));
2682
+ break;
2683
+ }
2684
+ #line 137 "api_node.c.erb"
2685
+ case YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE: {
2686
+ yp_local_variable_or_write_node_t *cast = (yp_local_variable_or_write_node_t *) node;
2687
+ VALUE argv[6];
2688
+
2689
+ // name_loc
2690
+ argv[0] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2691
+
2692
+ // operator_loc
2693
+ argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2694
+
2695
+ // value
2696
+ argv[2] = rb_ary_pop(value_stack);
2697
+
2698
+ // name
2699
+ argv[3] = rb_id2sym(constants[cast->name - 1]);
2700
+
2701
+ // depth
2702
+ argv[4] = ULONG2NUM(cast->depth);
2703
+
2704
+ // location
2705
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2706
+
2707
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPLocalVariableOrWriteNode));
2105
2708
  break;
2106
2709
  }
2107
2710
  #line 137 "api_node.c.erb"
@@ -2109,8 +2712,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2109
2712
  yp_local_variable_read_node_t *cast = (yp_local_variable_read_node_t *) node;
2110
2713
  VALUE argv[3];
2111
2714
 
2112
- // constant_id
2113
- argv[0] = rb_id2sym(constants[cast->constant_id - 1]);
2715
+ // name
2716
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2114
2717
 
2115
2718
  // depth
2116
2719
  argv[1] = ULONG2NUM(cast->depth);
@@ -2121,25 +2724,42 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2121
2724
  rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cYARPLocalVariableReadNode));
2122
2725
  break;
2123
2726
  }
2727
+ #line 137 "api_node.c.erb"
2728
+ case YP_NODE_LOCAL_VARIABLE_TARGET_NODE: {
2729
+ yp_local_variable_target_node_t *cast = (yp_local_variable_target_node_t *) node;
2730
+ VALUE argv[3];
2731
+
2732
+ // name
2733
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2734
+
2735
+ // depth
2736
+ argv[1] = ULONG2NUM(cast->depth);
2737
+
2738
+ // location
2739
+ argv[2] = yp_location_new(parser, node->location.start, node->location.end, source);
2740
+
2741
+ rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cYARPLocalVariableTargetNode));
2742
+ break;
2743
+ }
2124
2744
  #line 137 "api_node.c.erb"
2125
2745
  case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: {
2126
2746
  yp_local_variable_write_node_t *cast = (yp_local_variable_write_node_t *) node;
2127
2747
  VALUE argv[6];
2128
2748
 
2129
- // constant_id
2130
- argv[0] = rb_id2sym(constants[cast->constant_id - 1]);
2749
+ // name
2750
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2131
2751
 
2132
2752
  // depth
2133
2753
  argv[1] = ULONG2NUM(cast->depth);
2134
2754
 
2135
- // value
2136
- argv[2] = rb_ary_pop(value_stack);
2137
-
2138
2755
  // name_loc
2139
- argv[3] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2756
+ argv[2] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
2757
+
2758
+ // value
2759
+ argv[3] = rb_ary_pop(value_stack);
2140
2760
 
2141
2761
  // operator_loc
2142
- argv[4] = cast->operator_loc.start == NULL ? Qnil : yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2762
+ argv[4] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2143
2763
 
2144
2764
  // location
2145
2765
  argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
@@ -2200,7 +2820,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2200
2820
  #line 137 "api_node.c.erb"
2201
2821
  case YP_NODE_MODULE_NODE: {
2202
2822
  yp_module_node_t *cast = (yp_module_node_t *) node;
2203
- VALUE argv[6];
2823
+ VALUE argv[7];
2204
2824
 
2205
2825
  // locals
2206
2826
  argv[0] = rb_ary_new_capa(cast->locals.size);
@@ -2220,10 +2840,13 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2220
2840
  // end_keyword_loc
2221
2841
  argv[4] = yp_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2222
2842
 
2843
+ // name
2844
+ argv[5] = yp_string_new(&cast->name, encoding);
2845
+
2223
2846
  // location
2224
- argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
2847
+ argv[6] = yp_location_new(parser, node->location.start, node->location.end, source);
2225
2848
 
2226
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPModuleNode));
2849
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cYARPModuleNode));
2227
2850
  break;
2228
2851
  }
2229
2852
  #line 137 "api_node.c.erb"
@@ -2301,35 +2924,16 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2301
2924
  }
2302
2925
  #line 137 "api_node.c.erb"
2303
2926
  case YP_NODE_NUMBERED_REFERENCE_READ_NODE: {
2304
- VALUE argv[1];
2305
-
2306
- // location
2307
- argv[0] = yp_location_new(parser, node->location.start, node->location.end, source);
2308
-
2309
- rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cYARPNumberedReferenceReadNode));
2310
- break;
2311
- }
2312
- #line 137 "api_node.c.erb"
2313
- case YP_NODE_OPERATOR_WRITE_NODE: {
2314
- yp_operator_write_node_t *cast = (yp_operator_write_node_t *) node;
2315
- VALUE argv[5];
2316
-
2317
- // target
2318
- argv[0] = rb_ary_pop(value_stack);
2319
-
2320
- // operator_loc
2321
- argv[1] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2322
-
2323
- // operator
2324
- argv[2] = rb_id2sym(constants[cast->operator - 1]);
2927
+ yp_numbered_reference_read_node_t *cast = (yp_numbered_reference_read_node_t *) node;
2928
+ VALUE argv[2];
2325
2929
 
2326
- // value
2327
- argv[3] = rb_ary_pop(value_stack);
2930
+ // number
2931
+ argv[0] = ULONG2NUM(cast->number);
2328
2932
 
2329
2933
  // location
2330
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
2934
+ argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
2331
2935
 
2332
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPOperatorWriteNode));
2936
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cYARPNumberedReferenceReadNode));
2333
2937
  break;
2334
2938
  }
2335
2939
  #line 137 "api_node.c.erb"
@@ -2337,8 +2941,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2337
2941
  yp_optional_parameter_node_t *cast = (yp_optional_parameter_node_t *) node;
2338
2942
  VALUE argv[5];
2339
2943
 
2340
- // constant_id
2341
- argv[0] = rb_id2sym(constants[cast->constant_id - 1]);
2944
+ // name
2945
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2342
2946
 
2343
2947
  // name_loc
2344
2948
  argv[1] = yp_location_new(parser, cast->name_loc.start, cast->name_loc.end, source);
@@ -2375,26 +2979,6 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2375
2979
  rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPOrNode));
2376
2980
  break;
2377
2981
  }
2378
- #line 137 "api_node.c.erb"
2379
- case YP_NODE_OR_WRITE_NODE: {
2380
- yp_or_write_node_t *cast = (yp_or_write_node_t *) node;
2381
- VALUE argv[4];
2382
-
2383
- // target
2384
- argv[0] = rb_ary_pop(value_stack);
2385
-
2386
- // value
2387
- argv[1] = rb_ary_pop(value_stack);
2388
-
2389
- // operator_loc
2390
- argv[2] = yp_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2391
-
2392
- // location
2393
- argv[3] = yp_location_new(parser, node->location.start, node->location.end, source);
2394
-
2395
- rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cYARPOrWriteNode));
2396
- break;
2397
- }
2398
2982
  #line 137 "api_node.c.erb"
2399
2983
  case YP_NODE_PARAMETERS_NODE: {
2400
2984
  yp_parameters_node_t *cast = (yp_parameters_node_t *) node;
@@ -2665,8 +3249,8 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2665
3249
  yp_required_parameter_node_t *cast = (yp_required_parameter_node_t *) node;
2666
3250
  VALUE argv[2];
2667
3251
 
2668
- // constant_id
2669
- argv[0] = rb_id2sym(constants[cast->constant_id - 1]);
3252
+ // name
3253
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
2670
3254
 
2671
3255
  // location
2672
3256
  argv[1] = yp_location_new(parser, node->location.start, node->location.end, source);
@@ -2954,7 +3538,7 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
2954
3538
  argv[0] = cast->opening_loc.start == NULL ? Qnil : yp_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2955
3539
 
2956
3540
  // value_loc
2957
- argv[1] = yp_location_new(parser, cast->value_loc.start, cast->value_loc.end, source);
3541
+ argv[1] = cast->value_loc.start == NULL ? Qnil : yp_location_new(parser, cast->value_loc.start, cast->value_loc.end, source);
2958
3542
 
2959
3543
  // closing_loc
2960
3544
  argv[2] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
@@ -3027,24 +3611,27 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
3027
3611
  #line 137 "api_node.c.erb"
3028
3612
  case YP_NODE_UNTIL_NODE: {
3029
3613
  yp_until_node_t *cast = (yp_until_node_t *) node;
3030
- VALUE argv[5];
3614
+ VALUE argv[6];
3031
3615
 
3032
3616
  // keyword_loc
3033
3617
  argv[0] = yp_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
3034
3618
 
3619
+ // closing_loc
3620
+ argv[1] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3621
+
3035
3622
  // predicate
3036
- argv[1] = rb_ary_pop(value_stack);
3623
+ argv[2] = rb_ary_pop(value_stack);
3037
3624
 
3038
3625
  // statements
3039
- argv[2] = rb_ary_pop(value_stack);
3626
+ argv[3] = rb_ary_pop(value_stack);
3040
3627
 
3041
3628
  // flags
3042
- argv[3] = ULONG2NUM(node->flags >> 1);
3629
+ argv[4] = ULONG2NUM(node->flags >> 1);
3043
3630
 
3044
3631
  // location
3045
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
3632
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
3046
3633
 
3047
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPUntilNode));
3634
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPUntilNode));
3048
3635
  break;
3049
3636
  }
3050
3637
  #line 137 "api_node.c.erb"
@@ -3073,24 +3660,27 @@ yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding) {
3073
3660
  #line 137 "api_node.c.erb"
3074
3661
  case YP_NODE_WHILE_NODE: {
3075
3662
  yp_while_node_t *cast = (yp_while_node_t *) node;
3076
- VALUE argv[5];
3663
+ VALUE argv[6];
3077
3664
 
3078
3665
  // keyword_loc
3079
3666
  argv[0] = yp_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
3080
3667
 
3668
+ // closing_loc
3669
+ argv[1] = cast->closing_loc.start == NULL ? Qnil : yp_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3670
+
3081
3671
  // predicate
3082
- argv[1] = rb_ary_pop(value_stack);
3672
+ argv[2] = rb_ary_pop(value_stack);
3083
3673
 
3084
3674
  // statements
3085
- argv[2] = rb_ary_pop(value_stack);
3675
+ argv[3] = rb_ary_pop(value_stack);
3086
3676
 
3087
3677
  // flags
3088
- argv[3] = ULONG2NUM(node->flags >> 1);
3678
+ argv[4] = ULONG2NUM(node->flags >> 1);
3089
3679
 
3090
3680
  // location
3091
- argv[4] = yp_location_new(parser, node->location.start, node->location.end, source);
3681
+ argv[5] = yp_location_new(parser, node->location.start, node->location.end, source);
3092
3682
 
3093
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cYARPWhileNode));
3683
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cYARPWhileNode));
3094
3684
  break;
3095
3685
  }
3096
3686
  #line 137 "api_node.c.erb"
@@ -3155,7 +3745,6 @@ Init_yarp_api_node(void) {
3155
3745
  rb_cYARPAliasNode = rb_define_class_under(rb_cYARP, "AliasNode", rb_cYARPNode);
3156
3746
  rb_cYARPAlternationPatternNode = rb_define_class_under(rb_cYARP, "AlternationPatternNode", rb_cYARPNode);
3157
3747
  rb_cYARPAndNode = rb_define_class_under(rb_cYARP, "AndNode", rb_cYARPNode);
3158
- rb_cYARPAndWriteNode = rb_define_class_under(rb_cYARP, "AndWriteNode", rb_cYARPNode);
3159
3748
  rb_cYARPArgumentsNode = rb_define_class_under(rb_cYARP, "ArgumentsNode", rb_cYARPNode);
3160
3749
  rb_cYARPArrayNode = rb_define_class_under(rb_cYARP, "ArrayNode", rb_cYARPNode);
3161
3750
  rb_cYARPArrayPatternNode = rb_define_class_under(rb_cYARP, "ArrayPatternNode", rb_cYARPNode);
@@ -3175,11 +3764,23 @@ Init_yarp_api_node(void) {
3175
3764
  rb_cYARPCapturePatternNode = rb_define_class_under(rb_cYARP, "CapturePatternNode", rb_cYARPNode);
3176
3765
  rb_cYARPCaseNode = rb_define_class_under(rb_cYARP, "CaseNode", rb_cYARPNode);
3177
3766
  rb_cYARPClassNode = rb_define_class_under(rb_cYARP, "ClassNode", rb_cYARPNode);
3767
+ rb_cYARPClassVariableAndWriteNode = rb_define_class_under(rb_cYARP, "ClassVariableAndWriteNode", rb_cYARPNode);
3768
+ rb_cYARPClassVariableOperatorWriteNode = rb_define_class_under(rb_cYARP, "ClassVariableOperatorWriteNode", rb_cYARPNode);
3769
+ rb_cYARPClassVariableOrWriteNode = rb_define_class_under(rb_cYARP, "ClassVariableOrWriteNode", rb_cYARPNode);
3178
3770
  rb_cYARPClassVariableReadNode = rb_define_class_under(rb_cYARP, "ClassVariableReadNode", rb_cYARPNode);
3771
+ rb_cYARPClassVariableTargetNode = rb_define_class_under(rb_cYARP, "ClassVariableTargetNode", rb_cYARPNode);
3179
3772
  rb_cYARPClassVariableWriteNode = rb_define_class_under(rb_cYARP, "ClassVariableWriteNode", rb_cYARPNode);
3773
+ rb_cYARPConstantAndWriteNode = rb_define_class_under(rb_cYARP, "ConstantAndWriteNode", rb_cYARPNode);
3774
+ rb_cYARPConstantOperatorWriteNode = rb_define_class_under(rb_cYARP, "ConstantOperatorWriteNode", rb_cYARPNode);
3775
+ rb_cYARPConstantOrWriteNode = rb_define_class_under(rb_cYARP, "ConstantOrWriteNode", rb_cYARPNode);
3776
+ rb_cYARPConstantPathAndWriteNode = rb_define_class_under(rb_cYARP, "ConstantPathAndWriteNode", rb_cYARPNode);
3180
3777
  rb_cYARPConstantPathNode = rb_define_class_under(rb_cYARP, "ConstantPathNode", rb_cYARPNode);
3778
+ rb_cYARPConstantPathOperatorWriteNode = rb_define_class_under(rb_cYARP, "ConstantPathOperatorWriteNode", rb_cYARPNode);
3779
+ rb_cYARPConstantPathOrWriteNode = rb_define_class_under(rb_cYARP, "ConstantPathOrWriteNode", rb_cYARPNode);
3780
+ rb_cYARPConstantPathTargetNode = rb_define_class_under(rb_cYARP, "ConstantPathTargetNode", rb_cYARPNode);
3181
3781
  rb_cYARPConstantPathWriteNode = rb_define_class_under(rb_cYARP, "ConstantPathWriteNode", rb_cYARPNode);
3182
3782
  rb_cYARPConstantReadNode = rb_define_class_under(rb_cYARP, "ConstantReadNode", rb_cYARPNode);
3783
+ rb_cYARPConstantTargetNode = rb_define_class_under(rb_cYARP, "ConstantTargetNode", rb_cYARPNode);
3183
3784
  rb_cYARPConstantWriteNode = rb_define_class_under(rb_cYARP, "ConstantWriteNode", rb_cYARPNode);
3184
3785
  rb_cYARPDefNode = rb_define_class_under(rb_cYARP, "DefNode", rb_cYARPNode);
3185
3786
  rb_cYARPDefinedNode = rb_define_class_under(rb_cYARP, "DefinedNode", rb_cYARPNode);
@@ -3195,14 +3796,22 @@ Init_yarp_api_node(void) {
3195
3796
  rb_cYARPForwardingArgumentsNode = rb_define_class_under(rb_cYARP, "ForwardingArgumentsNode", rb_cYARPNode);
3196
3797
  rb_cYARPForwardingParameterNode = rb_define_class_under(rb_cYARP, "ForwardingParameterNode", rb_cYARPNode);
3197
3798
  rb_cYARPForwardingSuperNode = rb_define_class_under(rb_cYARP, "ForwardingSuperNode", rb_cYARPNode);
3799
+ rb_cYARPGlobalVariableAndWriteNode = rb_define_class_under(rb_cYARP, "GlobalVariableAndWriteNode", rb_cYARPNode);
3800
+ rb_cYARPGlobalVariableOperatorWriteNode = rb_define_class_under(rb_cYARP, "GlobalVariableOperatorWriteNode", rb_cYARPNode);
3801
+ rb_cYARPGlobalVariableOrWriteNode = rb_define_class_under(rb_cYARP, "GlobalVariableOrWriteNode", rb_cYARPNode);
3198
3802
  rb_cYARPGlobalVariableReadNode = rb_define_class_under(rb_cYARP, "GlobalVariableReadNode", rb_cYARPNode);
3803
+ rb_cYARPGlobalVariableTargetNode = rb_define_class_under(rb_cYARP, "GlobalVariableTargetNode", rb_cYARPNode);
3199
3804
  rb_cYARPGlobalVariableWriteNode = rb_define_class_under(rb_cYARP, "GlobalVariableWriteNode", rb_cYARPNode);
3200
3805
  rb_cYARPHashNode = rb_define_class_under(rb_cYARP, "HashNode", rb_cYARPNode);
3201
3806
  rb_cYARPHashPatternNode = rb_define_class_under(rb_cYARP, "HashPatternNode", rb_cYARPNode);
3202
3807
  rb_cYARPIfNode = rb_define_class_under(rb_cYARP, "IfNode", rb_cYARPNode);
3203
3808
  rb_cYARPImaginaryNode = rb_define_class_under(rb_cYARP, "ImaginaryNode", rb_cYARPNode);
3204
3809
  rb_cYARPInNode = rb_define_class_under(rb_cYARP, "InNode", rb_cYARPNode);
3810
+ rb_cYARPInstanceVariableAndWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableAndWriteNode", rb_cYARPNode);
3811
+ rb_cYARPInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableOperatorWriteNode", rb_cYARPNode);
3812
+ rb_cYARPInstanceVariableOrWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableOrWriteNode", rb_cYARPNode);
3205
3813
  rb_cYARPInstanceVariableReadNode = rb_define_class_under(rb_cYARP, "InstanceVariableReadNode", rb_cYARPNode);
3814
+ rb_cYARPInstanceVariableTargetNode = rb_define_class_under(rb_cYARP, "InstanceVariableTargetNode", rb_cYARPNode);
3206
3815
  rb_cYARPInstanceVariableWriteNode = rb_define_class_under(rb_cYARP, "InstanceVariableWriteNode", rb_cYARPNode);
3207
3816
  rb_cYARPIntegerNode = rb_define_class_under(rb_cYARP, "IntegerNode", rb_cYARPNode);
3208
3817
  rb_cYARPInterpolatedRegularExpressionNode = rb_define_class_under(rb_cYARP, "InterpolatedRegularExpressionNode", rb_cYARPNode);
@@ -3213,7 +3822,11 @@ Init_yarp_api_node(void) {
3213
3822
  rb_cYARPKeywordParameterNode = rb_define_class_under(rb_cYARP, "KeywordParameterNode", rb_cYARPNode);
3214
3823
  rb_cYARPKeywordRestParameterNode = rb_define_class_under(rb_cYARP, "KeywordRestParameterNode", rb_cYARPNode);
3215
3824
  rb_cYARPLambdaNode = rb_define_class_under(rb_cYARP, "LambdaNode", rb_cYARPNode);
3825
+ rb_cYARPLocalVariableAndWriteNode = rb_define_class_under(rb_cYARP, "LocalVariableAndWriteNode", rb_cYARPNode);
3826
+ rb_cYARPLocalVariableOperatorWriteNode = rb_define_class_under(rb_cYARP, "LocalVariableOperatorWriteNode", rb_cYARPNode);
3827
+ rb_cYARPLocalVariableOrWriteNode = rb_define_class_under(rb_cYARP, "LocalVariableOrWriteNode", rb_cYARPNode);
3216
3828
  rb_cYARPLocalVariableReadNode = rb_define_class_under(rb_cYARP, "LocalVariableReadNode", rb_cYARPNode);
3829
+ rb_cYARPLocalVariableTargetNode = rb_define_class_under(rb_cYARP, "LocalVariableTargetNode", rb_cYARPNode);
3217
3830
  rb_cYARPLocalVariableWriteNode = rb_define_class_under(rb_cYARP, "LocalVariableWriteNode", rb_cYARPNode);
3218
3831
  rb_cYARPMatchPredicateNode = rb_define_class_under(rb_cYARP, "MatchPredicateNode", rb_cYARPNode);
3219
3832
  rb_cYARPMatchRequiredNode = rb_define_class_under(rb_cYARP, "MatchRequiredNode", rb_cYARPNode);
@@ -3224,10 +3837,8 @@ Init_yarp_api_node(void) {
3224
3837
  rb_cYARPNilNode = rb_define_class_under(rb_cYARP, "NilNode", rb_cYARPNode);
3225
3838
  rb_cYARPNoKeywordsParameterNode = rb_define_class_under(rb_cYARP, "NoKeywordsParameterNode", rb_cYARPNode);
3226
3839
  rb_cYARPNumberedReferenceReadNode = rb_define_class_under(rb_cYARP, "NumberedReferenceReadNode", rb_cYARPNode);
3227
- rb_cYARPOperatorWriteNode = rb_define_class_under(rb_cYARP, "OperatorWriteNode", rb_cYARPNode);
3228
3840
  rb_cYARPOptionalParameterNode = rb_define_class_under(rb_cYARP, "OptionalParameterNode", rb_cYARPNode);
3229
3841
  rb_cYARPOrNode = rb_define_class_under(rb_cYARP, "OrNode", rb_cYARPNode);
3230
- rb_cYARPOrWriteNode = rb_define_class_under(rb_cYARP, "OrWriteNode", rb_cYARPNode);
3231
3842
  rb_cYARPParametersNode = rb_define_class_under(rb_cYARP, "ParametersNode", rb_cYARPNode);
3232
3843
  rb_cYARPParenthesesNode = rb_define_class_under(rb_cYARP, "ParenthesesNode", rb_cYARPNode);
3233
3844
  rb_cYARPPinnedExpressionNode = rb_define_class_under(rb_cYARP, "PinnedExpressionNode", rb_cYARPNode);