prism 0.17.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/Makefile +5 -5
  4. data/README.md +4 -3
  5. data/config.yml +214 -68
  6. data/docs/build_system.md +6 -6
  7. data/docs/building.md +10 -3
  8. data/docs/configuration.md +11 -9
  9. data/docs/encoding.md +92 -88
  10. data/docs/heredocs.md +1 -1
  11. data/docs/javascript.md +29 -1
  12. data/docs/local_variable_depth.md +229 -0
  13. data/docs/ruby_api.md +16 -0
  14. data/docs/serialization.md +18 -13
  15. data/ext/prism/api_node.c +411 -240
  16. data/ext/prism/extconf.rb +97 -127
  17. data/ext/prism/extension.c +97 -33
  18. data/ext/prism/extension.h +1 -1
  19. data/include/prism/ast.h +377 -159
  20. data/include/prism/defines.h +17 -0
  21. data/include/prism/diagnostic.h +38 -6
  22. data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
  23. data/include/prism/options.h +2 -2
  24. data/include/prism/parser.h +62 -36
  25. data/include/prism/regexp.h +2 -2
  26. data/include/prism/util/pm_buffer.h +9 -1
  27. data/include/prism/util/pm_memchr.h +2 -2
  28. data/include/prism/util/pm_strpbrk.h +3 -3
  29. data/include/prism/version.h +3 -3
  30. data/include/prism.h +13 -15
  31. data/lib/prism/compiler.rb +15 -3
  32. data/lib/prism/debug.rb +13 -4
  33. data/lib/prism/desugar_compiler.rb +4 -3
  34. data/lib/prism/dispatcher.rb +70 -14
  35. data/lib/prism/dot_visitor.rb +4612 -0
  36. data/lib/prism/dsl.rb +77 -57
  37. data/lib/prism/ffi.rb +19 -6
  38. data/lib/prism/lex_compat.rb +19 -9
  39. data/lib/prism/mutation_compiler.rb +26 -6
  40. data/lib/prism/node.rb +1314 -522
  41. data/lib/prism/node_ext.rb +102 -19
  42. data/lib/prism/parse_result.rb +58 -27
  43. data/lib/prism/ripper_compat.rb +49 -34
  44. data/lib/prism/serialize.rb +251 -227
  45. data/lib/prism/visitor.rb +15 -3
  46. data/lib/prism.rb +21 -4
  47. data/prism.gemspec +7 -9
  48. data/rbi/prism.rbi +688 -284
  49. data/rbi/prism_static.rbi +3 -0
  50. data/sig/prism.rbs +426 -156
  51. data/sig/prism_static.rbs +1 -0
  52. data/src/diagnostic.c +280 -216
  53. data/src/encoding.c +5137 -0
  54. data/src/node.c +99 -21
  55. data/src/options.c +21 -2
  56. data/src/prettyprint.c +1743 -1241
  57. data/src/prism.c +1774 -831
  58. data/src/regexp.c +15 -15
  59. data/src/serialize.c +261 -164
  60. data/src/util/pm_buffer.c +10 -1
  61. data/src/util/pm_memchr.c +1 -1
  62. data/src/util/pm_strpbrk.c +4 -4
  63. metadata +8 -10
  64. data/src/enc/pm_big5.c +0 -53
  65. data/src/enc/pm_euc_jp.c +0 -59
  66. data/src/enc/pm_gbk.c +0 -62
  67. data/src/enc/pm_shift_jis.c +0 -57
  68. data/src/enc/pm_tables.c +0 -743
  69. data/src/enc/pm_unicode.c +0 -2369
  70. data/src/enc/pm_windows_31j.c +0 -57
data/ext/prism/api_node.c CHANGED
@@ -35,7 +35,9 @@ static VALUE rb_cPrismCallAndWriteNode;
35
35
  static VALUE rb_cPrismCallNode;
36
36
  static VALUE rb_cPrismCallOperatorWriteNode;
37
37
  static VALUE rb_cPrismCallOrWriteNode;
38
+ static VALUE rb_cPrismCallTargetNode;
38
39
  static VALUE rb_cPrismCapturePatternNode;
40
+ static VALUE rb_cPrismCaseMatchNode;
39
41
  static VALUE rb_cPrismCaseNode;
40
42
  static VALUE rb_cPrismClassNode;
41
43
  static VALUE rb_cPrismClassVariableAndWriteNode;
@@ -81,10 +83,12 @@ static VALUE rb_cPrismHashPatternNode;
81
83
  static VALUE rb_cPrismIfNode;
82
84
  static VALUE rb_cPrismImaginaryNode;
83
85
  static VALUE rb_cPrismImplicitNode;
86
+ static VALUE rb_cPrismImplicitRestNode;
84
87
  static VALUE rb_cPrismInNode;
85
88
  static VALUE rb_cPrismIndexAndWriteNode;
86
89
  static VALUE rb_cPrismIndexOperatorWriteNode;
87
90
  static VALUE rb_cPrismIndexOrWriteNode;
91
+ static VALUE rb_cPrismIndexTargetNode;
88
92
  static VALUE rb_cPrismInstanceVariableAndWriteNode;
89
93
  static VALUE rb_cPrismInstanceVariableOperatorWriteNode;
90
94
  static VALUE rb_cPrismInstanceVariableOrWriteNode;
@@ -117,6 +121,7 @@ static VALUE rb_cPrismMultiWriteNode;
117
121
  static VALUE rb_cPrismNextNode;
118
122
  static VALUE rb_cPrismNilNode;
119
123
  static VALUE rb_cPrismNoKeywordsParameterNode;
124
+ static VALUE rb_cPrismNumberedParametersNode;
120
125
  static VALUE rb_cPrismNumberedReferenceReadNode;
121
126
  static VALUE rb_cPrismOptionalKeywordParameterNode;
122
127
  static VALUE rb_cPrismOptionalParameterNode;
@@ -146,7 +151,6 @@ static VALUE rb_cPrismSourceFileNode;
146
151
  static VALUE rb_cPrismSourceLineNode;
147
152
  static VALUE rb_cPrismSplatNode;
148
153
  static VALUE rb_cPrismStatementsNode;
149
- static VALUE rb_cPrismStringConcatNode;
150
154
  static VALUE rb_cPrismStringNode;
151
155
  static VALUE rb_cPrismSuperNode;
152
156
  static VALUE rb_cPrismSymbolNode;
@@ -194,7 +198,7 @@ pm_source_new(pm_parser_t *parser, rb_encoding *encoding) {
194
198
  rb_ary_push(offsets, INT2FIX(parser->newline_list.offsets[index]));
195
199
  }
196
200
 
197
- VALUE source_argv[] = { source, ULONG2NUM(parser->start_line), offsets };
201
+ VALUE source_argv[] = { source, LONG2NUM(parser->start_line), offsets };
198
202
  return rb_class_new_instance(3, source_argv, rb_cPrismSource);
199
203
  }
200
204
 
@@ -396,6 +400,12 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
396
400
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
397
401
  break;
398
402
  }
403
+ #line 118 "api_node.c.erb"
404
+ case PM_CALL_TARGET_NODE: {
405
+ pm_call_target_node_t *cast = (pm_call_target_node_t *) node;
406
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
407
+ break;
408
+ }
399
409
  #line 118 "api_node.c.erb"
400
410
  case PM_CAPTURE_PATTERN_NODE: {
401
411
  pm_capture_pattern_node_t *cast = (pm_capture_pattern_node_t *) node;
@@ -403,6 +413,16 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
403
413
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
404
414
  break;
405
415
  }
