prism 0.18.0 → 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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -1
  3. data/README.md +2 -1
  4. data/config.yml +188 -55
  5. data/docs/building.md +9 -2
  6. data/docs/configuration.md +10 -9
  7. data/docs/encoding.md +24 -56
  8. data/docs/local_variable_depth.md +229 -0
  9. data/docs/ruby_api.md +2 -0
  10. data/docs/serialization.md +18 -13
  11. data/ext/prism/api_node.c +337 -195
  12. data/ext/prism/extconf.rb +13 -7
  13. data/ext/prism/extension.c +96 -32
  14. data/ext/prism/extension.h +1 -1
  15. data/include/prism/ast.h +340 -137
  16. data/include/prism/defines.h +17 -0
  17. data/include/prism/diagnostic.h +11 -5
  18. data/include/prism/encoding.h +248 -0
  19. data/include/prism/options.h +2 -2
  20. data/include/prism/parser.h +62 -42
  21. data/include/prism/regexp.h +2 -2
  22. data/include/prism/util/pm_buffer.h +9 -1
  23. data/include/prism/util/pm_memchr.h +2 -2
  24. data/include/prism/util/pm_strpbrk.h +3 -3
  25. data/include/prism/version.h +2 -2
  26. data/include/prism.h +13 -15
  27. data/lib/prism/compiler.rb +12 -0
  28. data/lib/prism/debug.rb +9 -4
  29. data/lib/prism/desugar_compiler.rb +3 -3
  30. data/lib/prism/dispatcher.rb +56 -0
  31. data/lib/prism/dot_visitor.rb +476 -198
  32. data/lib/prism/dsl.rb +66 -46
  33. data/lib/prism/ffi.rb +16 -3
  34. data/lib/prism/lex_compat.rb +19 -9
  35. data/lib/prism/mutation_compiler.rb +20 -0
  36. data/lib/prism/node.rb +1173 -450
  37. data/lib/prism/node_ext.rb +41 -16
  38. data/lib/prism/parse_result.rb +12 -15
  39. data/lib/prism/ripper_compat.rb +49 -34
  40. data/lib/prism/serialize.rb +242 -212
  41. data/lib/prism/visitor.rb +12 -0
  42. data/lib/prism.rb +20 -4
  43. data/prism.gemspec +4 -10
  44. data/rbi/prism.rbi +605 -230
  45. data/rbi/prism_static.rbi +3 -0
  46. data/sig/prism.rbs +379 -124
  47. data/sig/prism_static.rbs +1 -0
  48. data/src/diagnostic.c +228 -222
  49. data/src/encoding.c +5137 -0
  50. data/src/node.c +66 -0
  51. data/src/options.c +21 -2
  52. data/src/prettyprint.c +806 -406
  53. data/src/prism.c +1092 -700
  54. data/src/regexp.c +3 -3
  55. data/src/serialize.c +227 -157
  56. data/src/util/pm_buffer.c +10 -1
  57. data/src/util/pm_memchr.c +1 -1
  58. data/src/util/pm_strpbrk.c +4 -4
  59. metadata +5 -11
  60. data/include/prism/enc/pm_encoding.h +0 -227
  61. data/src/enc/pm_big5.c +0 -116
  62. data/src/enc/pm_cp51932.c +0 -57
  63. data/src/enc/pm_euc_jp.c +0 -69
  64. data/src/enc/pm_gbk.c +0 -65
  65. data/src/enc/pm_shift_jis.c +0 -57
  66. data/src/enc/pm_tables.c +0 -2073
  67. data/src/enc/pm_unicode.c +0 -2369
  68. data/src/enc/pm_windows_31j.c +0 -57
data/ext/prism/api_node.c CHANGED
@@ -35,6 +35,7 @@ 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;
39
40
  static VALUE rb_cPrismCaseMatchNode;
40
41
  static VALUE rb_cPrismCaseNode;
@@ -82,10 +83,12 @@ static VALUE rb_cPrismHashPatternNode;
82
83
  static VALUE rb_cPrismIfNode;
83
84
  static VALUE rb_cPrismImaginaryNode;
84
85
  static VALUE rb_cPrismImplicitNode;
86
+ static VALUE rb_cPrismImplicitRestNode;
85
87
  static VALUE rb_cPrismInNode;
86
88
  static VALUE rb_cPrismIndexAndWriteNode;
87
89
  static VALUE rb_cPrismIndexOperatorWriteNode;
88
90
  static VALUE rb_cPrismIndexOrWriteNode;
91
+ static VALUE rb_cPrismIndexTargetNode;
89
92
  static VALUE rb_cPrismInstanceVariableAndWriteNode;
90
93
  static VALUE rb_cPrismInstanceVariableOperatorWriteNode;
91
94
  static VALUE rb_cPrismInstanceVariableOrWriteNode;
@@ -118,6 +121,7 @@ static VALUE rb_cPrismMultiWriteNode;
118
121
  static VALUE rb_cPrismNextNode;
119
122
  static VALUE rb_cPrismNilNode;
120
123
  static VALUE rb_cPrismNoKeywordsParameterNode;
124
+ static VALUE rb_cPrismNumberedParametersNode;
121
125
  static VALUE rb_cPrismNumberedReferenceReadNode;
122
126
  static VALUE rb_cPrismOptionalKeywordParameterNode;
