prism 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
data/ext/prism/api_node.c CHANGED
@@ -82,6 +82,9 @@ static VALUE rb_cPrismIfNode;
82
82
  static VALUE rb_cPrismImaginaryNode;
83
83
  static VALUE rb_cPrismImplicitNode;
84
84
  static VALUE rb_cPrismInNode;
85
+ static VALUE rb_cPrismIndexAndWriteNode;
86
+ static VALUE rb_cPrismIndexOperatorWriteNode;
87
+ static VALUE rb_cPrismIndexOrWriteNode;
85
88
  static VALUE rb_cPrismInstanceVariableAndWriteNode;
86
89
  static VALUE rb_cPrismInstanceVariableOperatorWriteNode;
87
90
  static VALUE rb_cPrismInstanceVariableOrWriteNode;
@@ -358,7 +361,6 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
358
361
  case PM_CALL_AND_WRITE_NODE: {
359
362
  pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
360
363
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
361
- pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
362
364
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
363
365
  break;
364
366
  }
@@ -374,7 +376,6 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
374
376
  case PM_CALL_OPERATOR_WRITE_NODE: {
375
377
  pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
376
378
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
377
- pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
378
379
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
379
380
  break;
380
381
  }
@@ -382,7 +383,6 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
382
383
  case PM_CALL_OR_WRITE_NODE: {
383
384
  pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
384
385
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
385
- pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
386
386
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
387
387
  break;
388
388
  }
@@ -640,6 +640,33 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
640
640
  pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
641
641
  break;
642
642
  }
643
+ #line 108 "api_node.c.erb"
644
+ case PM_INDEX_AND_WRITE_NODE: {
645
+ pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
646
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
647
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
648
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
649
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
650
+ break;
651
+ }
652
+ #line 108 "api_node.c.erb"
653
+ case PM_INDEX_OPERATOR_WRITE_NODE: {
654
+ pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
655
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
656
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
657
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
658
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
659
+ break;
660
+ }
661
+ #line 108 "api_node.c.erb"
662
+ case PM_INDEX_OR_WRITE_NODE: {
663
+ pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
664
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
665
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
666
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
667
+ pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
668
+ break;
669
+ }
643
670
  #line 108 "api_node.c.erb"
644
671
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
645
672
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -1222,12 +1249,18 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1222
1249
  }
1223
1250
  #line 134 "api_node.c.erb"
1224
1251
  case PM_BACK_REFERENCE_READ_NODE: {
1225
- VALUE argv[1];
1252
+ pm_back_reference_read_node_t *cast = (pm_back_reference_read_node_t *) node;
1253
+ VALUE argv[2];
1254
+
1255
+ // name
1256
+ #line 157 "api_node.c.erb"
1257
+ assert(cast->name != 0);
1258
+ argv[0] = rb_id2sym(constants[cast->name - 1]);
1226
1259
 
1227
1260
  // location
1228
- argv[0] = pm_location_new(parser, node->location.start, node->location.end, source);
1261
+ argv[1] = pm_location_new(parser, node->location.start, node->location.end, source);
1229
1262
 
1230
- rb_ary_push(value_stack, rb_class_new_instance(1, argv, rb_cPrismBackReferenceReadNode));
1263
+ rb_ary_push(value_stack, rb_class_new_instance(2, argv, rb_cPrismBackReferenceReadNode));
1231
1264
  break;
1232
1265
  }
1233
1266
  #line 134 "api_node.c.erb"
@@ -1409,7 +1442,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1409
1442
  #line 134 "api_node.c.erb"