416
+ #line 118 "api_node.c.erb"
417
+ case PM_CASE_MATCH_NODE: {
418
+ pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
419
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
420
+ for (size_t index = 0; index < cast->conditions.size; index++) {
421
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->conditions.nodes[index]);
422
+ }
423
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->consequent);
424
+ break;
425
+ }
406
426
  #line 118 "api_node.c.erb"
407
427
  case PM_CASE_NODE: {
408
428
  pm_case_node_t *cast = (pm_case_node_t *) node;
@@ -677,6 +697,14 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
677
697
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
678
698
  break;
679
699
  }
700
+ #line 118 "api_node.c.erb"
701
+ case PM_INDEX_TARGET_NODE: {
702
+ pm_index_target_node_t *cast = (pm_index_target_node_t *) node;
703
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
704
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
705
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
706
+ break;
707
+ }
680
708
  #line 118 "api_node.c.erb"
681
709
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
682
710
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -798,6 +826,9 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
798
826
  case PM_MATCH_WRITE_NODE: {
799
827
  pm_match_write_node_t *cast = (pm_match_write_node_t *) node;
800
828
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->call);
829
+ for (size_t index = 0; index < cast->targets.size; index++) {
830
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->targets.nodes[index]);
831
+ }
801
832
  break;
802
833
  }
803
834
  #line 118 "api_node.c.erb"
@@ -971,13 +1002,6 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
971
1002
  }
972
1003
  break;
973
1004
  }
974
- #line 118 "api_node.c.erb"
975
- case PM_STRING_CONCAT_NODE: {
976
- pm_string_concat_node_t *cast = (pm_string_concat_node_t *) node;
977
- pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
978
- pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
979
- break;
980
- }
981
1005
  #line 118 "api_node.c.erb"
982
1006
  case PM_SUPER_NODE: {
983
1007
  pm_super_node_t *cast = (pm_super_node_t *) node;
@@ -1135,17 +1159,17 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1135
1159
  pm_arguments_node_t *cast = (pm_arguments_node_t *) node;
1136
1160
  VALUE argv[3];
1137
1161
 
1162
+ // flags
1163
+ #line 192 "api_node.c.erb"
1164
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1165
+
1138
1166
  // arguments
1139
1167
  #line 158 "api_node.c.erb"
1140
- argv[0] = rb_ary_new_capa(cast->arguments.size);
1168
+ argv[1] = rb_ary_new_capa(cast->arguments.size);
1141
1169
  for (size_t index = 0; index < cast->arguments.size; index++) {
1142
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
1170
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
1143
1171
  }
1144
1172
 
1145
- // flags
1146
- #line 189 "api_node.c.erb"
1147
- argv[1] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1148
-
1149
1173
  // location
1150
1174
  argv[2] = pm_location_new(parser, node->location.start, node->location.end, source);
1151
1175
 
@@ -1155,27 +1179,31 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1155
1179
  #line 144 "api_node.c.erb"
1156
1180
  case PM_ARRAY_NODE: {
1157
1181
  pm_array_node_t *cast = (pm_array_node_t *) node;
1158
- VALUE argv[4];
1182
+ VALUE argv[5];
1183
+
1184
+ // flags
1185
+ #line 192 "api_node.c.erb"
1186
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1159
1187
 
1160
1188
  // elements
1161
1189
  #line 158 "api_node.c.erb"
1162
- argv[0] = rb_ary_new_capa(cast->elements.size);
1190
+ argv[1] = rb_ary_new_capa(cast->elements.size);
1163
1191
  for (size_t index = 0; index < cast->elements.size; index++) {
1164
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
1192
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
1165
1193
  }
1166
1194
 
1167
1195
  // opening_loc
1168
1196
  #line 183 "api_node.c.erb"
1169
- argv[1] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1197
+ argv[2] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1170
1198
 
1171
1199
  // closing_loc
1172
1200
  #line 183 "api_node.c.erb"
1173
- argv[2] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1201
+ argv[3] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1174
1202
 
1175
1203
  // location
1176
- argv[3] = pm_location_new(parser, node->location.start, node->location.end, source);
1204
+ argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
1177
1205
 
1178
- rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismArrayNode));
1206
+ rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismArrayNode));
1179
1207
  break;
1180
1208
  }
1181
1209
  #line 144 "api_node.c.erb"
@@ -1350,7 +1378,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1350
1378
  #line 144 "api_node.c.erb"
1351
1379
  case PM_BLOCK_NODE: {
1352
1380
  pm_block_node_t *cast = (pm_block_node_t *) node;
1353
- VALUE argv[6];
1381
+ VALUE argv[7];
1354
1382
 
1355
1383
  // locals
1356
1384
  #line 173 "api_node.c.erb"
@@ -1360,26 +1388,30 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1360
1388
  rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
1361
1389
  }
1362
1390
 
1391
+ // locals_body_index
1392
+ #line 189 "api_node.c.erb"
1393
+ argv[1] = ULONG2NUM(cast->locals_body_index);
1394
+
1363
1395
  // parameters
1364
1396
  #line 155 "api_node.c.erb"
1365
- argv[1] = rb_ary_pop(value_stack);
1397
+ argv[2] = rb_ary_pop(value_stack);
1366
1398
 
1367
1399
  // body
1368
1400
  #line 155 "api_node.c.erb"
1369
- argv[2] = rb_ary_pop(value_stack);
1401
+ argv[3] = rb_ary_pop(value_stack);
1370
1402
 
1371
1403
  // opening_loc
1372
1404
  #line 180 "api_node.c.erb"
1373
- argv[3] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1405
+ argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1374
1406
 
1375
1407
  // closing_loc
1376
1408
  #line 180 "api_node.c.erb"
1377
- argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1409
+ argv[5] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1378
1410
 
1379
1411
  // location
1380
- argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
1412
+ argv[6] = pm_location_new(parser, node->location.start, node->location.end, source);
1381
1413
 
1382
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismBlockNode));
1414
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismBlockNode));
1383
1415
  break;
1384
1416
  }
1385
1417
  #line 144 "api_node.c.erb"
@@ -1458,21 +1490,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1458
1490
  pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
1459
1491
  VALUE argv[9];
1460
1492
 
1493
+ // flags
1494
+ #line 192 "api_node.c.erb"
1495
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1496
+
1461
1497
  // receiver
1462
1498
  #line 155 "api_node.c.erb"
1463
- argv[0] = rb_ary_pop(value_stack);
1499
+ argv[1] = rb_ary_pop(value_stack);
1464
1500
 
1465
1501
  // call_operator_loc
1466
1502
  #line 183 "api_node.c.erb"
1467
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1503
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1468
1504
 
1469
1505
  // message_loc
1470
1506
  #line 183 "api_node.c.erb"
1471
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1472
-
1473
- // flags
1474
- #line 189 "api_node.c.erb"
1475
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1507
+ argv[3] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1476
1508
 
1477
1509
  // read_name
1478
1510
  #line 167 "api_node.c.erb"
@@ -1503,42 +1535,42 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1503
1535
  pm_call_node_t *cast = (pm_call_node_t *) node;
1504
1536
  VALUE argv[10];
1505
1537
 
1538
+ // flags
1539
+ #line 192 "api_node.c.erb"
1540
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1541
+
1506
1542
  // receiver
1507
1543
  #line 155 "api_node.c.erb"
1508
- argv[0] = rb_ary_pop(value_stack);
1544
+ argv[1] = rb_ary_pop(value_stack);
1509
1545
 
1510
1546
  // call_operator_loc
1511
1547
  #line 183 "api_node.c.erb"
1512
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1548
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1549
+
1550
+ // name
1551
+ #line 167 "api_node.c.erb"
1552
+ assert(cast->name != 0);
1553
+ argv[3] = rb_id2sym(constants[cast->name - 1]);
1513
1554
 