123
127
  static VALUE rb_cPrismOptionalParameterNode;
@@ -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;
@@ -687,6 +697,14 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
687
697
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
688
698
  break;
689
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
+ }
690
708
  #line 118 "api_node.c.erb"
691
709
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
692
710
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -1141,17 +1159,17 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1141
1159
  pm_arguments_node_t *cast = (pm_arguments_node_t *) node;
1142
1160
  VALUE argv[3];
1143
1161
 
1162
+ // flags
1163
+ #line 192 "api_node.c.erb"
1164
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1165
+
1144
1166
  // arguments
1145
1167
  #line 158 "api_node.c.erb"
1146
- argv[0] = rb_ary_new_capa(cast->arguments.size);
1168
+ argv[1] = rb_ary_new_capa(cast->arguments.size);
1147
1169
  for (size_t index = 0; index < cast->arguments.size; index++) {
1148
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
1170
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
1149
1171
  }
1150
1172
 
1151
- // flags
1152
- #line 189 "api_node.c.erb"
1153
- argv[1] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1154
-
1155
1173
  // location
1156
1174
  argv[2] = pm_location_new(parser, node->location.start, node->location.end, source);
1157
1175
 
@@ -1161,27 +1179,31 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1161
1179
  #line 144 "api_node.c.erb"
1162
1180
  case PM_ARRAY_NODE: {
1163
1181
  pm_array_node_t *cast = (pm_array_node_t *) node;
1164
- 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);
1165
1187
 
1166
1188
  // elements
1167
1189
  #line 158 "api_node.c.erb"
1168
- argv[0] = rb_ary_new_capa(cast->elements.size);
1190
+ argv[1] = rb_ary_new_capa(cast->elements.size);
1169
1191
  for (size_t index = 0; index < cast->elements.size; index++) {
1170
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
1192
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
1171
1193
  }
1172
1194
 
1173
1195
  // opening_loc
1174
1196
  #line 183 "api_node.c.erb"
1175
- 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);
1176
1198
 
1177
1199
  // closing_loc
1178
1200
  #line 183 "api_node.c.erb"
1179
- 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);
1180
1202
 
1181
1203
  // location
1182
- 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);
1183
1205
 
1184
- 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));
1185
1207
  break;
1186
1208
  }
1187
1209
  #line 144 "api_node.c.erb"
@@ -1356,7 +1378,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1356
1378
  #line 144 "api_node.c.erb"
1357
1379
  case PM_BLOCK_NODE: {
1358
1380
  pm_block_node_t *cast = (pm_block_node_t *) node;
1359
- VALUE argv[6];
1381
+ VALUE argv[7];
1360
1382
 
1361
1383
  // locals
1362
1384
  #line 173 "api_node.c.erb"
@@ -1366,26 +1388,30 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1366
1388
  rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
1367
1389
  }
1368
1390
 
1391
+ // locals_body_index
1392
+ #line 189 "api_node.c.erb"
1393
+ argv[1] = ULONG2NUM(cast->locals_body_index);
1394
+
1369
1395
  // parameters
1370
1396
  #line 155 "api_node.c.erb"
1371
- argv[1] = rb_ary_pop(value_stack);
1397
+ argv[2] = rb_ary_pop(value_stack);
1372
1398
 
1373
1399
  // body
1374
1400
  #line 155 "api_node.c.erb"
1375
- argv[2] = rb_ary_pop(value_stack);
1401
+ argv[3] = rb_ary_pop(value_stack);
1376
1402
 
1377
1403
  // opening_loc
1378
1404
  #line 180 "api_node.c.erb"
1379
- 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);
1380
1406
 
1381
1407
  // closing_loc
1382
1408
  #line 180 "api_node.c.erb"
1383
- 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);
1384
1410
 
1385
1411
  // location
1386
- 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);
1387
1413
 
1388
- 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));
1389
1415
  break;
1390
1416
  }
1391
1417
  #line 144 "api_node.c.erb"
@@ -1464,21 +1490,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1464
1490
  pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
1465
1491
  VALUE argv[9];
1466
1492
 
1493
+ // flags
1494
+ #line 192 "api_node.c.erb"
1495
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1496
+
1467
1497
  // receiver
1468
1498
  #line 155 "api_node.c.erb"
1469
- argv[0] = rb_ary_pop(value_stack);
1499
+ argv[1] = rb_ary_pop(value_stack);
1470
1500
 
1471
1501
  // call_operator_loc
1472
1502
  #line 183 "api_node.c.erb"
1473
- 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);
1474
1504
 
1475
1505
  // message_loc
1476
1506
  #line 183 "api_node.c.erb"
1477
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1478
-
1479
- // flags
1480
- #line 189 "api_node.c.erb"
1481
- 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);
1482
1508
 
1483
1509
  // read_name
1484
1510
  #line 167 "api_node.c.erb"
@@ -1509,42 +1535,42 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1509
1535
  pm_call_node_t *cast = (pm_call_node_t *) node;
1510
1536
  VALUE argv[10];
1511
1537
 
1538
+ // flags
1539
+ #line 192 "api_node.c.erb"
1540
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1541
+
1512
1542
  // receiver
1513
1543
  #line 155 "api_node.c.erb"
1514
- argv[0] = rb_ary_pop(value_stack);
1544
+ argv[1] = rb_ary_pop(value_stack);
1515
1545
 