1410
1443
  case PM_CALL_AND_WRITE_NODE: {
1411
1444
  pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
1412
- VALUE argv[12];
1445
+ VALUE argv[9];
1413
1446
 
1414
1447
  // receiver
1415
1448
  #line 145 "api_node.c.erb"
@@ -1423,42 +1456,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1423
1456
  #line 173 "api_node.c.erb"
1424
1457
  argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1425
1458
 
1426
- // opening_loc
1427
- #line 173 "api_node.c.erb"
1428
- argv[3] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1429
-
1430
- // arguments
1431
- #line 145 "api_node.c.erb"
1432
- argv[4] = rb_ary_pop(value_stack);
1433
-
1434
- // closing_loc
1435
- #line 173 "api_node.c.erb"
1436
- argv[5] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1437
-
1438
1459
  // flags
1439
1460
  #line 179 "api_node.c.erb"
1440
- argv[6] = ULONG2NUM(node->flags >> 2);
1461
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1441
1462
 
1442
1463
  // read_name
1443
- #line 154 "api_node.c.erb"
1444
- argv[7] = pm_string_new(&cast->read_name, encoding);
1464
+ #line 157 "api_node.c.erb"
1465
+ assert(cast->read_name != 0);
1466
+ argv[4] = rb_id2sym(constants[cast->read_name - 1]);
1445
1467
 
1446
1468
  // write_name
1447
- #line 154 "api_node.c.erb"
1448
- argv[8] = pm_string_new(&cast->write_name, encoding);
1469
+ #line 157 "api_node.c.erb"
1470
+ assert(cast->write_name != 0);
1471
+ argv[5] = rb_id2sym(constants[cast->write_name - 1]);
1449
1472
 
1450
1473
  // operator_loc
1451
1474
  #line 170 "api_node.c.erb"
1452
- argv[9] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1475
+ argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1453
1476
 
1454
1477
  // value
1455
1478
  #line 145 "api_node.c.erb"
1456
- argv[10] = rb_ary_pop(value_stack);
1479
+ argv[7] = rb_ary_pop(value_stack);
1457
1480
 
1458
1481
  // location
1459
- argv[11] = pm_location_new(parser, node->location.start, node->location.end, source);
1482
+ argv[8] = pm_location_new(parser, node->location.start, node->location.end, source);
1460
1483
 
1461
- rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismCallAndWriteNode));
1484
+ rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCallAndWriteNode));
1462
1485
  break;
1463
1486
  }
1464
1487
  #line 134 "api_node.c.erb"
@@ -1496,11 +1519,12 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1496
1519
 
1497
1520
  // flags
1498
1521
  #line 179 "api_node.c.erb"
1499
- argv[7] = ULONG2NUM(node->flags >> 2);
1522
+ argv[7] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1500
1523
 
1501
1524
  // name
1502
- #line 154 "api_node.c.erb"
1503
- argv[8] = pm_string_new(&cast->name, encoding);
1525
+ #line 157 "api_node.c.erb"
1526
+ assert(cast->name != 0);
1527
+ argv[8] = rb_id2sym(constants[cast->name - 1]);
1504
1528
 
1505
1529
  // location
1506
1530
  argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -1511,7 +1535,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1511
1535
  #line 134 "api_node.c.erb"
1512
1536
  case PM_CALL_OPERATOR_WRITE_NODE: {
1513
1537
  pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
1514
- VALUE argv[13];
1538
+ VALUE argv[10];
1515
1539
 
1516
1540
  // receiver
1517
1541
  #line 145 "api_node.c.erb"
@@ -1525,53 +1549,43 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1525
1549
  #line 173 "api_node.c.erb"
1526
1550
  argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1527
1551
 
1528
- // opening_loc
1529
- #line 173 "api_node.c.erb"
1530
- argv[3] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1531
-
1532
- // arguments
1533
- #line 145 "api_node.c.erb"
1534
- argv[4] = rb_ary_pop(value_stack);
1535
-
1536
- // closing_loc
1537
- #line 173 "api_node.c.erb"
1538
- argv[5] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1539
-
1540
1552
  // flags
1541
1553
  #line 179 "api_node.c.erb"
1542
- argv[6] = ULONG2NUM(node->flags >> 2);
1554
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1543
1555
 
1544
1556
  // read_name
1545
- #line 154 "api_node.c.erb"
1546
- argv[7] = pm_string_new(&cast->read_name, encoding);
1557
+ #line 157 "api_node.c.erb"
1558
+ assert(cast->read_name != 0);
1559
+ argv[4] = rb_id2sym(constants[cast->read_name - 1]);
1547
1560
 
1548
1561
  // write_name
1549
- #line 154 "api_node.c.erb"
1550
- argv[8] = pm_string_new(&cast->write_name, encoding);
1562
+ #line 157 "api_node.c.erb"
1563
+ assert(cast->write_name != 0);
1564
+ argv[5] = rb_id2sym(constants[cast->write_name - 1]);
1551
1565
 
1552
1566
  // operator
1553
1567
  #line 157 "api_node.c.erb"
1554
1568
  assert(cast->operator != 0);
1555
- argv[9] = rb_id2sym(constants[cast->operator - 1]);
1569
+ argv[6] = rb_id2sym(constants[cast->operator - 1]);
1556
1570
 
1557
1571
  // operator_loc
1558
1572
  #line 170 "api_node.c.erb"
1559
- argv[10] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1573
+ argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1560
1574
 
1561
1575
  // value
1562
1576
  #line 145 "api_node.c.erb"
1563
- argv[11] = rb_ary_pop(value_stack);
1577
+ argv[8] = rb_ary_pop(value_stack);
1564
1578
 
1565
1579
  // location
1566
- argv[12] = pm_location_new(parser, node->location.start, node->location.end, source);
1580
+ argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
1567
1581
 
1568
- rb_ary_push(value_stack, rb_class_new_instance(13, argv, rb_cPrismCallOperatorWriteNode));
1582
+ rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismCallOperatorWriteNode));
1569
1583
  break;