1514
1555
  // message_loc
1515
1556
  #line 183 "api_node.c.erb"
1516
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1557
+ argv[4] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1517
1558
 
1518
1559
  // opening_loc
1519
1560
  #line 183 "api_node.c.erb"
1520
- argv[3] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1561
+ argv[5] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1521
1562
 
1522
1563
  // arguments
1523
1564
  #line 155 "api_node.c.erb"
1524
- argv[4] = rb_ary_pop(value_stack);
1565
+ argv[6] = rb_ary_pop(value_stack);
1525
1566
 
1526
1567
  // closing_loc
1527
1568
  #line 183 "api_node.c.erb"
1528
- argv[5] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1569
+ argv[7] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1529
1570
 
1530
1571
  // block
1531
1572
  #line 155 "api_node.c.erb"
1532
- argv[6] = rb_ary_pop(value_stack);
1533
-
1534
- // flags
1535
- #line 189 "api_node.c.erb"
1536
- argv[7] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1537
-
1538
- // name
1539
- #line 167 "api_node.c.erb"
1540
- assert(cast->name != 0);
1541
- argv[8] = rb_id2sym(constants[cast->name - 1]);
1573
+ argv[8] = rb_ary_pop(value_stack);
1542
1574
 
1543
1575
  // location
1544
1576
  argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -1551,21 +1583,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1551
1583
  pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
1552
1584
  VALUE argv[10];
1553
1585
 
1586
+ // flags
1587
+ #line 192 "api_node.c.erb"
1588
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1589
+
1554
1590
  // receiver
1555
1591
  #line 155 "api_node.c.erb"
1556
- argv[0] = rb_ary_pop(value_stack);
1592
+ argv[1] = rb_ary_pop(value_stack);
1557
1593
 
1558
1594
  // call_operator_loc
1559
1595
  #line 183 "api_node.c.erb"
1560
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1596
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1561
1597
 
1562
1598
  // message_loc
1563
1599
  #line 183 "api_node.c.erb"
1564
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1565
-
1566
- // flags
1567
- #line 189 "api_node.c.erb"
1568
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1600
+ argv[3] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1569
1601
 
1570
1602
  // read_name
1571
1603
  #line 167 "api_node.c.erb"
@@ -1601,21 +1633,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1601
1633
  pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
1602
1634
  VALUE argv[9];
1603
1635
 
1636
+ // flags
1637
+ #line 192 "api_node.c.erb"
1638
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1639
+
1604
1640
  // receiver
1605
1641
  #line 155 "api_node.c.erb"
1606
- argv[0] = rb_ary_pop(value_stack);
1642
+ argv[1] = rb_ary_pop(value_stack);
1607
1643
 
1608
1644
  // call_operator_loc
1609
1645
  #line 183 "api_node.c.erb"
1610
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1646
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1611
1647
 
1612
1648
  // message_loc
1613
1649
  #line 183 "api_node.c.erb"
1614
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1615
-
1616
- // flags
1617
- #line 189 "api_node.c.erb"
1618
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1650
+ argv[3] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1619
1651
 
1620
1652
  // read_name
1621
1653
  #line 167 "api_node.c.erb"
@@ -1641,6 +1673,38 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1641
1673
  rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCallOrWriteNode));
1642
1674
  break;
1643
1675
  }
1676
+ #line 144 "api_node.c.erb"
1677
+ case PM_CALL_TARGET_NODE: {
1678
+ pm_call_target_node_t *cast = (pm_call_target_node_t *) node;
1679
+ VALUE argv[6];
1680
+
1681
+ // flags
1682
+ #line 192 "api_node.c.erb"
1683
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1684
+
1685
+ // receiver
1686
+ #line 155 "api_node.c.erb"
1687
+ argv[1] = rb_ary_pop(value_stack);
1688
+
1689
+ // call_operator_loc
1690
+ #line 180 "api_node.c.erb"
1691
+ argv[2] = pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
1692
+
1693
+ // name
1694
+ #line 167 "api_node.c.erb"
1695
+ assert(cast->name != 0);
1696
+ argv[3] = rb_id2sym(constants[cast->name - 1]);
1697
+
1698
+ // message_loc
1699
+ #line 180 "api_node.c.erb"
1700
+ argv[4] = pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1701
+
1702
+ // location
1703
+ argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
1704
+
1705
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismCallTargetNode));
1706
+ break;
1707
+ }
1644
1708
  #line 144 "api_node.c.erb"
1645
1709
  case PM_CAPTURE_PATTERN_NODE: {
1646
1710
  pm_capture_pattern_node_t *cast = (pm_capture_pattern_node_t *) node;
@@ -1664,6 +1728,40 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1664
1728
  rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismCapturePatternNode));
1665
1729
  break;
1666
1730
  }
1731
+ #line 144 "api_node.c.erb"
1732
+ case PM_CASE_MATCH_NODE: {
1733
+ pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
1734
+ VALUE argv[6];
1735
+
1736
+ // predicate
1737
+ #line 155 "api_node.c.erb"
1738
+ argv[0] = rb_ary_pop(value_stack);
1739
+
1740
+ // conditions
1741
+ #line 158 "api_node.c.erb"
1742
+ argv[1] = rb_ary_new_capa(cast->conditions.size);
1743
+ for (size_t index = 0; index < cast->conditions.size; index++) {
1744
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
1745
+ }
1746
+
1747
+ // consequent
1748
+ #line 155 "api_node.c.erb"
1749
+ argv[2] = rb_ary_pop(value_stack);
1750
+
1751
+ // case_keyword_loc
1752
+ #line 180 "api_node.c.erb"
1753
+ argv[3] = pm_location_new(parser, cast->case_keyword_loc.start, cast->case_keyword_loc.end, source);
1754
+
1755
+ // end_keyword_loc
1756
+ #line 180 "api_node.c.erb"
1757
+ argv[4] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
1758
+
1759
+ // location
1760
+ argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
1761
+
1762
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismCaseMatchNode));
1763
+ break;
1764
+ }
1667
1765
  #line 144 "api_node.c.erb"
1668
1766
  case PM_CASE_NODE: {
1669
1767
  pm_case_node_t *cast = (pm_case_node_t *) node;
@@ -2190,7 +2288,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2190
2288
  #line 144 "api_node.c.erb"
2191
2289
  case PM_DEF_NODE: {
2192
2290
  pm_def_node_t *cast = (pm_def_node_t *) node;
2193
- VALUE argv[13];
2291
+ VALUE argv[14];
2194
2292
 
2195
2293
  // name
2196
2294
  #line 167 "api_node.c.erb"
@@ -2221,34 +2319,38 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2221
2319
  rb_ary_push(argv[5], rb_id2sym(constants[cast->locals.ids[index] - 1]));
2222
2320
  }
2223
2321
 
2322
+ // locals_body_index
2323
+ #line 189 "api_node.c.erb"
2324
+ argv[6] = ULONG2NUM(cast->locals_body_index);
2325
+
2224
2326
  // def_keyword_loc
2225
2327
  #line 180 "api_node.c.erb"
2226
- argv[6] = pm_location_new(parser, cast->def_keyword_loc.start, cast->def_keyword_loc.end, source);
2328
+ argv[7] = pm_location_new(parser, cast->def_keyword_loc.start, cast->def_keyword_loc.end, source);
2227
2329
 
2228
2330
  // operator_loc
2229
2331
  #line 183 "api_node.c.erb"
2230
- argv[7] = cast->operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2332
+ argv[8] = cast->operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2231
2333
 
2232
2334
  // lparen_loc
2233
2335
  #line 183 "api_node.c.erb"
2234
- argv[8] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end, source);
2336
+ argv[9] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end, source);
2235
2337
 