1516
1546
  // call_operator_loc
1517
1547
  #line 183 "api_node.c.erb"
1518
- 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]);
1519
1554
 
1520
1555
  // message_loc
1521
1556
  #line 183 "api_node.c.erb"
1522
- 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);
1523
1558
 
1524
1559
  // opening_loc
1525
1560
  #line 183 "api_node.c.erb"
1526
- 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);
1527
1562
 
1528
1563
  // arguments
1529
1564
  #line 155 "api_node.c.erb"
1530
- argv[4] = rb_ary_pop(value_stack);
1565
+ argv[6] = rb_ary_pop(value_stack);
1531
1566
 
1532
1567
  // closing_loc
1533
1568
  #line 183 "api_node.c.erb"
1534
- 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);
1535
1570
 
1536
1571
  // block
1537
1572
  #line 155 "api_node.c.erb"
1538
- argv[6] = rb_ary_pop(value_stack);
1539
-
1540
- // flags
1541
- #line 189 "api_node.c.erb"
1542
- argv[7] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1543
-
1544
- // name
1545
- #line 167 "api_node.c.erb"
1546
- assert(cast->name != 0);
1547
- argv[8] = rb_id2sym(constants[cast->name - 1]);
1573
+ argv[8] = rb_ary_pop(value_stack);
1548
1574
 
1549
1575
  // location
1550
1576
  argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -1557,21 +1583,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1557
1583
  pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
1558
1584
  VALUE argv[10];
1559
1585
 
1586
+ // flags
1587
+ #line 192 "api_node.c.erb"
1588
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1589
+
1560
1590
  // receiver
1561
1591
  #line 155 "api_node.c.erb"
1562
- argv[0] = rb_ary_pop(value_stack);
1592
+ argv[1] = rb_ary_pop(value_stack);
1563
1593
 
1564
1594
  // call_operator_loc
1565
1595
  #line 183 "api_node.c.erb"
1566
- 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);
1567
1597
 
1568
1598
  // message_loc
1569
1599
  #line 183 "api_node.c.erb"
1570
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1571
-
1572
- // flags
1573
- #line 189 "api_node.c.erb"
1574
- 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);
1575
1601
 
1576
1602
  // read_name
1577
1603
  #line 167 "api_node.c.erb"
@@ -1607,21 +1633,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1607
1633
  pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
1608
1634
  VALUE argv[9];
1609
1635
 
1636
+ // flags
1637
+ #line 192 "api_node.c.erb"
1638
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1639
+
1610
1640
  // receiver
1611
1641
  #line 155 "api_node.c.erb"
1612
- argv[0] = rb_ary_pop(value_stack);
1642
+ argv[1] = rb_ary_pop(value_stack);
1613
1643
 
1614
1644
  // call_operator_loc
1615
1645
  #line 183 "api_node.c.erb"
1616
- 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);
1617
1647
 
1618
1648
  // message_loc
1619
1649
  #line 183 "api_node.c.erb"
1620
- argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1621
-
1622
- // flags
1623
- #line 189 "api_node.c.erb"
1624
- 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);
1625
1651
 
1626
1652
  // read_name
1627
1653
  #line 167 "api_node.c.erb"
@@ -1647,6 +1673,38 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1647
1673
  rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCallOrWriteNode));
1648
1674
  break;
1649
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
+ }
1650
1708
  #line 144 "api_node.c.erb"
1651
1709
  case PM_CAPTURE_PATTERN_NODE: {
1652
1710
  pm_capture_pattern_node_t *cast = (pm_capture_pattern_node_t *) node;
@@ -2230,7 +2288,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2230
2288
  #line 144 "api_node.c.erb"
2231
2289
  case PM_DEF_NODE: {
2232
2290
  pm_def_node_t *cast = (pm_def_node_t *) node;
2233
- VALUE argv[13];
2291
+ VALUE argv[14];
2234
2292
 
2235
2293
  // name
2236
2294
  #line 167 "api_node.c.erb"
@@ -2261,34 +2319,38 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2261
2319
  rb_ary_push(argv[5], rb_id2sym(constants[cast->locals.ids[index] - 1]));
2262
2320
  }
2263
2321
 
2322
+ // locals_body_index
2323
+ #line 189 "api_node.c.erb"
2324
+ argv[6] = ULONG2NUM(cast->locals_body_index);
2325
+
2264
2326
  // def_keyword_loc
2265
2327
  #line 180 "api_node.c.erb"
2266
- 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);
2267
2329
 
2268
2330
  // operator_loc
2269
2331
  #line 183 "api_node.c.erb"
2270
- 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);
2271
2333
 
2272
2334
  // lparen_loc
2273
2335
  #line 183 "api_node.c.erb"
2274
- 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);
2275
2337
 
2276
2338
  // rparen_loc
2277
2339
  #line 183 "api_node.c.erb"
2278
- 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);
2279
2341
 
2280
2342
  // equal_loc
2281
2343
  #line 183 "api_node.c.erb"
2282
- 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);
2283
2345
 
2284
2346
  // end_keyword_loc
2285
2347
  #line 183 "api_node.c.erb"
2286
- 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);
2287
2349
 
2288
2350
  // location
2289
- 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);
2290
2352
 
2291
- 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));
2292
2354
  break;
2293
2355
  }