1570
1584
  }
1571
1585
  #line 134 "api_node.c.erb"
1572
1586
  case PM_CALL_OR_WRITE_NODE: {
1573
1587
  pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
1574
- VALUE argv[12];
1588
+ VALUE argv[9];
1575
1589
 
1576
1590
  // receiver
1577
1591
  #line 145 "api_node.c.erb"
@@ -1585,42 +1599,32 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
1585
1599
  #line 173 "api_node.c.erb"
1586
1600
  argv[2] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end, source);
1587
1601
 
1588
- // opening_loc
1589
- #line 173 "api_node.c.erb"
1590
- argv[3] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
1591
-
1592
- // arguments
1593
- #line 145 "api_node.c.erb"
1594
- argv[4] = rb_ary_pop(value_stack);
1595
-
1596
- // closing_loc
1597
- #line 173 "api_node.c.erb"
1598
- argv[5] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
1599
-
1600
1602
  // flags
1601
1603
  #line 179 "api_node.c.erb"
1602
- argv[6] = ULONG2NUM(node->flags >> 2);
1604
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1603
1605
 
1604
1606
  // read_name
1605
- #line 154 "api_node.c.erb"
1606
- argv[7] = pm_string_new(&cast->read_name, encoding);
1607
+ #line 157 "api_node.c.erb"
1608
+ assert(cast->read_name != 0);
1609
+ argv[4] = rb_id2sym(constants[cast->read_name - 1]);
1607
1610
 
1608
1611
  // write_name
1609
- #line 154 "api_node.c.erb"
1610
- argv[8] = pm_string_new(&cast->write_name, encoding);
1612
+ #line 157 "api_node.c.erb"
1613
+ assert(cast->write_name != 0);
1614
+ argv[5] = rb_id2sym(constants[cast->write_name - 1]);
1611
1615
 
1612
1616
  // operator_loc
1613
1617
  #line 170 "api_node.c.erb"
1614
- argv[9] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1618
+ argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
1615
1619
 
1616
1620
  // value
1617
1621
  #line 145 "api_node.c.erb"
1618
- argv[10] = rb_ary_pop(value_stack);
1622
+ argv[7] = rb_ary_pop(value_stack);
1619
1623
 
1620
1624
  // location
1621
- argv[11] = pm_location_new(parser, node->location.start, node->location.end, source);
1625
+ argv[8] = pm_location_new(parser, node->location.start, node->location.end, source);
1622
1626
 
1623
- rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismCallOrWriteNode));
1627
+ rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCallOrWriteNode));
1624
1628
  break;
1625
1629
  }
1626
1630
  #line 134 "api_node.c.erb"
@@ -2415,7 +2419,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2415
2419
 
2416
2420
  // flags
2417
2421
  #line 179 "api_node.c.erb"
2418
- argv[3] = ULONG2NUM(node->flags >> 2);
2422
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2419
2423
 
2420
2424
  // location
2421
2425
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -2801,6 +2805,152 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2801
2805
  rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismInNode));
2802
2806
  break;
2803
2807
  }