2236
2338
  // rparen_loc
2237
2339
  #line 183 "api_node.c.erb"
2238
- argv[9] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end, source);
2340
+ argv[10] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end, source);
2239
2341
 
2240
2342
  // equal_loc
2241
2343
  #line 183 "api_node.c.erb"
2242
- argv[10] = cast->equal_loc.start == NULL ? Qnil : pm_location_new(parser, cast->equal_loc.start, cast->equal_loc.end, source);
2344
+ argv[11] = cast->equal_loc.start == NULL ? Qnil : pm_location_new(parser, cast->equal_loc.start, cast->equal_loc.end, source);
2243
2345
 
2244
2346
  // end_keyword_loc
2245
2347
  #line 183 "api_node.c.erb"
2246
- argv[11] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2348
+ argv[12] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2247
2349
 
2248
2350
  // location
2249
- argv[12] = pm_location_new(parser, node->location.start, node->location.end, source);
2351
+ argv[13] = pm_location_new(parser, node->location.start, node->location.end, source);
2250
2352
 
2251
- rb_ary_push(value_stack, rb_class_new_instance(13, argv, rb_cPrismDefNode));
2353
+ rb_ary_push(value_stack, rb_class_new_instance(14, argv, rb_cPrismDefNode));
2252
2354
  break;
2253
2355
  }
2254
2356
  #line 144 "api_node.c.erb"
@@ -2419,21 +2521,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2419
2521
  pm_flip_flop_node_t *cast = (pm_flip_flop_node_t *) node;
2420
2522
  VALUE argv[5];
2421
2523
 
2524
+ // flags
2525
+ #line 192 "api_node.c.erb"
2526
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2527
+
2422
2528
  // left
2423
2529
  #line 155 "api_node.c.erb"
2424
- argv[0] = rb_ary_pop(value_stack);
2530
+ argv[1] = rb_ary_pop(value_stack);
2425
2531
 
2426
2532
  // right
2427
2533
  #line 155 "api_node.c.erb"
2428
- argv[1] = rb_ary_pop(value_stack);
2534
+ argv[2] = rb_ary_pop(value_stack);
2429
2535
 
2430
2536
  // operator_loc
2431
2537
  #line 180 "api_node.c.erb"
2432
- argv[2] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2433
-
2434
- // flags
2435
- #line 189 "api_node.c.erb"
2436
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2538
+ argv[3] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2437
2539
 
2438
2540
  // location
2439
2541
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -2736,7 +2838,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2736
2838
  #line 144 "api_node.c.erb"
2737
2839
  case PM_IF_NODE: {
2738
2840
  pm_if_node_t *cast = (pm_if_node_t *) node;
2739
- VALUE argv[6];
2841
+ VALUE argv[7];
2740
2842
 
2741
2843
  // if_keyword_loc
2742
2844
  #line 183 "api_node.c.erb"
@@ -2746,22 +2848,26 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2746
2848
  #line 155 "api_node.c.erb"
2747
2849
  argv[1] = rb_ary_pop(value_stack);
2748
2850
 
2851
+ // then_keyword_loc
2852
+ #line 183 "api_node.c.erb"
2853
+ argv[2] = cast->then_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_keyword_loc.start, cast->then_keyword_loc.end, source);
2854
+
2749
2855
  // statements
2750
2856
  #line 155 "api_node.c.erb"
2751
- argv[2] = rb_ary_pop(value_stack);
2857
+ argv[3] = rb_ary_pop(value_stack);
2752
2858
 
2753
2859
  // consequent
2754
2860
  #line 155 "api_node.c.erb"
2755
- argv[3] = rb_ary_pop(value_stack);
2861
+ argv[4] = rb_ary_pop(value_stack);
2756
2862
 
2757
2863
  // end_keyword_loc
2758
2864
  #line 183 "api_node.c.erb"
2759
- argv[4] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2865
+ argv[5] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
2760
2866
 
2761
2867
  // location
2762
- argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
2868
+ argv[6] = pm_location_new(parser, node->location.start, node->location.end, source);
2763
2869
 
2764
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismIfNode));
2870
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismIfNode));
2765
2871
  break;
2766
2872
  }
2767
2873
  #line 144 "api_node.c.erb"
@@ -2792,6 +2898,16 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2792
2898
  rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismImplicitNode));
2793
2899
  break;
2794
2900
  }
2901
+ #line 144 "api_node.c.erb"
2902
+ case PM_IMPLICIT_REST_NODE: {
2903
+ VALUE argv[1];
2904
+
2905
+ // location
2906
+ argv[0] = pm_location_new(parser, node->location.start, node->location.end, source);
2907
+
2908
+ rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cPrismImplicitRestNode));
2909
+ break;
2910
+ }
2795
2911
  #line 144 "api_node.c.erb"
2796
2912
  case PM_IN_NODE: {
2797
2913
  pm_in_node_t *cast = (pm_in_node_t *) node;
@@ -2824,33 +2940,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2824
2940
  pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
2825
2941
  VALUE argv[10];
2826
2942
 
2943
+ // flags
2944
+ #line 192 "api_node.c.erb"
2945
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2946
+
2827
2947
  // receiver
2828
2948
  #line 155 "api_node.c.erb"
2829
- argv[0] = rb_ary_pop(value_stack);
2949
+ argv[1] = rb_ary_pop(value_stack);
2830
2950
 
2831
2951
  // call_operator_loc
2832
2952
  #line 183 "api_node.c.erb"
2833
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2953
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2834
2954
 
2835
2955
  // opening_loc
2836
2956
  #line 180 "api_node.c.erb"
2837
- argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2957
+ argv[3] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2838
2958
 
2839
2959
  // arguments
2840
2960
  #line 155 "api_node.c.erb"
2841
- argv[3] = rb_ary_pop(value_stack);
2961
+ argv[4] = rb_ary_pop(value_stack);
2842
2962
 
2843
2963
  // closing_loc
2844
2964
  #line 180 "api_node.c.erb"
2845
- argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2965
+ argv[5] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2846
2966
 
2847
2967
  // block
2848
2968
  #line 155 "api_node.c.erb"
2849
- argv[5] = rb_ary_pop(value_stack);
2850
-
2851
- // flags
2852
- #line 189 "api_node.c.erb"
2853
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2969
+ argv[6] = rb_ary_pop(value_stack);
2854
2970
 
2855
2971
  // operator_loc
2856
2972
  #line 180 "api_node.c.erb"
@@ -2871,33 +2987,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2871
2987
  pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
2872
2988
  VALUE argv[11];
2873
2989
 
2990
+ // flags
2991
+ #line 192 "api_node.c.erb"
2992
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2993
+
2874
2994
  // receiver
2875
2995
  #line 155 "api_node.c.erb"
2876
- argv[0] = rb_ary_pop(value_stack);
2996
+ argv[1] = rb_ary_pop(value_stack);
2877
2997
 
2878
2998
  // call_operator_loc
2879
2999
  #line 183 "api_node.c.erb"
2880
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
3000
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2881
3001
 
2882
3002
  // opening_loc
2883
3003
  #line 180 "api_node.c.erb"
2884
- argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3004
+ argv[3] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2885
3005
 
2886
3006
  // arguments
2887
3007
  #line 155 "api_node.c.erb"
2888
- argv[3] = rb_ary_pop(value_stack);
3008
+ argv[4] = rb_ary_pop(value_stack);
2889
3009
 
2890
3010
  // closing_loc
2891
3011
  #line 180 "api_node.c.erb"
2892
- argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3012
+ argv[5] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2893
3013
 
2894
3014
  // block
2895
3015
  #line 155 "api_node.c.erb"
2896
- argv[5] = rb_ary_pop(value_stack);
2897
-
2898
- // flags
2899
- #line 189 "api_node.c.erb"
2900
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3016
+ argv[6] = rb_ary_pop(value_stack);
2901
3017
 
2902
3018
  // operator
2903
3019
  #line 167 "api_node.c.erb"
@@ -2923,33 +3039,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2923
3039
  pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
2924
3040
  VALUE argv[10];
2925
3041
 
3042
+ // flags
3043
+ #line 192 "api_node.c.erb"
3044
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3045
+
2926
3046
  // receiver
2927
3047
  #line 155 "api_node.c.erb"
2928
- argv[0] = rb_ary_pop(value_stack);
3048
+ argv[1] = rb_ary_pop(value_stack);
2929
3049
 
2930
3050
  // call_operator_loc
2931
3051
  #line 183 "api_node.c.erb"
2932
- argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
3052
+ argv[2] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2933
3053
 
2934
3054
  // opening_loc
2935
3055
  #line 180 "api_node.c.erb"
2936
- argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3056
+ argv[3] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2937
3057
 
2938
3058
  // arguments
2939
3059
  #line 155 "api_node.c.erb"
2940
- argv[3] = rb_ary_pop(value_stack);
3060
+ argv[4] = rb_ary_pop(value_stack);
2941
3061
 
2942
3062
  // closing_loc
2943
3063
  #line 180 "api_node.c.erb"
2944
- argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3064
+ argv[5] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2945
3065
 
2946
3066
  // block
2947
3067
  #line 155 "api_node.c.erb"
2948
- argv[5] = rb_ary_pop(value_stack);
2949
-
2950
- // flags
2951
- #line 189 "api_node.c.erb"
2952
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3068
+ argv[6] = rb_ary_pop(value_stack);
2953
3069
 
2954
3070
  // operator_loc
2955
3071
  #line 180 "api_node.c.erb"
@@ -2965,6 +3081,41 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2965
3081
  rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismIndexOrWriteNode));