2294
2356
  #line 144 "api_node.c.erb"
@@ -2459,21 +2521,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2459
2521
  pm_flip_flop_node_t *cast = (pm_flip_flop_node_t *) node;
2460
2522
  VALUE argv[5];
2461
2523
 
2524
+ // flags
2525
+ #line 192 "api_node.c.erb"
2526
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2527
+
2462
2528
  // left
2463
2529
  #line 155 "api_node.c.erb"
2464
- argv[0] = rb_ary_pop(value_stack);
2530
+ argv[1] = rb_ary_pop(value_stack);
2465
2531
 
2466
2532
  // right
2467
2533
  #line 155 "api_node.c.erb"
2468
- argv[1] = rb_ary_pop(value_stack);
2534
+ argv[2] = rb_ary_pop(value_stack);
2469
2535
 
2470
2536
  // operator_loc
2471
2537
  #line 180 "api_node.c.erb"
2472
- argv[2] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2473
-
2474
- // flags
2475
- #line 189 "api_node.c.erb"
2476
- 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);
2477
2539
 
2478
2540
  // location
2479
2541
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -2836,6 +2898,16 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2836
2898
  rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismImplicitNode));
2837
2899
  break;
2838
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
+ }
2839
2911
  #line 144 "api_node.c.erb"
2840
2912
  case PM_IN_NODE: {
2841
2913
  pm_in_node_t *cast = (pm_in_node_t *) node;
@@ -2868,33 +2940,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2868
2940
  pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
2869
2941
  VALUE argv[10];
2870
2942
 
2943
+ // flags
2944
+ #line 192 "api_node.c.erb"
2945
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2946
+
2871
2947
  // receiver
2872
2948
  #line 155 "api_node.c.erb"
2873
- argv[0] = rb_ary_pop(value_stack);
2949
+ argv[1] = rb_ary_pop(value_stack);
2874
2950
 
2875
2951
  // call_operator_loc
2876
2952
  #line 183 "api_node.c.erb"
2877
- 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);
2878
2954
 
2879
2955
  // opening_loc
2880
2956
  #line 180 "api_node.c.erb"
2881
- 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);
2882
2958
 
2883
2959
  // arguments
2884
2960
  #line 155 "api_node.c.erb"
2885
- argv[3] = rb_ary_pop(value_stack);
2961
+ argv[4] = rb_ary_pop(value_stack);
2886
2962
 
2887
2963
  // closing_loc
2888
2964
  #line 180 "api_node.c.erb"
2889
- 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);
2890
2966
 
2891
2967
  // block
2892
2968
  #line 155 "api_node.c.erb"
2893
- argv[5] = rb_ary_pop(value_stack);
2894
-
2895
- // flags
2896
- #line 189 "api_node.c.erb"
2897
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2969
+ argv[6] = rb_ary_pop(value_stack);
2898
2970
 
2899
2971
  // operator_loc
2900
2972
  #line 180 "api_node.c.erb"
@@ -2915,33 +2987,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2915
2987
  pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
2916
2988
  VALUE argv[11];
2917
2989
 
2990
+ // flags
2991
+ #line 192 "api_node.c.erb"
2992
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2993
+
2918
2994
  // receiver
2919
2995
  #line 155 "api_node.c.erb"
2920
- argv[0] = rb_ary_pop(value_stack);
2996
+ argv[1] = rb_ary_pop(value_stack);
2921
2997
 
2922
2998
  // call_operator_loc
2923
2999
  #line 183 "api_node.c.erb"
2924
- 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);
2925
3001
 
2926
3002
  // opening_loc
2927
3003
  #line 180 "api_node.c.erb"
2928
- 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);
2929
3005
 
2930
3006
  // arguments
2931
3007
  #line 155 "api_node.c.erb"
2932
- argv[3] = rb_ary_pop(value_stack);
3008
+ argv[4] = rb_ary_pop(value_stack);
2933
3009
 
2934
3010
  // closing_loc
2935
3011
  #line 180 "api_node.c.erb"
2936
- 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);
2937
3013
 
2938
3014
  // block
2939
3015
  #line 155 "api_node.c.erb"
2940
- argv[5] = rb_ary_pop(value_stack);
2941
-
2942
- // flags
2943
- #line 189 "api_node.c.erb"
2944
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3016
+ argv[6] = rb_ary_pop(value_stack);
2945
3017
 
2946
3018
  // operator
2947
3019
  #line 167 "api_node.c.erb"
@@ -2967,33 +3039,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2967
3039
  pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
2968
3040
  VALUE argv[10];
2969
3041
 
3042
+ // flags
3043
+ #line 192 "api_node.c.erb"
3044
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3045
+
2970
3046
  // receiver
2971
3047
  #line 155 "api_node.c.erb"
2972
- argv[0] = rb_ary_pop(value_stack);
3048
+ argv[1] = rb_ary_pop(value_stack);
2973
3049
 
2974
3050
  // call_operator_loc
2975
3051
  #line 183 "api_node.c.erb"
2976
- 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);
2977
3053
 
2978
3054
  // opening_loc
2979
3055
  #line 180 "api_node.c.erb"
2980
- 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);
2981
3057
 
2982
3058
  // arguments
2983
3059
  #line 155 "api_node.c.erb"
2984
- argv[3] = rb_ary_pop(value_stack);
3060
+ argv[4] = rb_ary_pop(value_stack);
2985
3061
 