2808
+ #line 134 "api_node.c.erb"
2809
+ case PM_INDEX_AND_WRITE_NODE: {
2810
+ pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
2811
+ VALUE argv[10];
2812
+
2813
+ // receiver
2814
+ #line 145 "api_node.c.erb"
2815
+ argv[0] = rb_ary_pop(value_stack);
2816
+
2817
+ // call_operator_loc
2818
+ #line 173 "api_node.c.erb"
2819
+ argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2820
+
2821
+ // opening_loc
2822
+ #line 170 "api_node.c.erb"
2823
+ argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2824
+
2825
+ // arguments
2826
+ #line 145 "api_node.c.erb"
2827
+ argv[3] = rb_ary_pop(value_stack);
2828
+
2829
+ // closing_loc
2830
+ #line 170 "api_node.c.erb"
2831
+ argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2832
+
2833
+ // block
2834
+ #line 145 "api_node.c.erb"
2835
+ argv[5] = rb_ary_pop(value_stack);
2836
+
2837
+ // flags
2838
+ #line 179 "api_node.c.erb"
2839
+ argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2840
+
2841
+ // operator_loc
2842
+ #line 170 "api_node.c.erb"
2843
+ argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2844
+
2845
+ // value
2846
+ #line 145 "api_node.c.erb"
2847
+ argv[8] = rb_ary_pop(value_stack);
2848
+
2849
+ // location
2850
+ argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
2851
+
2852
+ rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismIndexAndWriteNode));
2853
+ break;
2854
+ }
2855
+ #line 134 "api_node.c.erb"
2856
+ case PM_INDEX_OPERATOR_WRITE_NODE: {
2857
+ pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
2858
+ VALUE argv[11];
2859
+
2860
+ // receiver
2861
+ #line 145 "api_node.c.erb"
2862
+ argv[0] = rb_ary_pop(value_stack);
2863
+
2864
+ // call_operator_loc
2865
+ #line 173 "api_node.c.erb"
2866
+ argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2867
+
2868
+ // opening_loc
2869
+ #line 170 "api_node.c.erb"
2870
+ argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2871
+
2872
+ // arguments
2873
+ #line 145 "api_node.c.erb"
2874
+ argv[3] = rb_ary_pop(value_stack);
2875
+
2876
+ // closing_loc
2877
+ #line 170 "api_node.c.erb"
2878
+ argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2879
+
2880
+ // block
2881
+ #line 145 "api_node.c.erb"
2882
+ argv[5] = rb_ary_pop(value_stack);
2883
+
2884
+ // flags
2885
+ #line 179 "api_node.c.erb"
2886
+ argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2887
+
2888
+ // operator
2889
+ #line 157 "api_node.c.erb"
2890
+ assert(cast->operator != 0);
2891
+ argv[7] = rb_id2sym(constants[cast->operator - 1]);
2892
+
2893
+ // operator_loc
2894
+ #line 170 "api_node.c.erb"
2895
+ argv[8] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2896
+
2897
+ // value
2898
+ #line 145 "api_node.c.erb"
2899
+ argv[9] = rb_ary_pop(value_stack);
2900
+
2901
+ // location
2902
+ argv[10] = pm_location_new(parser, node->location.start, node->location.end, source);
2903
+
2904
+ rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismIndexOperatorWriteNode));
2905
+ break;
2906
+ }
2907
+ #line 134 "api_node.c.erb"
2908
+ case PM_INDEX_OR_WRITE_NODE: {
2909
+ pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
2910
+ VALUE argv[10];
2911
+
2912
+ // receiver
2913
+ #line 145 "api_node.c.erb"
2914
+ argv[0] = rb_ary_pop(value_stack);
2915
+
2916
+ // call_operator_loc
2917
+ #line 173 "api_node.c.erb"
2918
+ argv[1] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end, source);
2919
+
2920
+ // opening_loc
2921
+ #line 170 "api_node.c.erb"
2922
+ argv[2] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end, source);
2923
+
2924
+ // arguments
2925
+ #line 145 "api_node.c.erb"
2926
+ argv[3] = rb_ary_pop(value_stack);
2927
+
2928
+ // closing_loc
2929
+ #line 170 "api_node.c.erb"
2930
+ argv[4] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
2931
+
2932
+ // block
2933
+ #line 145 "api_node.c.erb"
2934
+ argv[5] = rb_ary_pop(value_stack);
2935
+
2936
+ // flags
2937
+ #line 179 "api_node.c.erb"
2938
+ argv[6] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2939
+
2940
+ // operator_loc
2941
+ #line 170 "api_node.c.erb"
2942
+ argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end, source);
2943
+
2944
+ // value
2945
+ #line 145 "api_node.c.erb"
2946
+ argv[8] = rb_ary_pop(value_stack);
2947
+
2948
+ // location
2949
+ argv[9] = pm_location_new(parser, node->location.start, node->location.end, source);
2950
+
2951
+ rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismIndexOrWriteNode));
2952
+ break;
2953
+ }
2804
2954
  #line 134 "api_node.c.erb"