2966
3082
  break;
2967
3083
  }
3084
+ #line 144 "api_node.c.erb"
3085
+ case PM_INDEX_TARGET_NODE: {
3086
+ pm_index_target_node_t *cast = (pm_index_target_node_t *) node;
3087
+ VALUE argv[7];
3088
+
3089
+ // flags
3090
+ #line 192 "api_node.c.erb"
3091
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3092
+
3093
+ // receiver
3094
+ #line 155 "api_node.c.erb"
3095
+ argv[1] = rb_ary_pop(value_stack);
3096
+
3097
+ // opening_loc
3098
+ #line 180 "api_node.c.erb"
3099
+ argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3100
+
3101
+ // arguments
3102
+ #line 155 "api_node.c.erb"
3103
+ argv[3] = rb_ary_pop(value_stack);
3104
+
3105
+ // closing_loc
3106
+ #line 180 "api_node.c.erb"
3107
+ argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3108
+
3109
+ // block
3110
+ #line 155 "api_node.c.erb"
3111
+ argv[5] = rb_ary_pop(value_stack);
3112
+
3113
+ // location
3114
+ argv[6] = pm_location_new(parser, node->location.start, node->location.end, source);
3115
+
3116
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismIndexTargetNode));
3117
+ break;
3118
+ }
2968
3119
  #line 144 "api_node.c.erb"
2969
3120
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
2970
3121
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -3119,7 +3270,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3119
3270
  VALUE argv[2];
3120
3271
 
3121
3272
  // flags
3122
- #line 189 "api_node.c.erb"
3273
+ #line 192 "api_node.c.erb"
3123
3274
  argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3124
3275
 
3125
3276
  // location
@@ -3133,24 +3284,24 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3133
3284
  pm_interpolated_match_last_line_node_t *cast = (pm_interpolated_match_last_line_node_t *) node;
3134
3285
  VALUE argv[5];
3135
3286
 
3287
+ // flags
3288
+ #line 192 "api_node.c.erb"
3289
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3290
+
3136
3291
  // opening_loc
3137
3292
  #line 180 "api_node.c.erb"
3138
- argv[0] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3293
+ argv[1] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3139
3294
 
3140
3295
  // parts
3141
3296
  #line 158 "api_node.c.erb"
3142
- argv[1] = rb_ary_new_capa(cast->parts.size);
3297
+ argv[2] = rb_ary_new_capa(cast->parts.size);
3143
3298
  for (size_t index = 0; index < cast->parts.size; index++) {
3144
- rb_ary_push(argv[1], rb_ary_pop(value_stack));
3299
+ rb_ary_push(argv[2], rb_ary_pop(value_stack));
3145
3300
  }
3146
3301
 
3147
3302
  // closing_loc
3148
3303
  #line 180 "api_node.c.erb"
3149
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3150
-
3151
- // flags
3152
- #line 189 "api_node.c.erb"
3153
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3304
+ argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3154
3305
 
3155
3306
  // location
3156
3307
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3163,24 +3314,24 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3163
3314
  pm_interpolated_regular_expression_node_t *cast = (pm_interpolated_regular_expression_node_t *) node;
3164
3315
  VALUE argv[5];
3165
3316
 
3317
+ // flags
3318
+ #line 192 "api_node.c.erb"
3319
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3320
+
3166
3321
  // opening_loc
3167
3322
  #line 180 "api_node.c.erb"
3168
- argv[0] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3323
+ argv[1] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3169
3324
 
3170
3325
  // parts
3171
3326
  #line 158 "api_node.c.erb"
3172
- argv[1] = rb_ary_new_capa(cast->parts.size);
3327
+ argv[2] = rb_ary_new_capa(cast->parts.size);
3173
3328
  for (size_t index = 0; index < cast->parts.size; index++) {
3174
- rb_ary_push(argv[1], rb_ary_pop(value_stack));
3329
+ rb_ary_push(argv[2], rb_ary_pop(value_stack));
3175
3330
  }
3176
3331
 
3177
3332
  // closing_loc
3178
3333
  #line 180 "api_node.c.erb"
3179
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3180
-
3181
- // flags
3182
- #line 189 "api_node.c.erb"
3183
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3334
+ argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3184
3335
 
3185
3336
  // location
3186
3337
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3269,19 +3420,23 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3269
3420
  #line 144 "api_node.c.erb"
3270
3421
  case PM_KEYWORD_HASH_NODE: {
3271
3422
  pm_keyword_hash_node_t *cast = (pm_keyword_hash_node_t *) node;
3272
- VALUE argv[2];
3423
+ VALUE argv[3];
3424
+
3425
+ // flags
3426
+ #line 192 "api_node.c.erb"
3427
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3273
3428
 
3274
3429
  // elements
3275
3430
  #line 158 "api_node.c.erb"
3276
- argv[0] = rb_ary_new_capa(cast->elements.size);
3431
+ argv[1] = rb_ary_new_capa(cast->elements.size);
3277
3432
  for (size_t index = 0; index < cast->elements.size; index++) {
3278
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
3433
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
3279
3434
  }
3280
3435
 
3281
3436
  // location
3282
- argv[1] = pm_location_new(parser, node->location.start, node->location.end, source);
3437
+ argv[2] = pm_location_new(parser, node->location.start, node->location.end, source);
3283
3438
 
3284
- rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismKeywordHashNode));
3439
+ rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cPrismKeywordHashNode));
3285
3440
  break;
3286
3441
  }
3287
3442
  #line 144 "api_node.c.erb"
@@ -3309,7 +3464,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3309
3464
  #line 144 "api_node.c.erb"