2986
3062
  // closing_loc
2987
3063
  #line 180 "api_node.c.erb"
2988
- 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);
2989
3065
 
2990
3066
  // block
2991
3067
  #line 155 "api_node.c.erb"
2992
- argv[5] = rb_ary_pop(value_stack);
2993
-
2994
- // flags
2995
- #line 189 "api_node.c.erb"
2996
- argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3068
+ argv[6] = rb_ary_pop(value_stack);
2997
3069
 
2998
3070
  // operator_loc
2999
3071
  #line 180 "api_node.c.erb"
@@ -3009,6 +3081,41 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3009
3081
  rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismIndexOrWriteNode));
3010
3082
  break;
3011
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
+ }
3012
3119
  #line 144 "api_node.c.erb"
3013
3120
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
3014
3121
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -3163,7 +3270,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3163
3270
  VALUE argv[2];
3164
3271
 
3165
3272
  // flags
3166
- #line 189 "api_node.c.erb"
3273
+ #line 192 "api_node.c.erb"
3167
3274
  argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3168
3275
 
3169
3276
  // location
@@ -3177,24 +3284,24 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3177
3284
  pm_interpolated_match_last_line_node_t *cast = (pm_interpolated_match_last_line_node_t *) node;
3178
3285
  VALUE argv[5];
3179
3286
 
3287
+ // flags
3288
+ #line 192 "api_node.c.erb"
3289
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3290
+
3180
3291
  // opening_loc
3181
3292
  #line 180 "api_node.c.erb"
3182
- 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);
3183
3294
 
3184
3295
  // parts
3185
3296
  #line 158 "api_node.c.erb"
3186
- argv[1] = rb_ary_new_capa(cast->parts.size);
3297
+ argv[2] = rb_ary_new_capa(cast->parts.size);
3187
3298
  for (size_t index = 0; index < cast->parts.size; index++) {
3188
- rb_ary_push(argv[1], rb_ary_pop(value_stack));
3299
+ rb_ary_push(argv[2], rb_ary_pop(value_stack));
3189
3300
  }
3190
3301
 
3191
3302
  // closing_loc
3192
3303
  #line 180 "api_node.c.erb"
3193
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3194
-
3195
- // flags
3196
- #line 189 "api_node.c.erb"
3197
- 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);
3198
3305
 
3199
3306
  // location
3200
3307
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3207,24 +3314,24 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3207
3314
  pm_interpolated_regular_expression_node_t *cast = (pm_interpolated_regular_expression_node_t *) node;
3208
3315
  VALUE argv[5];
3209
3316
 
3317
+ // flags
3318
+ #line 192 "api_node.c.erb"
3319
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3320
+
3210
3321
  // opening_loc
3211
3322
  #line 180 "api_node.c.erb"
3212
- 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);
3213
3324
 
3214
3325
  // parts
3215
3326
  #line 158 "api_node.c.erb"
3216
- argv[1] = rb_ary_new_capa(cast->parts.size);
3327
+ argv[2] = rb_ary_new_capa(cast->parts.size);
3217
3328
  for (size_t index = 0; index < cast->parts.size; index++) {
3218
- rb_ary_push(argv[1], rb_ary_pop(value_stack));
3329
+ rb_ary_push(argv[2], rb_ary_pop(value_stack));
3219
3330
  }
3220
3331
 
3221
3332
  // closing_loc
3222
3333
  #line 180 "api_node.c.erb"
3223
- argv[2] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
3224
-
3225
- // flags
3226
- #line 189 "api_node.c.erb"
3227
- 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);
3228
3335
 
3229
3336
  // location
3230
3337
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3313,19 +3420,23 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3313
3420
  #line 144 "api_node.c.erb"
3314
3421
  case PM_KEYWORD_HASH_NODE: {
3315
3422
  pm_keyword_hash_node_t *cast = (pm_keyword_hash_node_t *) node;
3316
- 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);
3317
3428
 
3318
3429
  // elements
3319
3430
  #line 158 "api_node.c.erb"
3320
- argv[0] = rb_ary_new_capa(cast->elements.size);
3431
+ argv[1] = rb_ary_new_capa(cast->elements.size);
3321
3432
  for (size_t index = 0; index < cast->elements.size; index++) {
3322
- rb_ary_push(argv[0], rb_ary_pop(value_stack));
3433
+ rb_ary_push(argv[1], rb_ary_pop(value_stack));
3323
3434
  }
3324
3435
 
3325
3436
  // location
3326
- 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);
3327
3438
 
3328
- 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));
3329
3440
  break;
3330
3441
  }
3331
3442
  #line 144 "api_node.c.erb"
@@ -3353,7 +3464,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3353
3464
  #line 144 "api_node.c.erb"
3354
3465
  case PM_LAMBDA_NODE: {
3355
3466
  pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
3356
- VALUE argv[7];
3467
+ VALUE argv[8];
3357
3468
 
3358
3469
  // locals
3359
3470
  #line 173 "api_node.c.erb"
@@ -3363,30 +3474,34 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3363
3474
  rb_ary_push(argv[0], rb_id2sym(constants[cast->locals.ids[index] - 1]));
3364
3475
  }
3365
3476
 
