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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +31 -1
 - data/README.md +2 -1
 - data/config.yml +188 -55
 - data/docs/building.md +9 -2
 - data/docs/configuration.md +10 -9
 - data/docs/encoding.md +24 -56
 - data/docs/local_variable_depth.md +229 -0
 - data/docs/ruby_api.md +2 -0
 - data/docs/serialization.md +18 -13
 - data/ext/prism/api_node.c +337 -195
 - data/ext/prism/extconf.rb +13 -7
 - data/ext/prism/extension.c +96 -32
 - data/ext/prism/extension.h +1 -1
 - data/include/prism/ast.h +340 -137
 - data/include/prism/defines.h +17 -0
 - data/include/prism/diagnostic.h +11 -5
 - data/include/prism/encoding.h +248 -0
 - data/include/prism/options.h +2 -2
 - data/include/prism/parser.h +62 -42
 - data/include/prism/regexp.h +2 -2
 - data/include/prism/util/pm_buffer.h +9 -1
 - data/include/prism/util/pm_memchr.h +2 -2
 - data/include/prism/util/pm_strpbrk.h +3 -3
 - data/include/prism/version.h +2 -2
 - data/include/prism.h +13 -15
 - data/lib/prism/compiler.rb +12 -0
 - data/lib/prism/debug.rb +9 -4
 - data/lib/prism/desugar_compiler.rb +3 -3
 - data/lib/prism/dispatcher.rb +56 -0
 - data/lib/prism/dot_visitor.rb +476 -198
 - data/lib/prism/dsl.rb +66 -46
 - data/lib/prism/ffi.rb +16 -3
 - data/lib/prism/lex_compat.rb +19 -9
 - data/lib/prism/mutation_compiler.rb +20 -0
 - data/lib/prism/node.rb +1173 -450
 - data/lib/prism/node_ext.rb +41 -16
 - data/lib/prism/parse_result.rb +12 -15
 - data/lib/prism/ripper_compat.rb +49 -34
 - data/lib/prism/serialize.rb +242 -212
 - data/lib/prism/visitor.rb +12 -0
 - data/lib/prism.rb +20 -4
 - data/prism.gemspec +4 -10
 - data/rbi/prism.rbi +605 -230
 - data/rbi/prism_static.rbi +3 -0
 - data/sig/prism.rbs +379 -124
 - data/sig/prism_static.rbs +1 -0
 - data/src/diagnostic.c +228 -222
 - data/src/encoding.c +5137 -0
 - data/src/node.c +66 -0
 - data/src/options.c +21 -2
 - data/src/prettyprint.c +806 -406
 - data/src/prism.c +1092 -700
 - data/src/regexp.c +3 -3
 - data/src/serialize.c +227 -157
 - data/src/util/pm_buffer.c +10 -1
 - data/src/util/pm_memchr.c +1 -1
 - data/src/util/pm_strpbrk.c +4 -4
 - metadata +5 -11
 - data/include/prism/enc/pm_encoding.h +0 -227
 - data/src/enc/pm_big5.c +0 -116
 - data/src/enc/pm_cp51932.c +0 -57
 - data/src/enc/pm_euc_jp.c +0 -69
 - data/src/enc/pm_gbk.c +0 -65
 - data/src/enc/pm_shift_jis.c +0 -57
 - data/src/enc/pm_tables.c +0 -2073
 - data/src/enc/pm_unicode.c +0 -2369
 - 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,  
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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( 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 1397 
     | 
    
         
            +
                                argv[2] = rb_ary_pop(value_stack);
         
     | 
| 
       1372 
1398 
     | 
    
         | 
| 
       1373 
1399 
     | 
    
         
             
                                // body
         
     | 
| 
       1374 
1400 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       1375 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 1401 
     | 
    
         
            +
                                argv[3] = rb_ary_pop(value_stack);
         
     | 
| 
       1376 
1402 
     | 
    
         | 
| 
       1377 
1403 
     | 
    
         
             
                                // opening_loc
         
     | 
| 
       1378 
1404 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       1379 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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[ 
     | 
| 
      
 1409 
     | 
    
         
            +
                                argv[5] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end, source);
         
     | 
| 
       1384 
1410 
     | 
    
         | 
| 
       1385 
1411 
     | 
    
         
             
                                // location
         
     | 
| 
       1386 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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( 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 1565 
     | 
    
         
            +
                                argv[6] = rb_ary_pop(value_stack);
         
     | 
| 
       1531 
1566 
     | 
    
         | 
| 
       1532 
1567 
     | 
    
         
             
                                // closing_loc
         
     | 
| 
       1533 
1568 
     | 
    
         
             
            #line 183 "api_node.c.erb"
         
     | 
| 
       1534 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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( 
     | 
| 
      
 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[ 
     | 
| 
      
 2530 
     | 
    
         
            +
                                argv[1] = rb_ary_pop(value_stack);
         
     | 
| 
       2465 
2531 
     | 
    
         | 
| 
       2466 
2532 
     | 
    
         
             
                                // right
         
     | 
| 
       2467 
2533 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       2468 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 2534 
     | 
    
         
            +
                                argv[2] = rb_ary_pop(value_stack);
         
     | 
| 
       2469 
2535 
     | 
    
         | 
| 
       2470 
2536 
     | 
    
         
             
                                // operator_loc
         
     | 
| 
       2471 
2537 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       2472 
     | 
    
         
            -
                                argv[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 2961 
     | 
    
         
            +
                                argv[4] = rb_ary_pop(value_stack);
         
     | 
| 
       2886 
2962 
     | 
    
         | 
| 
       2887 
2963 
     | 
    
         
             
                                // closing_loc
         
     | 
| 
       2888 
2964 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       2889 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 3008 
     | 
    
         
            +
                                argv[4] = rb_ary_pop(value_stack);
         
     | 
| 
       2933 
3009 
     | 
    
         | 
| 
       2934 
3010 
     | 
    
         
             
                                // closing_loc
         
     | 
| 
       2935 
3011 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       2936 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 3060 
     | 
    
         
            +
                                argv[4] = rb_ary_pop(value_stack);
         
     | 
| 
       2985 
3061 
     | 
    
         | 
| 
       2986 
3062 
     | 
    
         
             
                                // closing_loc
         
     | 
| 
       2987 
3063 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       2988 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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[ 
     | 
| 
       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  
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 3433 
     | 
    
         
            +
                                    rb_ary_push(argv[1], rb_ary_pop(value_stack));
         
     | 
| 
       3323 
3434 
     | 
    
         
             
                                }
         
     | 
| 
       3324 
3435 
     | 
    
         | 
| 
       3325 
3436 
     | 
    
         
             
                                // location
         
     | 
| 
       3326 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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( 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 3495 
     | 
    
         
            +
                                argv[5] = rb_ary_pop(value_stack);
         
     | 
| 
       3381 
3496 
     | 
    
         | 
| 
       3382 
3497 
     | 
    
         
             
                                // body
         
     | 
| 
       3383 
3498 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       3384 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 3499 
     | 
    
         
            +
                                argv[6] = rb_ary_pop(value_stack);
         
     | 
| 
       3385 
3500 
     | 
    
         | 
| 
       3386 
3501 
     | 
    
         
             
                                // location
         
     | 
| 
       3387 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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( 
     | 
| 
      
 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  
     | 
| 
      
 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  
     | 
| 
      
 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  
     | 
| 
      
 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  
     | 
| 
      
 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  
     | 
| 
      
 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  
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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  
     | 
| 
      
 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[ 
     | 
| 
      
 4272 
     | 
    
         
            +
                                argv[1] = rb_ary_pop(value_stack);
         
     | 
| 
       4139 
4273 
     | 
    
         | 
| 
       4140 
4274 
     | 
    
         
             
                                // right
         
     | 
| 
       4141 
4275 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       4142 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 4276 
     | 
    
         
            +
                                argv[2] = rb_ary_pop(value_stack);
         
     | 
| 
       4143 
4277 
     | 
    
         | 
| 
       4144 
4278 
     | 
    
         
             
                                // operator_loc
         
     | 
| 
       4145 
4279 
     | 
    
         
             
            #line 180 "api_node.c.erb"
         
     | 
| 
       4146 
     | 
    
         
            -
                                argv[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
       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  
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 4697 
     | 
    
         
            +
                                argv[4] = pm_string_new(&cast->unescaped, encoding);
         
     | 
| 
       4564 
4698 
     | 
    
         | 
| 
       4565 
4699 
     | 
    
         
             
                                // location
         
     | 
| 
       4566 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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( 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 4791 
     | 
    
         
            +
                                argv[3] = rb_ary_pop(value_stack);
         
     | 
| 
       4654 
4792 
     | 
    
         | 
| 
       4655 
4793 
     | 
    
         
             
                                // statements
         
     | 
| 
       4656 
4794 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       4657 
     | 
    
         
            -
                                argv[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 4848 
     | 
    
         
            +
                                argv[3] = rb_ary_pop(value_stack);
         
     | 
| 
       4711 
4849 
     | 
    
         | 
| 
       4712 
4850 
     | 
    
         
             
                                // statements
         
     | 
| 
       4713 
4851 
     | 
    
         
             
            #line 155 "api_node.c.erb"
         
     | 
| 
       4714 
     | 
    
         
            -
                                argv[ 
     | 
| 
       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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 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[ 
     | 
| 
      
 4883 
     | 
    
         
            +
                                argv[4] = pm_string_new(&cast->unescaped, encoding);
         
     | 
| 
       4746 
4884 
     | 
    
         | 
| 
       4747 
4885 
     | 
    
         
             
                                // location
         
     | 
| 
       4748 
     | 
    
         
            -
                                argv[ 
     | 
| 
      
 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( 
     | 
| 
      
 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);
         
     |