3310
3465
  case PM_LAMBDA_NODE: {
3311
3466
  pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
3312
- VALUE argv[7];
3467
+ VALUE argv[8];
3313
3468
 
3314
3469
  // locals
3315
3470
  #line 173 "api_node.c.erb"
@@ -3319,30 +3474,34 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3319
3474
  rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
3320
3475
  }
3321
3476
 
3477
+ // locals_body_index
3478
+ #line 189 "api_node.c.erb"
3479
+ argv[1] = ULONG2NUM(cast->locals_body_index);
3480
+
3322
3481
  // operator_loc
3323
3482
  #line 180 "api_node.c.erb"
3324
- argv[1] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
3483
+ argv[2] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
3325
3484
 
3326
3485
  // opening_loc
3327
3486
  #line 180 "api_node.c.erb"
3328
- argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3487
+ argv[3] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3329
3488
 
3330
3489
  // closing_loc
3331
3490
  #line 180 "api_node.c.erb"
3332
- argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3491
+ argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3333
3492
 
3334
3493
  // parameters
3335
3494
  #line 155 "api_node.c.erb"
3336
- argv[4] = rb_ary_pop(value_stack);
3495
+ argv[5] = rb_ary_pop(value_stack);
3337
3496
 
3338
3497
  // body
3339
3498
  #line 155 "api_node.c.erb"
3340
- argv[5] = rb_ary_pop(value_stack);
3499
+ argv[6] = rb_ary_pop(value_stack);
3341
3500
 
3342
3501
  // location
3343
- argv[6] = pm_location_new(parser, node->location.start, node->location.end, source);
3502
+ argv[7] = pm_location_new(parser, node->location.start, node->location.end, source);
3344
3503
 
3345
- rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismLambdaNode));
3504
+ rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismLambdaNode));
3346
3505
  break;
3347
3506
  }
3348
3507
  #line 144 "api_node.c.erb"
@@ -3368,7 +3527,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3368
3527
  argv[3] = rb_id2sym(constants[cast->name - 1]);
3369
3528
 
3370
3529
  // depth
3371
- #line 186 "api_node.c.erb"
3530
+ #line 189 "api_node.c.erb"
3372
3531
  argv[4] = ULONG2NUM(cast->depth);
3373
3532
 
3374
3533
  // location
@@ -3405,7 +3564,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3405
3564
  argv[4] = rb_id2sym(constants[cast->operator - 1]);
3406
3565
 
3407
3566
  // depth
3408
- #line 186 "api_node.c.erb"
3567
+ #line 189 "api_node.c.erb"
3409
3568
  argv[5] = ULONG2NUM(cast->depth);
3410
3569
 
3411
3570
  // location
@@ -3437,7 +3596,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3437
3596
  argv[3] = rb_id2sym(constants[cast->name - 1]);
3438
3597
 
3439
3598
  // depth
3440
- #line 186 "api_node.c.erb"
3599
+ #line 189 "api_node.c.erb"
3441
3600
  argv[4] = ULONG2NUM(cast->depth);
3442
3601
 
3443
3602
  // location
@@ -3457,7 +3616,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3457
3616
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3458
3617
 
3459
3618
  // depth
3460
- #line 186 "api_node.c.erb"
3619
+ #line 189 "api_node.c.erb"
3461
3620
  argv[1] = ULONG2NUM(cast->depth);
3462
3621
 
3463
3622
  // location
@@ -3477,7 +3636,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3477
3636
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3478
3637
 
3479
3638
  // depth
3480
- #line 186 "api_node.c.erb"
3639
+ #line 189 "api_node.c.erb"
3481
3640
  argv[1] = ULONG2NUM(cast->depth);
3482
3641
 
3483
3642
  // location
@@ -3497,7 +3656,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3497
3656
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3498
3657
 
3499
3658
  // depth
3500
- #line 186 "api_node.c.erb"
3659
+ #line 189 "api_node.c.erb"
3501
3660
  argv[1] = ULONG2NUM(cast->depth);
3502
3661
 
3503
3662
  // name_loc
@@ -3523,25 +3682,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3523
3682
  pm_match_last_line_node_t *cast = (pm_match_last_line_node_t *) node;
3524
3683
  VALUE argv[6];
3525
3684
 
3685
+ // flags
3686
+ #line 192 "api_node.c.erb"
3687
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3688
+
3526
3689
  // opening_loc
3527
3690
  #line 180 "api_node.c.erb"
3528
- argv[0] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3691
+ argv[1] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
3529
3692
 
3530
3693
  // content_loc
3531
3694
  #line 180 "api_node.c.erb"
3532
- argv[1] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
3695
+ argv[2] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
3533
3696
 
3534
3697
  // closing_loc
3535
3698
  #line 180 "api_node.c.erb"
3536
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3699
+ argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3537
3700
 
3538
3701
  // unescaped
3539
3702
  #line 164 "api_node.c.erb"
3540
- argv[3] = pm_string_new(&cast->unescaped, encoding);
3541
-
3542
- // flags
3543
- #line 189 "api_node.c.erb"
3544
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3703
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
3545
3704
 
3546
3705
  // location
3547
3706
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3604,12 +3763,11 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3604
3763
  #line 155 "api_node.c.erb"
3605
3764
  argv[0] = rb_ary_pop(value_stack);
3606
3765
 
3607
- // locals
3608
- #line 173 "api_node.c.erb"
3609
- argv[1] = rb_ary_new_capa(cast->locals.size);
3610
- for (size_t index = 0; index < cast->locals.size; index++) {
3611
- assert(cast->locals.ids[index] != 0);
3612
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
3766
+ // targets
3767
+ #line 158 "api_node.c.erb"
3768
+ argv[1] = rb_ary_new_capa(cast->targets.size);
3769
+ for (size_t index = 0; index < cast->targets.size; index++) {
3770
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
3613
3771
  }
3614
3772
 
3615
3773
  // location
@@ -3798,13 +3956,28 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3798
3956
  rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cPrismNoKeywordsParameterNode));
3799
3957
  break;
3800
3958
  }
3959
+ #line 144 "api_node.c.erb"
3960
+ case PM_NUMBERED_PARAMETERS_NODE: {
3961
+ pm_numbered_parameters_node_t *cast = (pm_numbered_parameters_node_t *) node;
3962
+ VALUE argv[2];
3963
+
3964
+ // maximum
3965
+ #line 186 "api_node.c.erb"
3966
+ argv[0] = UINT2NUM(cast->maximum);
3967
+
3968
+ // location
3969
+ argv[1] = pm_location_new(parser, node->location.start, node->location.end, source);
3970
+
3971
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismNumberedParametersNode));
3972
+ break;
3973
+ }
3801
3974
  #line 144 "api_node.c.erb"