3477
+ // locals_body_index
3478
+ #line 189 "api_node.c.erb"
3479
+ argv[1] = ULONG2NUM(cast->locals_body_index);
3480
+
3366
3481
  // operator_loc
3367
3482
  #line 180 "api_node.c.erb"
3368
- 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);
3369
3484
 
3370
3485
  // opening_loc
3371
3486
  #line 180 "api_node.c.erb"
3372
- 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);
3373
3488
 
3374
3489
  // closing_loc
3375
3490
  #line 180 "api_node.c.erb"
3376
- 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);
3377
3492
 
3378
3493
  // parameters
3379
3494
  #line 155 "api_node.c.erb"
3380
- argv[4] = rb_ary_pop(value_stack);
3495
+ argv[5] = rb_ary_pop(value_stack);
3381
3496
 
3382
3497
  // body
3383
3498
  #line 155 "api_node.c.erb"
3384
- argv[5] = rb_ary_pop(value_stack);
3499
+ argv[6] = rb_ary_pop(value_stack);
3385
3500
 
3386
3501
  // location
3387
- 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);
3388
3503
 
3389
- 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));
3390
3505
  break;
3391
3506
  }
3392
3507
  #line 144 "api_node.c.erb"
@@ -3412,7 +3527,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3412
3527
  argv[3] = rb_id2sym(constants[cast->name - 1]);
3413
3528
 
3414
3529
  // depth
3415
- #line 186 "api_node.c.erb"
3530
+ #line 189 "api_node.c.erb"
3416
3531
  argv[4] = ULONG2NUM(cast->depth);
3417
3532
 
3418
3533
  // location
@@ -3449,7 +3564,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3449
3564
  argv[4] = rb_id2sym(constants[cast->operator - 1]);
3450
3565
 
3451
3566
  // depth
3452
- #line 186 "api_node.c.erb"
3567
+ #line 189 "api_node.c.erb"
3453
3568
  argv[5] = ULONG2NUM(cast->depth);
3454
3569
 
3455
3570
  // location
@@ -3481,7 +3596,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3481
3596
  argv[3] = rb_id2sym(constants[cast->name - 1]);
3482
3597
 
3483
3598
  // depth
3484
- #line 186 "api_node.c.erb"
3599
+ #line 189 "api_node.c.erb"
3485
3600
  argv[4] = ULONG2NUM(cast->depth);
3486
3601
 
3487
3602
  // location
@@ -3501,7 +3616,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3501
3616
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3502
3617
 
3503
3618
  // depth
3504
- #line 186 "api_node.c.erb"
3619
+ #line 189 "api_node.c.erb"
3505
3620
  argv[1] = ULONG2NUM(cast->depth);
3506
3621
 
3507
3622
  // location
@@ -3521,7 +3636,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3521
3636
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3522
3637
 
3523
3638
  // depth
3524
- #line 186 "api_node.c.erb"
3639
+ #line 189 "api_node.c.erb"
3525
3640
  argv[1] = ULONG2NUM(cast->depth);
3526
3641
 
3527
3642
  // location
@@ -3541,7 +3656,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3541
3656
  argv[0] = rb_id2sym(constants[cast->name - 1]);
3542
3657
 
3543
3658
  // depth
3544
- #line 186 "api_node.c.erb"
3659
+ #line 189 "api_node.c.erb"
3545
3660
  argv[1] = ULONG2NUM(cast->depth);
3546
3661
 
3547
3662
  // name_loc
@@ -3567,25 +3682,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3567
3682
  pm_match_last_line_node_t *cast = (pm_match_last_line_node_t *) node;
3568
3683
  VALUE argv[6];
3569
3684
 
3685
+ // flags
3686
+ #line 192 "api_node.c.erb"
3687
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3688
+
3570
3689
  // opening_loc
3571
3690
  #line 180 "api_node.c.erb"
3572
- 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);
3573
3692
 
3574
3693
  // content_loc
3575
3694
  #line 180 "api_node.c.erb"
3576
- 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);
3577
3696
 
3578
3697
  // closing_loc
3579
3698
  #line 180 "api_node.c.erb"
3580
- 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);
3581
3700
 
3582
3701
  // unescaped
3583
3702
  #line 164 "api_node.c.erb"
3584
- argv[3] = pm_string_new(&cast->unescaped, encoding);
3585
-
3586
- // flags
3587
- #line 189 "api_node.c.erb"
3588
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3703
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
3589
3704
 
3590
3705
  // location
3591
3706
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3841,13 +3956,28 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3841
3956
  rb_ary_push(value_stack, rb_class_new_instance(3, argv, rb_cPrismNoKeywordsParameterNode));
3842
3957
  break;
3843
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
+ }
3844
3974
  #line 144 "api_node.c.erb"
