prism 0.17.1 → 0.19.0

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