3802
3975
  case PM_NUMBERED_REFERENCE_READ_NODE: {
3803
3976
  pm_numbered_reference_read_node_t *cast = (pm_numbered_reference_read_node_t *) node;
3804
3977
  VALUE argv[2];
3805
3978
 
3806
3979
  // number
3807
- #line 186 "api_node.c.erb"
3980
+ #line 189 "api_node.c.erb"
3808
3981
  argv[0] = ULONG2NUM(cast->number);
3809
3982
 
3810
3983
  // location
@@ -4090,21 +4263,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4090
4263
  pm_range_node_t *cast = (pm_range_node_t *) node;
4091
4264
  VALUE argv[5];
4092
4265
 
4266
+ // flags
4267
+ #line 192 "api_node.c.erb"
4268
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4269
+
4093
4270
  // left
4094
4271
  #line 155 "api_node.c.erb"
4095
- argv[0] = rb_ary_pop(value_stack);
4272
+ argv[1] = rb_ary_pop(value_stack);
4096
4273
 
4097
4274
  // right
4098
4275
  #line 155 "api_node.c.erb"
4099
- argv[1] = rb_ary_pop(value_stack);
4276
+ argv[2] = rb_ary_pop(value_stack);
4100
4277
 
4101
4278
  // operator_loc
4102
4279
  #line 180 "api_node.c.erb"
4103
- argv[2] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
4104
-
4105
- // flags
4106
- #line 189 "api_node.c.erb"
4107
- argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4280
+ argv[3] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
4108
4281
 
4109
4282
  // location
4110
4283
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4141,25 +4314,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4141
4314
  pm_regular_expression_node_t *cast = (pm_regular_expression_node_t *) node;
4142
4315
  VALUE argv[6];
4143
4316
 
4317
+ // flags
4318
+ #line 192 "api_node.c.erb"
4319
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4320
+
4144
4321
  // opening_loc
4145
4322
  #line 180 "api_node.c.erb"
4146
- argv[0] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4323
+ argv[1] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4147
4324
 
4148
4325
  // content_loc
4149
4326
  #line 180 "api_node.c.erb"
4150
- argv[1] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
4327
+ argv[2] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
4151
4328
 
4152
4329
  // closing_loc
4153
4330
  #line 180 "api_node.c.erb"
4154
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4331
+ argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4155
4332
 
4156
4333
  // unescaped
4157
4334
  #line 164 "api_node.c.erb"
4158
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4159
-
4160
- // flags
4161
- #line 189 "api_node.c.erb"
4162
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4335
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4163
4336
 
4164
4337
  // location
4165
4338
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4436,31 +4609,13 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4436
4609
  rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismStatementsNode));
4437
4610
  break;
4438
4611
  }
4439
- #line 144 "api_node.c.erb"
4440
- case PM_STRING_CONCAT_NODE: {
4441
- VALUE argv[3];
4442
-
4443
- // left
4444
- #line 155 "api_node.c.erb"
4445
- argv[0] = rb_ary_pop(value_stack);
4446
-
4447
- // right
4448
- #line 155 "api_node.c.erb"
4449
- argv[1] = rb_ary_pop(value_stack);
4450
-
4451
- // location
4452
- argv[2] = pm_location_new(parser, node->location.start, node->location.end, source);
4453
-
4454
- rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cPrismStringConcatNode));
4455
- break;
4456
- }
4457
4612
  #line 144 "api_node.c.erb"
4458
4613
  case PM_STRING_NODE: {
4459
4614
  pm_string_node_t *cast = (pm_string_node_t *) node;
4460
4615
  VALUE argv[6];
4461
4616
 
4462
4617
  // flags
4463
- #line 189 "api_node.c.erb"
4618
+ #line 192 "api_node.c.erb"
4464
4619
  argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4465
4620
 
4466
4621
  // opening_loc
@@ -4519,28 +4674,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4519
4674
  #line 144 "api_node.c.erb"
4520
4675
  case PM_SYMBOL_NODE: {
4521
4676
  pm_symbol_node_t *cast = (pm_symbol_node_t *) node;
4522
- VALUE argv[5];
4677
+ VALUE argv[6];
4678
+
4679
+ // flags
4680
+ #line 192 "api_node.c.erb"
4681
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4523
4682
 
4524
4683
  // opening_loc
4525
4684
  #line 183 "api_node.c.erb"
4526
- argv[0] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4685
+ argv[1] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4527
4686
 
4528
4687
  // value_loc
4529
4688
  #line 183 "api_node.c.erb"
4530
- argv[1] = cast->value_loc.start == NULL ? Qnil : pm_location_new(parser, cast->value_loc.start, cast->value_loc.end, source);
4689
+ argv[2] = cast->value_loc.start == NULL ? Qnil : pm_location_new(parser, cast->value_loc.start, cast->value_loc.end, source);
4531
4690
 
4532
4691
  // closing_loc
4533
4692
  #line 183 "api_node.c.erb"
4534
- argv[2] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4693
+ argv[3] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4535
4694
 
4536
4695
  // unescaped
4537
4696
  #line 164 "api_node.c.erb"
4538
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4697
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4539
4698
 
4540
4699
  // location
4541
- argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
4700
+ argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
4542
4701
 
4543
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismSymbolNode));
4702
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismSymbolNode));
4544
4703
  break;
4545
4704
  }
4546
4705
  #line 144 "api_node.c.erb"
@@ -4578,7 +4737,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4578
4737
  #line 144 "api_node.c.erb"
4579
4738
  case PM_UNLESS_NODE: {
4580
4739
  pm_unless_node_t *cast = (pm_unless_node_t *) node;
4581
- VALUE argv[6];
4740
+ VALUE argv[7];
4582
4741
 
4583
4742
  // keyword_loc
4584
4743
  #line 180 "api_node.c.erb"
@@ -4588,22 +4747,26 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4588
4747
  #line 155 "api_node.c.erb"
4589
4748
  argv[1] = rb_ary_pop(value_stack);
4590
4749
 
4750
+ // then_keyword_loc
4751
+ #line 183 "api_node.c.erb"
4752
+ argv[2] = cast->then_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_keyword_loc.start, cast->then_keyword_loc.end, source);
4753
+
4591
4754
  // statements
4592
4755
  #line 155 "api_node.c.erb"
4593
- argv[2] = rb_ary_pop(value_stack);
4756
+ argv[3] = rb_ary_pop(value_stack);
4594
4757
 
4595
4758
  // consequent
4596
4759
  #line 155 "api_node.c.erb"
4597
- argv[3] = rb_ary_pop(value_stack);
4760
+ argv[4] = rb_ary_pop(value_stack);
4598
4761
 
4599
4762
  // end_keyword_loc
4600
4763
  #line 183 "api_node.c.erb"
4601
- argv[4] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
4764
+ argv[5] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end, source);
4602
4765
 
4603
4766
  // location
4604
- argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
4767
+ argv[6] = pm_location_new(parser, node->location.start, node->location.end, source);
4605
4768
 
4606
- rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismUnlessNode));
4769
+ rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismUnlessNode));
4607
4770
  break;
4608
4771
  }
4609
4772
  #line 144 "api_node.c.erb"
@@ -4611,25 +4774,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4611
4774
  pm_until_node_t *cast = (pm_until_node_t *) node;
4612
4775
  VALUE argv[6];
4613
4776
 
4777
+ // flags
4778
+ #line 192 "api_node.c.erb"
4779
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4780
+
4614
4781
  // keyword_loc
4615
4782
  #line 180 "api_node.c.erb"
4616
- argv[0] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
4783
+ argv[1] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
4617
4784
 
4618
4785
  // closing_loc
4619
4786
  #line 183 "api_node.c.erb"
4620
- argv[1] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4787
+ argv[2] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4621
4788
 
4622
4789
  // predicate
4623
4790
  #line 155 "api_node.c.erb"
4624
- argv[2] = rb_ary_pop(value_stack);
4791
+ argv[3] = rb_ary_pop(value_stack);
4625
4792
 
4626
4793
  // statements
4627
4794
  #line 155 "api_node.c.erb"
4628
- argv[3] = rb_ary_pop(value_stack);
4629
-
4630
- // flags
4631
- #line 189 "api_node.c.erb"
4632
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4795
+ argv[4] = rb_ary_pop(value_stack);
4633
4796
 
4634
4797
  // location
4635
4798
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4668,25 +4831,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4668
4831
  pm_while_node_t *cast = (pm_while_node_t *) node;
4669
4832
  VALUE argv[6];
4670
4833
 
4834
+ // flags
4835
+ #line 192 "api_node.c.erb"
4836
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4837
+
4671
4838
  // keyword_loc