3845
3975
  case PM_NUMBERED_REFERENCE_READ_NODE: {
3846
3976
  pm_numbered_reference_read_node_t *cast = (pm_numbered_reference_read_node_t *) node;
3847
3977
  VALUE argv[2];
3848
3978
 
3849
3979
  // number
3850
- #line 186 "api_node.c.erb"
3980
+ #line 189 "api_node.c.erb"
3851
3981
  argv[0] = ULONG2NUM(cast->number);
3852
3982
 
3853
3983
  // location
@@ -4133,21 +4263,21 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4133
4263
  pm_range_node_t *cast = (pm_range_node_t *) node;
4134
4264
  VALUE argv[5];
4135
4265
 
4266
+ // flags
4267
+ #line 192 "api_node.c.erb"
4268
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4269
+
4136
4270
  // left
4137
4271
  #line 155 "api_node.c.erb"
4138
- argv[0] = rb_ary_pop(value_stack);
4272
+ argv[1] = rb_ary_pop(value_stack);
4139
4273
 
4140
4274
  // right
4141
4275
  #line 155 "api_node.c.erb"
4142
- argv[1] = rb_ary_pop(value_stack);
4276
+ argv[2] = rb_ary_pop(value_stack);
4143
4277
 
4144
4278
  // operator_loc
4145
4279
  #line 180 "api_node.c.erb"
4146
- argv[2] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
4147
-
4148
- // flags
4149
- #line 189 "api_node.c.erb"
4150
- 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);
4151
4281
 
4152
4282
  // location
4153
4283
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4184,25 +4314,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4184
4314
  pm_regular_expression_node_t *cast = (pm_regular_expression_node_t *) node;
4185
4315
  VALUE argv[6];
4186
4316
 
4317
+ // flags
4318
+ #line 192 "api_node.c.erb"
4319
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4320
+
4187
4321
  // opening_loc
4188
4322
  #line 180 "api_node.c.erb"
4189
- 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);
4190
4324
 
4191
4325
  // content_loc
4192
4326
  #line 180 "api_node.c.erb"
4193
- 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);
4194
4328
 
4195
4329
  // closing_loc
4196
4330
  #line 180 "api_node.c.erb"
4197
- 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);
4198
4332
 
4199
4333
  // unescaped
4200
4334
  #line 164 "api_node.c.erb"
4201
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4202
-
4203
- // flags
4204
- #line 189 "api_node.c.erb"
4205
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4335
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4206
4336
 
4207
4337
  // location
4208
4338
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4485,7 +4615,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4485
4615
  VALUE argv[6];
4486
4616
 
4487
4617
  // flags
4488
- #line 189 "api_node.c.erb"
4618
+ #line 192 "api_node.c.erb"
4489
4619
  argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4490
4620
 
4491
4621
  // opening_loc
@@ -4544,28 +4674,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4544
4674
  #line 144 "api_node.c.erb"
4545
4675
  case PM_SYMBOL_NODE: {
4546
4676
  pm_symbol_node_t *cast = (pm_symbol_node_t *) node;
4547
- 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);
4548
4682
 
4549
4683
  // opening_loc
4550
4684
  #line 183 "api_node.c.erb"
4551
- 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);
4552
4686
 
4553
4687
  // value_loc
4554
4688
  #line 183 "api_node.c.erb"
4555
- 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);
4556
4690
 
4557
4691
  // closing_loc
4558
4692
  #line 183 "api_node.c.erb"
4559
- 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);
4560
4694
 
4561
4695
  // unescaped
4562
4696
  #line 164 "api_node.c.erb"
4563
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4697
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4564
4698
 
4565
4699
  // location
4566
- 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);
4567
4701
 
4568
- 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));
4569
4703
  break;
4570
4704
  }
4571
4705
  #line 144 "api_node.c.erb"
@@ -4640,25 +4774,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4640
4774
  pm_until_node_t *cast = (pm_until_node_t *) node;
4641
4775
  VALUE argv[6];
4642
4776
 
4777
+ // flags
4778
+ #line 192 "api_node.c.erb"
4779
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4780
+
4643
4781
  // keyword_loc
4644
4782
  #line 180 "api_node.c.erb"
4645
- 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);
4646
4784
 
4647
4785
  // closing_loc
4648
4786
  #line 183 "api_node.c.erb"
4649
- 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);
4650
4788
 
4651
4789
  // predicate
4652
4790
  #line 155 "api_node.c.erb"
4653
- argv[2] = rb_ary_pop(value_stack);
4791
+ argv[3] = rb_ary_pop(value_stack);
4654
4792
 
4655
4793
  // statements
4656
4794
  #line 155 "api_node.c.erb"
4657
- argv[3] = rb_ary_pop(value_stack);
4658
-
4659
- // flags
4660
- #line 189 "api_node.c.erb"
4661
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4795
+ argv[4] = rb_ary_pop(value_stack);
4662
4796
 
4663
4797
  // location
4664
4798
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4697,25 +4831,25 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4697
4831
  pm_while_node_t *cast = (pm_while_node_t *) node;
4698
4832
  VALUE argv[6];
4699
4833
 
4834
+ // flags
4835
+ #line 192 "api_node.c.erb"
4836
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4837
+
4700
4838
  // keyword_loc
4701
4839
  #line 180 "api_node.c.erb"
4702
- 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);
4703
4841
 
4704
4842
  // closing_loc
4705
4843
  #line 183 "api_node.c.erb"
4706
- 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);
4707
4845
 
4708
4846
  // predicate
4709
4847
  #line 155 "api_node.c.erb"
4710
- argv[2] = rb_ary_pop(value_stack);
4848
+ argv[3] = rb_ary_pop(value_stack);
4711
4849
 
4712
4850
  // statements
4713
4851
  #line 155 "api_node.c.erb"
4714
- argv[3] = rb_ary_pop(value_stack);
4715
-
4716
- // flags
4717
- #line 189 "api_node.c.erb"
4718
- argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4852
+ argv[4] = rb_ary_pop(value_stack);
4719
4853
 