2805
2955
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
2806
2956
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
@@ -2956,7 +3106,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2956
3106
 
2957
3107
  // flags
2958
3108
  #line 179 "api_node.c.erb"
2959
- argv[0] = ULONG2NUM(node->flags >> 2);
3109
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2960
3110
 
2961
3111
  // location
2962
3112
  argv[1] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -2986,7 +3136,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
2986
3136
 
2987
3137
  // flags
2988
3138
  #line 179 "api_node.c.erb"
2989
- argv[3] = ULONG2NUM(node->flags >> 2);
3139
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
2990
3140
 
2991
3141
  // location
2992
3142
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3016,7 +3166,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3016
3166
 
3017
3167
  // flags
3018
3168
  #line 179 "api_node.c.erb"
3019
- argv[3] = ULONG2NUM(node->flags >> 2);
3169
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3020
3170
 
3021
3171
  // location
3022
3172
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3401,7 +3551,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3401
3551
 
3402
3552
  // flags
3403
3553
  #line 179 "api_node.c.erb"
3404
- argv[4] = ULONG2NUM(node->flags >> 2);
3554
+ argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3405
3555
 
3406
3556
  // location
3407
3557
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3918,7 +4068,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3918
4068
 
3919
4069
  // flags
3920
4070
  #line 179 "api_node.c.erb"
3921
- argv[3] = ULONG2NUM(node->flags >> 2);
4071
+ argv[3] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3922
4072
 
3923
4073
  // location
3924
4074
  argv[4] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -3973,7 +4123,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
3973
4123
 
3974
4124
  // flags
3975
4125
  #line 179 "api_node.c.erb"
3976
- argv[4] = ULONG2NUM(node->flags >> 2);
4126
+ argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3977
4127
 
3978
4128
  // location
3979
4129
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4281,7 +4431,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4281
4431
 
4282
4432
  // flags
4283
4433
  #line 179 "api_node.c.erb"
4284
- argv[0] = ULONG2NUM(node->flags >> 2);
4434
+ argv[0] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4285
4435
 
4286
4436
  // opening_loc
4287
4437
  #line 173 "api_node.c.erb"
@@ -4449,7 +4599,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4449
4599
 
4450
4600
  // flags
4451
4601
  #line 179 "api_node.c.erb"
4452
- argv[4] = ULONG2NUM(node->flags >> 2);
4602
+ argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4453
4603
 
4454
4604
  // location
4455
4605
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4506,7 +4656,7 @@ pm_ast_new(pm_parser_t *parser, pm_node_t *node, rb_encoding *encoding) {
4506
4656
 
4507
4657
  // flags
4508
4658
  #line 179 "api_node.c.erb"
4509
- argv[4] = ULONG2NUM(node->flags >> 2);
4659
+ argv[4] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4510
4660
 
4511
4661
  // location
4512
4662
  argv[5] = pm_location_new(parser, node->location.start, node->location.end, source);
@@ -4649,6 +4799,9 @@ Init_prism_api_node(void) {
4649
4799
  rb_cPrismImaginaryNode = rb_define_class_under(rb_cPrism, "ImaginaryNode", rb_cPrismNode);
4650
4800
  rb_cPrismImplicitNode = rb_define_class_under(rb_cPrism, "ImplicitNode", rb_cPrismNode);
4651
4801
  rb_cPrismInNode = rb_define_class_under(rb_cPrism, "InNode", rb_cPrismNode);
4802
+ rb_cPrismIndexAndWriteNode = rb_define_class_under(rb_cPrism, "IndexAndWriteNode", rb_cPrismNode);
4803
+ rb_cPrismIndexOperatorWriteNode = rb_define_class_under(rb_cPrism, "IndexOperatorWriteNode", rb_cPrismNode);
4804
+ rb_cPrismIndexOrWriteNode = rb_define_class_under(rb_cPrism, "IndexOrWriteNode", rb_cPrismNode);
4652
4805
  rb_cPrismInstanceVariableAndWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableAndWriteNode", rb_cPrismNode);
4653
4806
  rb_cPrismInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOperatorWriteNode", rb_cPrismNode);
4654
4807
  rb_cPrismInstanceVariableOrWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOrWriteNode", rb_cPrismNode);