4672
4839
  #line 180 "api_node.c.erb"
4673
- argv[0] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
4840
+ argv[1] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end, source);
4674
4841
 
4675
4842
  // closing_loc
4676
4843
  #line 183 "api_node.c.erb"
4677
- argv[1] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4844
+ argv[2] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4678
4845
 
4679
4846
  // predicate
4680
4847
  #line 155 "api_node.c.erb"
4681
- argv[2] = rb_ary_pop(value_stack);
4848
+ argv[3] = rb_ary_pop(value_stack);
4682
4849
 
4683
4850
  // statements
4684
4851
  #line 155 "api_node.c.erb"
4685
- argv[3] = rb_ary_pop(value_stack);
4686
-
4687
- // flags
4688
- #line 189 "api_node.c.erb"
4689
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4852
+ argv[4] = rb_ary_pop(value_stack);
4690
4853
 
4691
4854
  // location
4692
4855
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4697,28 +4860,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4697
4860
  #line 144 "api_node.c.erb"
4698
4861
  case PM_X_STRING_NODE: {
4699
4862
  pm_x_string_node_t *cast = (pm_x_string_node_t *) node;
4700
- VALUE argv[5];
4863
+ VALUE argv[6];
4864
+
4865
+ // flags
4866
+ #line 192 "api_node.c.erb"
4867
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4701
4868
 
4702
4869
  // opening_loc
4703
4870
  #line 180 "api_node.c.erb"
4704
- argv[0] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4871
+ argv[1] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
4705
4872
 
4706
4873
  // content_loc
4707
4874
  #line 180 "api_node.c.erb"
4708
- argv[1] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
4875
+ argv[2] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end, source);
4709
4876
 
4710
4877
  // closing_loc
4711
4878
  #line 180 "api_node.c.erb"
4712
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4879
+ argv[3] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
4713
4880
 
4714
4881
  // unescaped
4715
4882
  #line 164 "api_node.c.erb"
4716
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4883
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4717
4884
 
4718
4885
  // location
4719
- argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
4886
+ argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
4720
4887
 
4721
- rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismXStringNode));
4888
+ rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismXStringNode));
4722
4889
  break;
4723
4890
  }
4724
4891
  #line 144 "api_node.c.erb"
@@ -4782,7 +4949,9 @@ Init_prism_api_node(void) {
4782
4949
  rb_cPrismCallNode = rb_define_class_under(rb_cPrism, "CallNode", rb_cPrismNode);
4783
4950
  rb_cPrismCallOperatorWriteNode = rb_define_class_under(rb_cPrism, "CallOperatorWriteNode", rb_cPrismNode);
4784
4951
  rb_cPrismCallOrWriteNode = rb_define_class_under(rb_cPrism, "CallOrWriteNode", rb_cPrismNode);
4952
+ rb_cPrismCallTargetNode = rb_define_class_under(rb_cPrism, "CallTargetNode", rb_cPrismNode);
4785
4953
  rb_cPrismCapturePatternNode = rb_define_class_under(rb_cPrism, "CapturePatternNode", rb_cPrismNode);
4954
+ rb_cPrismCaseMatchNode = rb_define_class_under(rb_cPrism, "CaseMatchNode", rb_cPrismNode);
4786
4955
  rb_cPrismCaseNode = rb_define_class_under(rb_cPrism, "CaseNode", rb_cPrismNode);
4787
4956
  rb_cPrismClassNode = rb_define_class_under(rb_cPrism, "ClassNode", rb_cPrismNode);
4788
4957
  rb_cPrismClassVariableAndWriteNode = rb_define_class_under(rb_cPrism, "ClassVariableAndWriteNode", rb_cPrismNode);
@@ -4828,10 +4997,12 @@ Init_prism_api_node(void) {
4828
4997
  rb_cPrismIfNode = rb_define_class_under(rb_cPrism, "IfNode", rb_cPrismNode);
4829
4998
  rb_cPrismImaginaryNode = rb_define_class_under(rb_cPrism, "ImaginaryNode", rb_cPrismNode);
4830
4999
  rb_cPrismImplicitNode = rb_define_class_under(rb_cPrism, "ImplicitNode", rb_cPrismNode);
5000
+ rb_cPrismImplicitRestNode = rb_define_class_under(rb_cPrism, "ImplicitRestNode", rb_cPrismNode);
4831
5001
  rb_cPrismInNode = rb_define_class_under(rb_cPrism, "InNode", rb_cPrismNode);
4832
5002
  rb_cPrismIndexAndWriteNode = rb_define_class_under(rb_cPrism, "IndexAndWriteNode", rb_cPrismNode);
4833
5003
  rb_cPrismIndexOperatorWriteNode = rb_define_class_under(rb_cPrism, "IndexOperatorWriteNode", rb_cPrismNode);
4834
5004
  rb_cPrismIndexOrWriteNode = rb_define_class_under(rb_cPrism, "IndexOrWriteNode", rb_cPrismNode);
5005
+ rb_cPrismIndexTargetNode = rb_define_class_under(rb_cPrism, "IndexTargetNode", rb_cPrismNode);
4835
5006
  rb_cPrismInstanceVariableAndWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableAndWriteNode", rb_cPrismNode);
4836
5007
  rb_cPrismInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOperatorWriteNode", rb_cPrismNode);
4837
5008
  rb_cPrismInstanceVariableOrWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOrWriteNode", rb_cPrismNode);
@@ -4864,6 +5035,7 @@ Init_prism_api_node(void) {
4864
5035
  rb_cPrismNextNode = rb_define_class_under(rb_cPrism, "NextNode", rb_cPrismNode);
4865
5036
  rb_cPrismNilNode = rb_define_class_under(rb_cPrism, "NilNode", rb_cPrismNode);
4866
5037
  rb_cPrismNoKeywordsParameterNode = rb_define_class_under(rb_cPrism, "NoKeywordsParameterNode", rb_cPrismNode);
5038
+ rb_cPrismNumberedParametersNode = rb_define_class_under(rb_cPrism, "NumberedParametersNode", rb_cPrismNode);
4867
5039
  rb_cPrismNumberedReferenceReadNode = rb_define_class_under(rb_cPrism, "NumberedReferenceReadNode", rb_cPrismNode);
4868
5040
  rb_cPrismOptionalKeywordParameterNode = rb_define_class_under(rb_cPrism, "OptionalKeywordParameterNode", rb_cPrismNode);
4869
5041
  rb_cPrismOptionalParameterNode = rb_define_class_under(rb_cPrism, "OptionalParameterNode", rb_cPrismNode);
@@ -4893,7 +5065,6 @@ Init_prism_api_node(void) {
4893
5065
  rb_cPrismSourceLineNode = rb_define_class_under(rb_cPrism, "SourceLineNode", rb_cPrismNode);
4894
5066
  rb_cPrismSplatNode = rb_define_class_under(rb_cPrism, "SplatNode", rb_cPrismNode);
4895
5067
  rb_cPrismStatementsNode = rb_define_class_under(rb_cPrism, "StatementsNode", rb_cPrismNode);
4896
- rb_cPrismStringConcatNode = rb_define_class_under(rb_cPrism, "StringConcatNode", rb_cPrismNode);
4897
5068
  rb_cPrismStringNode = rb_define_class_under(rb_cPrism, "StringNode", rb_cPrismNode);
4898
5069
  rb_cPrismSuperNode = rb_define_class_under(rb_cPrism, "SuperNode", rb_cPrismNode);
4899
5070
  rb_cPrismSymbolNode = rb_define_class_under(rb_cPrism, "SymbolNode", rb_cPrismNode);