4720
4854
  // location
4721
4855
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4726,28 +4860,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4726
4860
  #line 144 "api_node.c.erb"
4727
4861
  case PM_X_STRING_NODE: {
4728
4862
  pm_x_string_node_t *cast = (pm_x_string_node_t *) node;
4729
- 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);
4730
4868
 
4731
4869
  // opening_loc
4732
4870
  #line 180 "api_node.c.erb"
4733
- 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);
4734
4872
 
4735
4873
  // content_loc
4736
4874
  #line 180 "api_node.c.erb"
4737
- 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);
4738
4876
 
4739
4877
  // closing_loc
4740
4878
  #line 180 "api_node.c.erb"
4741
- 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);
4742
4880
 
4743
4881
  // unescaped
4744
4882
  #line 164 "api_node.c.erb"
4745
- argv[3] = pm_string_new(&cast->unescaped, encoding);
4883
+ argv[4] = pm_string_new(&cast->unescaped, encoding);
4746
4884
 
4747
4885
  // location
4748
- 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);
4749
4887
 
4750
- 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));
4751
4889
  break;
4752
4890
  }
4753
4891
  #line 144 "api_node.c.erb"
@@ -4811,6 +4949,7 @@ Init_prism_api_node(void) {
4811
4949
  rb_cPrismCallNode = rb_define_class_under(rb_cPrism, "CallNode", rb_cPrismNode);
4812
4950
  rb_cPrismCallOperatorWriteNode = rb_define_class_under(rb_cPrism, "CallOperatorWriteNode", rb_cPrismNode);
4813
4951
  rb_cPrismCallOrWriteNode = rb_define_class_under(rb_cPrism, "CallOrWriteNode", rb_cPrismNode);
4952
+ rb_cPrismCallTargetNode = rb_define_class_under(rb_cPrism, "CallTargetNode", rb_cPrismNode);
4814
4953
  rb_cPrismCapturePatternNode = rb_define_class_under(rb_cPrism, "CapturePatternNode", rb_cPrismNode);
4815
4954
  rb_cPrismCaseMatchNode = rb_define_class_under(rb_cPrism, "CaseMatchNode", rb_cPrismNode);
4816
4955
  rb_cPrismCaseNode = rb_define_class_under(rb_cPrism, "CaseNode", rb_cPrismNode);
@@ -4858,10 +4997,12 @@ Init_prism_api_node(void) {
4858
4997
  rb_cPrismIfNode = rb_define_class_under(rb_cPrism, "IfNode", rb_cPrismNode);
4859
4998
  rb_cPrismImaginaryNode = rb_define_class_under(rb_cPrism, "ImaginaryNode", rb_cPrismNode);
4860
4999
  rb_cPrismImplicitNode = rb_define_class_under(rb_cPrism, "ImplicitNode", rb_cPrismNode);
5000
+ rb_cPrismImplicitRestNode = rb_define_class_under(rb_cPrism, "ImplicitRestNode", rb_cPrismNode);
4861
5001
  rb_cPrismInNode = rb_define_class_under(rb_cPrism, "InNode", rb_cPrismNode);
4862
5002
  rb_cPrismIndexAndWriteNode = rb_define_class_under(rb_cPrism, "IndexAndWriteNode", rb_cPrismNode);
4863
5003
  rb_cPrismIndexOperatorWriteNode = rb_define_class_under(rb_cPrism, "IndexOperatorWriteNode", rb_cPrismNode);
4864
5004
  rb_cPrismIndexOrWriteNode = rb_define_class_under(rb_cPrism, "IndexOrWriteNode", rb_cPrismNode);
5005
+ rb_cPrismIndexTargetNode = rb_define_class_under(rb_cPrism, "IndexTargetNode", rb_cPrismNode);
4865
5006
  rb_cPrismInstanceVariableAndWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableAndWriteNode", rb_cPrismNode);
4866
5007
  rb_cPrismInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOperatorWriteNode", rb_cPrismNode);
4867
5008
  rb_cPrismInstanceVariableOrWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOrWriteNode", rb_cPrismNode);
@@ -4894,6 +5035,7 @@ Init_prism_api_node(void) {
4894
5035
  rb_cPrismNextNode = rb_define_class_under(rb_cPrism, "NextNode", rb_cPrismNode);
4895
5036
  rb_cPrismNilNode = rb_define_class_under(rb_cPrism, "NilNode", rb_cPrismNode);
4896
5037
  rb_cPrismNoKeywordsParameterNode = rb_define_class_under(rb_cPrism, "NoKeywordsParameterNode", rb_cPrismNode);
5038
+ rb_cPrismNumberedParametersNode = rb_define_class_under(rb_cPrism, "NumberedParametersNode", rb_cPrismNode);
4897
5039
  rb_cPrismNumberedReferenceReadNode = rb_define_class_under(rb_cPrism, "NumberedReferenceReadNode", rb_cPrismNode);
4898
5040
  rb_cPrismOptionalKeywordParameterNode = rb_define_class_under(rb_cPrism, "OptionalKeywordParameterNode", rb_cPrismNode);
4899
5041
  rb_cPrismOptionalParameterNode = rb_define_class_under(rb_cPrism, "OptionalParameterNode", rb_cPrismNode);