Repository: ruby/yarp
Pull request #1350 (2023-08-29 13:17:56)

Add instance variable names to the constant pool


Patch:
diff --git a/config.yml b/config.yml
index d3543608..b4e8b479 100644
--- a/config.yml
+++ b/config.yml
@@ -1298,6 +1298,8 @@ nodes:
                   ^^^^^^^^^^^
   - name: InstanceVariableAndWriteNode
     child_nodes:
+      - name: name
+        type: constant
       - name: name_loc
         type: location
       - name: operator_loc
@@ -1311,6 +1313,8 @@ nodes:
           ^^^^^^^^^^^^^^^^^
   - name: InstanceVariableOperatorWriteNode
     child_nodes:
+      - name: name
+        type: constant
       - name: name_loc
         type: location
       - name: operator_loc
@@ -1326,6 +1330,8 @@ nodes:
           ^^^^^^^^^^^^^^^^
   - name: InstanceVariableOrWriteNode
     child_nodes:
+      - name: name
+        type: constant
       - name: name_loc
         type: location
       - name: operator_loc
@@ -1338,12 +1344,18 @@ nodes:
           @target ||= value
           ^^^^^^^^^^^^^^^^^
   - name: InstanceVariableReadNode
+    child_nodes:
+      - name: name
+        type: constant
     comment: |
       Represents referencing an instance variable.
 
           @foo
           ^^^^
   - name: InstanceVariableTargetNode
+    child_nodes:
+      - name: name
+        type: constant
     comment: |
       Represents writing to an instance variable in a context that doesn't have an explicit value.
 
@@ -1351,6 +1363,8 @@ nodes:
           ^^^^  ^^^^
   - name: InstanceVariableWriteNode
     child_nodes:
+      - name: name
+        type: constant
       - name: name_loc
         type: location
       - name: value
diff --git a/lib/yarp/desugar_visitor.rb b/lib/yarp/desugar_visitor.rb
index 3f901630..83a9bb53 100644
--- a/lib/yarp/desugar_visitor.rb
+++ b/lib/yarp/desugar_visitor.rb
@@ -173,8 +173,8 @@ module YARP
     # @foo && @foo = bar
     def visit_instance_variable_and_write_node(node)
       AndNode.new(
-        InstanceVariableReadNode.new(node.name_loc),
-        InstanceVariableWriteNode.new(node.name_loc, node.value, node.operator_loc, node.location),
+        InstanceVariableReadNode.new(node.name, node.name_loc),
+        InstanceVariableWriteNode.new(node.name, node.name_loc, node.value, node.operator_loc, node.location),
         node.operator_loc,
         node.location
       )
@@ -187,8 +187,8 @@ module YARP
     # @foo || @foo = bar
     def visit_instance_variable_or_write_node(node)
       OrNode.new(
-        InstanceVariableReadNode.new(node.name_loc),
-        InstanceVariableWriteNode.new(node.name_loc, node.value, node.operator_loc, node.location),
+        InstanceVariableReadNode.new(node.name, node.name_loc),
+        InstanceVariableWriteNode.new(node.name, node.name_loc, node.value, node.operator_loc, node.location),
         node.operator_loc,
         node.location
       )
@@ -200,7 +200,7 @@ module YARP
     #
     # @foo = @foo + bar
     def visit_instance_variable_operator_write_node(node)
-      desugar_operator_write_node(node, InstanceVariableWriteNode, InstanceVariableReadNode)
+      desugar_operator_write_node(node, InstanceVariableWriteNode, InstanceVariableReadNode, arguments: [node.name])
     end
 
     # foo &&= bar
diff --git a/src/yarp.c b/src/yarp.c
index ad433efc..d5ae0bb8 100644
--- a/src/yarp.c
+++ b/src/yarp.c
@@ -2621,8 +2621,7 @@ yp_in_node_create(yp_parser_t *parser, yp_node_t *pattern, yp_statements_node_t
 
 // Allocate and initialize a new InstanceVariableAndWriteNode node.
 static yp_instance_variable_and_write_node_t *
-yp_instance_variable_and_write_node_create(yp_parser_t *parser, yp_node_t *target, const yp_token_t *operator, yp_node_t *value) {
-    assert(YP_NODE_TYPE_P(target, YP_NODE_INSTANCE_VARIABLE_READ_NODE));
+yp_instance_variable_and_write_node_create(yp_parser_t *parser, yp_instance_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
     assert(operator->type == YP_TOKEN_AMPERSAND_AMPERSAND_EQUAL);
     yp_instance_variable_and_write_node_t *node = YP_ALLOC_NODE(parser, yp_instance_variable_and_write_node_t);
 
@@ -2630,11 +2629,12 @@ yp_instance_variable_and_write_node_create(yp_parser_t *parser, yp_node_t *targe
         {
             .type = YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE,
             .location = {
-                .start = target->location.start,
+                .start = target->base.location.start,
                 .end = value->location.end
             }
         },
-        .name_loc = target->location,
+        .name = target->name,
+        .name_loc = target->base.location,
         .operator_loc = YP_LOCATION_TOKEN_VALUE(operator),
         .value = value
     };
@@ -2644,18 +2644,19 @@ yp_instance_variable_and_write_node_create(yp_parser_t *parser, yp_node_t *targe
 
 // Allocate and initialize a new InstanceVariableOperatorWriteNode node.
 static yp_instance_variable_operator_write_node_t *
-yp_instance_variable_operator_write_node_create(yp_parser_t *parser, yp_node_t *target, const yp_token_t *operator, yp_node_t *value) {
+yp_instance_variable_operator_write_node_create(yp_parser_t *parser, yp_instance_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
     yp_instance_variable_operator_write_node_t *node = YP_ALLOC_NODE(parser, yp_instance_variable_operator_write_node_t);
 
     *node = (yp_instance_variable_operator_write_node_t) {
         {
             .type = YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE,
             .location = {
-                .start = target->location.start,
+                .start = target->base.location.start,
                 .end = value->location.end
             }
         },
-        .name_loc = target->location,
+        .name = target->name,
+        .name_loc = target->base.location,
         .operator_loc = YP_LOCATION_TOKEN_VALUE(operator),
         .value = value,
         .operator = yp_parser_constant_id_location(parser, operator->start, operator->end - 1)
@@ -2666,8 +2667,7 @@ yp_instance_variable_operator_write_node_create(yp_parser_t *parser, yp_node_t *
 
 // Allocate and initialize a new InstanceVariableOrWriteNode node.
 static yp_instance_variable_or_write_node_t *
-yp_instance_variable_or_write_node_create(yp_parser_t *parser, yp_node_t *target, const yp_token_t *operator, yp_node_t *value) {
-    assert(YP_NODE_TYPE_P(target, YP_NODE_INSTANCE_VARIABLE_READ_NODE));
+yp_instance_variable_or_write_node_create(yp_parser_t *parser, yp_instance_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
     assert(operator->type == YP_TOKEN_PIPE_PIPE_EQUAL);
     yp_instance_variable_or_write_node_t *node = YP_ALLOC_NODE(parser, yp_instance_variable_or_write_node_t);
 
@@ -2675,11 +2675,12 @@ yp_instance_variable_or_write_node_create(yp_parser_t *parser, yp_node_t *target
         {
             .type = YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE,
             .location = {
-                .start = target->location.start,
+                .start = target->base.location.start,
                 .end = value->location.end
             }
         },
-        .name_loc = target->location,
+        .name = target->name,
+        .name_loc = target->base.location,
         .operator_loc = YP_LOCATION_TOKEN_VALUE(operator),
         .value = value
     };
@@ -2693,9 +2694,13 @@ yp_instance_variable_read_node_create(yp_parser_t *parser, const yp_token_t *tok
     assert(token->type == YP_TOKEN_INSTANCE_VARIABLE);
     yp_instance_variable_read_node_t *node = YP_ALLOC_NODE(parser, yp_instance_variable_read_node_t);
 
-    *node = (yp_instance_variable_read_node_t) {{
-            .type = YP_NODE_INSTANCE_VARIABLE_READ_NODE, .location = YP_LOCATION_TOKEN_VALUE(token)
-    }};
+    *node = (yp_instance_variable_read_node_t) {
+        {
+            .type = YP_NODE_INSTANCE_VARIABLE_READ_NODE,
+            .location = YP_LOCATION_TOKEN_VALUE(token)
+        },
+        .name = yp_parser_constant_id_location(parser, token->start + 1, token->end)
+    };
 
     return node;
 }
@@ -2712,6 +2717,7 @@ yp_instance_variable_write_node_create(yp_parser_t *parser, yp_instance_variable
                 .end = value->location.end
             }
         },
+        .name = read_node->name,
         .name_loc = YP_LOCATION_NODE_BASE_VALUE(read_node),
         .operator_loc = YP_OPTIONAL_LOCATION_TOKEN_VALUE(operator),
         .value = value
@@ -12812,7 +12818,7 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
                     parser_lex(parser);
 
                     yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
-                    yp_node_t *result = (yp_node_t *) yp_instance_variable_and_write_node_create(parser, node, &token, value);
+                    yp_node_t *result = (yp_node_t *) yp_instance_variable_and_write_node_create(parser, (yp_instance_variable_read_node_t *) node, &token, value);
 
                     yp_node_destroy(parser, node);
                     return result;
@@ -12913,7 +12919,7 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
                     parser_lex(parser);
 
                     yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after ||=");
-                    yp_node_t *result = (yp_node_t *) yp_instance_variable_or_write_node_create(parser, node, &token, value);
+                    yp_node_t *result = (yp_node_t *) yp_instance_variable_or_write_node_create(parser, (yp_instance_variable_read_node_t *) node, &token, value);
 
                     yp_node_destroy(parser, node);
                     return result;
@@ -13024,7 +13030,7 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
                     parser_lex(parser);
 
                     yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after the operator.");
-                    yp_node_t *result = (yp_node_t *) yp_instance_variable_operator_write_node_create(parser, node, &token, value);
+                    yp_node_t *result = (yp_node_t *) yp_instance_variable_operator_write_node_create(parser, (yp_instance_variable_read_node_t *) node, &token, value);
 
                     yp_node_destroy(parser, node);
                     return result;


Test patch:
diff --git a/test/yarp/snapshots/methods.txt b/test/yarp/snapshots/methods.txt
index a2cfa8e0..32a7a4e7 100644
--- a/test/yarp/snapshots/methods.txt
+++ b/test/yarp/snapshots/methods.txt
@@ -199,7 +199,7 @@ ProgramNode(0...1194)(
      ),
      DefNode(190...204)(
        (199...200),
-       InstanceVariableReadNode(194...198)(),
+       InstanceVariableReadNode(194...198)(:var),
        nil,
        nil,
        [],
diff --git a/test/yarp/snapshots/patterns.txt b/test/yarp/snapshots/patterns.txt
index de5946a7..f888d149 100644
--- a/test/yarp/snapshots/patterns.txt
+++ b/test/yarp/snapshots/patterns.txt
@@ -923,7 +923,7 @@ ProgramNode(0...3743)(
          "foo"
        ),
        PinnedVariableNode(961...966)(
-         InstanceVariableReadNode(962...966)(),
+         InstanceVariableReadNode(962...966)(:bar),
          (961...962)
        ),
        (958...960)
diff --git a/test/yarp/snapshots/seattlerb/case_in.txt b/test/yarp/snapshots/seattlerb/case_in.txt
index 8a5fafdf..5ea3d11b 100644
--- a/test/yarp/snapshots/seattlerb/case_in.txt
+++ b/test/yarp/snapshots/seattlerb/case_in.txt
@@ -494,7 +494,7 @@ ProgramNode(0...747)(
           ArrayPatternNode(627...643)(
             nil,
             [PinnedVariableNode(628...631)(
-               InstanceVariableReadNode(629...631)(),
+               InstanceVariableReadNode(629...631)(:a),
                (628...629)
              ),
              PinnedVariableNode(633...636)(
diff --git a/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt b/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt
index cfb1f964..5aab2888 100644
--- a/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt
+++ b/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt
@@ -6,7 +6,7 @@ ProgramNode(0...5)(
        [StringNode(6...11)(nil, (6...11), nil, "foo\r"),
         EmbeddedVariableNode(11...16)(
           (11...12),
-          InstanceVariableReadNode(12...16)()
+          InstanceVariableReadNode(12...16)(:bar)
         ),
         StringNode(16...17)(nil, (16...17), nil, "\n")],
        (17...21)
diff --git a/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt b/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt
index ee013f51..04727011 100644
--- a/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt
+++ b/test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt
@@ -6,7 +6,7 @@ ProgramNode(0...5)(
        [StringNode(7...12)(nil, (7...12), nil, "foo\r"),
         EmbeddedVariableNode(12...17)(
           (12...13),
-          InstanceVariableReadNode(13...17)()
+          InstanceVariableReadNode(13...17)(:bar)
         ),
         StringNode(17...19)(nil, (17...19), nil, "\r\n")],
        (19...24)
diff --git a/test/yarp/snapshots/seattlerb/lasgn_ivar_env.txt b/test/yarp/snapshots/seattlerb/lasgn_ivar_env.txt
index b71eeaf2..f065032f 100644
--- a/test/yarp/snapshots/seattlerb/lasgn_ivar_env.txt
+++ b/test/yarp/snapshots/seattlerb/lasgn_ivar_env.txt
@@ -1,6 +1,11 @@
 ProgramNode(0...7)(
   [],
   StatementsNode(0...7)(
-    [InstanceVariableWriteNode(0...7)((0...2), IntegerNode(5...7)(), (3...4))]
+    [InstanceVariableWriteNode(0...7)(
+       :a,
+       (0...2),
+       IntegerNode(5...7)(),
+       (3...4)
+     )]
   )
 )
diff --git a/test/yarp/snapshots/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt b/test/yarp/snapshots/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt
index b7cca173..efbc413f 100644
--- a/test/yarp/snapshots/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt
+++ b/test/yarp/snapshots/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt
@@ -6,7 +6,7 @@ ProgramNode(0...4)(
        nil,
        (0...1),
        nil,
-       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)()]),
+       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)(:b)]),
        nil,
        nil,
        0,
diff --git a/test/yarp/snapshots/seattlerb/parse_line_call_ivar_line_break_paren.txt b/test/yarp/snapshots/seattlerb/parse_line_call_ivar_line_break_paren.txt
index ae67416e..6466d9dd 100644
--- a/test/yarp/snapshots/seattlerb/parse_line_call_ivar_line_break_paren.txt
+++ b/test/yarp/snapshots/seattlerb/parse_line_call_ivar_line_break_paren.txt
@@ -6,7 +6,7 @@ ProgramNode(0...6)(
        nil,
        (0...1),
        (1...2),
-       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)()]),
+       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)(:b)]),
        (5...6),
        nil,
        0,
diff --git a/test/yarp/snapshots/strings.txt b/test/yarp/snapshots/strings.txt
index 38033453..d6f62462 100644
--- a/test/yarp/snapshots/strings.txt
+++ b/test/yarp/snapshots/strings.txt
@@ -185,7 +185,7 @@ ProgramNode(0...498)(
        (414...415),
        [EmbeddedVariableNode(415...420)(
           (415...416),
-          InstanceVariableReadNode(416...420)()
+          InstanceVariableReadNode(416...420)(:foo)
         )],
        (420...421)
      ),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/assignment.txt b/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
index bcf85388..6166e0cd 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
@@ -66,8 +66,8 @@ ProgramNode(0...704)(
        (74...75)
      ),
      MultiWriteNode(85...102)(
-       [InstanceVariableTargetNode(86...88)(),
-        InstanceVariableTargetNode(90...92)()],
+       [InstanceVariableTargetNode(86...88)(:a),
+        InstanceVariableTargetNode(90...92)(:b)],
        (94...95),
        ArrayNode(96...102)(
          [IntegerNode(97...98)(), IntegerNode(100...101)()],
@@ -296,6 +296,7 @@ ProgramNode(0...704)(
        (306...307)
      ),
      InstanceVariableWriteNode(310...316)(
+       :a,
        (310...312),
        IntegerNode(315...316)(),
        (313...314)
@@ -605,6 +606,7 @@ ProgramNode(0...704)(
        (543...546)
      ),
      InstanceVariableOrWriteNode(551...561)(
+       :a,
        (551...553),
        (554...557),
        StringNode(558...561)((558...560), (560...560), (560...561), "")
@@ -698,6 +700,7 @@ ProgramNode(0...704)(
        (665...668)
      ),
      InstanceVariableOrWriteNode(687...704)(
+       :a,
        (687...689),
        (690...693),
        InterpolatedStringNode(694...704)(
diff --git a/test/yarp/snapshots/unparser/corpus/literal/defined.txt b/test/yarp/snapshots/unparser/corpus/literal/defined.txt
index c2d6a71b..1d39c45c 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/defined.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/defined.txt
@@ -3,7 +3,7 @@ ProgramNode(0...56)(
   StatementsNode(0...56)(
     [DefinedNode(0...14)(
        (8...9),
-       InstanceVariableReadNode(9...13)(),
+       InstanceVariableReadNode(9...13)(:foo),
        (13...14),
        (0...8)
      ),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/dstr.txt b/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
index 84661493..49d08824 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
@@ -75,7 +75,7 @@ ProgramNode(0...299)(
        [StringNode(160...161)(nil, (160...161), nil, "a"),
         EmbeddedVariableNode(161...164)(
           (161...162),
-          InstanceVariableReadNode(162...164)()
+          InstanceVariableReadNode(162...164)(:a)
         )],
        (164...165)
      ),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/literal.txt b/test/yarp/snapshots/unparser/corpus/literal/literal.txt
index bc9f8684..a38a7f4f 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/literal.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/literal.txt
@@ -153,7 +153,7 @@ ProgramNode(0...916)(
        (206...207),
        [EmbeddedVariableNode(207...210)(
           (207...208),
-          InstanceVariableReadNode(208...210)()
+          InstanceVariableReadNode(208...210)(:a)
         ),
         StringNode(210...211)(nil, (210...211), nil, " "),
         EmbeddedVariableNode(211...215)(
@@ -267,7 +267,9 @@ ProgramNode(0...916)(
        [StringNode(419...422)(nil, (419...422), nil, "foo"),
         EmbeddedStatementsNode(422...429)(
           (422...424),
-          StatementsNode(424...428)([InstanceVariableReadNode(424...428)()]),
+          StatementsNode(424...428)(
+            [InstanceVariableReadNode(424...428)(:bar)]
+          ),
           (428...429)
         )],
        (429...430)
@@ -300,7 +302,9 @@ ProgramNode(0...916)(
        [StringNode(516...519)(nil, (516...519), nil, "foo"),
         EmbeddedStatementsNode(519...526)(
           (519...521),
-          StatementsNode(521...525)([InstanceVariableReadNode(521...525)()]),
+          StatementsNode(521...525)(
+            [InstanceVariableReadNode(521...525)(:bar)]
+          ),
           (525...526)
         )],
        (526...527),
@@ -311,7 +315,9 @@ ProgramNode(0...916)(
        [StringNode(529...532)(nil, (529...532), nil, "foo"),
         EmbeddedStatementsNode(532...539)(
           (532...534),
-          StatementsNode(534...538)([InstanceVariableReadNode(534...538)()]),
+          StatementsNode(534...538)(
+            [InstanceVariableReadNode(534...538)(:bar)]
+          ),
           (538...539)
         )],
        (539...543),
@@ -501,7 +507,7 @@ ProgramNode(0...916)(
        [IntegerNode(693...694)(),
         SplatNode(696...701)(
           (696...697),
-          InstanceVariableReadNode(697...701)()
+          InstanceVariableReadNode(697...701)(:foo)
         )],
        (692...693),
        (701...702)
@@ -509,7 +515,7 @@ ProgramNode(0...916)(
      ArrayNode(703...713)(
        [SplatNode(704...709)(
           (704...705),
-          InstanceVariableReadNode(705...709)()
+          InstanceVariableReadNode(705...709)(:foo)
         ),
         IntegerNode(711...712)()],
        (703...704),
@@ -518,11 +524,11 @@ ProgramNode(0...916)(
      ArrayNode(714...728)(
        [SplatNode(715...720)(
           (715...716),
-          InstanceVariableReadNode(716...720)()
+          InstanceVariableReadNode(716...720)(:foo)
         ),
         SplatNode(722...727)(
           (722...723),
-          InstanceVariableReadNode(723...727)()
+          InstanceVariableReadNode(723...727)(:baz)
         )],
        (714...715),
        (727...728)
diff --git a/test/yarp/snapshots/unparser/corpus/literal/variables.txt b/test/yarp/snapshots/unparser/corpus/literal/variables.txt
index b7ab14e3..29857ec5 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/variables.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/variables.txt
@@ -2,7 +2,7 @@ ProgramNode(0...66)(
   [],
   StatementsNode(0...66)(
     [CallNode(0...1)(nil, nil, (0...1), nil, nil, nil, nil, 2, "a"),
-     InstanceVariableReadNode(2...4)(),
+     InstanceVariableReadNode(2...4)(:a),
      ClassVariableReadNode(5...8)(),
      GlobalVariableReadNode(9...11)(),
      NumberedReferenceReadNode(12...14)(),
diff --git a/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt b/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
index 14843a83..490b13e0 100644
--- a/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
+++ b/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
@@ -207,7 +207,9 @@ ProgramNode(0...608)(
          [StringNode(563...564)(nil, (563...564), nil, "a"),
           EmbeddedStatementsNode(564...569)(
             (564...566),
-            StatementsNode(566...568)([InstanceVariableReadNode(566...568)()]),
+            StatementsNode(566...568)(
+              [InstanceVariableReadNode(566...568)(:a)]
+            ),
             (568...569)
           )],
          (569...570)
@@ -220,7 +222,7 @@ ProgramNode(0...608)(
          [StringNode(576...577)(nil, (576...577), nil, "a"),
           EmbeddedVariableNode(577...580)(
             (577...578),
-            InstanceVariableReadNode(578...580)()
+            InstanceVariableReadNode(578...580)(:a)
           )],
          (580...581)
        ),
diff --git a/test/yarp/snapshots/unparser/corpus/semantic/literal.txt b/test/yarp/snapshots/unparser/corpus/semantic/literal.txt
index d8578058..b9df7fcb 100644
--- a/test/yarp/snapshots/unparser/corpus/semantic/literal.txt
+++ b/test/yarp/snapshots/unparser/corpus/semantic/literal.txt
@@ -15,7 +15,7 @@ ProgramNode(0...131)(
        (71...74),
        [EmbeddedStatementsNode(74...81)(
           (74...76),
-          StatementsNode(76...80)([InstanceVariableReadNode(76...80)()]),
+          StatementsNode(76...80)([InstanceVariableReadNode(76...80)(:bar)]),
           (80...81)
         ),
         StringNode(81...84)(nil, (81...84), nil, "baz")],
diff --git a/test/yarp/snapshots/variables.txt b/test/yarp/snapshots/variables.txt
index 35b90dba..a6b6a444 100644
--- a/test/yarp/snapshots/variables.txt
+++ b/test/yarp/snapshots/variables.txt
@@ -30,8 +30,9 @@ ProgramNode(0...293)(
        IntegerNode(57...58)()
      ),
      GlobalVariableReadNode(60...64)(),
-     InstanceVariableReadNode(66...70)(),
+     InstanceVariableReadNode(66...70)(:abc),
      InstanceVariableWriteNode(72...80)(
+       :abc,
        (72...76),
        IntegerNode(79...80)(),
        (77...78)
@@ -62,14 +63,15 @@ ProgramNode(0...293)(
        )
      ),
      MultiWriteNode(123...137)(
-       [InstanceVariableTargetNode(123...127)(),
-        InstanceVariableTargetNode(129...133)()],
+       [InstanceVariableTargetNode(123...127)(:foo),
+        InstanceVariableTargetNode(129...133)(:bar)],
        (134...135),
        IntegerNode(136...137)(),
        nil,
        nil
      ),
      InstanceVariableWriteNode(139...150)(
+       :foo,
        (139...143),
        ArrayNode(146...150)(
          [IntegerNode(146...147)(), IntegerNode(149...150)()],
diff --git a/test/yarp/snapshots/whitequark/array_words_interp.txt b/test/yarp/snapshots/whitequark/array_words_interp.txt
index 3cc21323..963a83dd 100644
--- a/test/yarp/snapshots/whitequark/array_words_interp.txt
+++ b/test/yarp/snapshots/whitequark/array_words_interp.txt
@@ -51,7 +51,7 @@ ProgramNode(0...38)(
            StringNode(29...32)(nil, (29...32), nil, "foo"),
            EmbeddedVariableNode(32...37)(
              (32...33),
-             InstanceVariableReadNode(33...37)()
+             InstanceVariableReadNode(33...37)(:baz)
            )],
           nil
         )],
diff --git a/test/yarp/snapshots/whitequark/defined.txt b/test/yarp/snapshots/whitequark/defined.txt
index 12a30055..9d8d997e 100644
--- a/test/yarp/snapshots/whitequark/defined.txt
+++ b/test/yarp/snapshots/whitequark/defined.txt
@@ -3,7 +3,7 @@ ProgramNode(0...42)(
   StatementsNode(0...42)(
     [DefinedNode(0...13)(
        nil,
-       InstanceVariableReadNode(9...13)(),
+       InstanceVariableReadNode(9...13)(:foo),
        nil,
        (0...8)
      ),
diff --git a/test/yarp/snapshots/whitequark/ivar.txt b/test/yarp/snapshots/whitequark/ivar.txt
index 88bb2ace..cf233251 100644
--- a/test/yarp/snapshots/whitequark/ivar.txt
+++ b/test/yarp/snapshots/whitequark/ivar.txt
@@ -1,4 +1,4 @@
 ProgramNode(0...4)(
   [],
-  StatementsNode(0...4)([InstanceVariableReadNode(0...4)()])
+  StatementsNode(0...4)([InstanceVariableReadNode(0...4)(:foo)])
 )
diff --git a/test/yarp/snapshots/whitequark/ivasgn.txt b/test/yarp/snapshots/whitequark/ivasgn.txt
index 4f6f90bb..587dcfaa 100644
--- a/test/yarp/snapshots/whitequark/ivasgn.txt
+++ b/test/yarp/snapshots/whitequark/ivasgn.txt
@@ -1,6 +1,11 @@
 ProgramNode(0...9)(
   [],
   StatementsNode(0...9)(
-    [InstanceVariableWriteNode(0...9)((0...4), IntegerNode(7...9)(), (5...6))]
+    [InstanceVariableWriteNode(0...9)(
+       :var,
+       (0...4),
+       IntegerNode(7...9)(),
+       (5...6)
+     )]
   )
 )
diff --git a/test/yarp/snapshots/whitequark/masgn_splat.txt b/test/yarp/snapshots/whitequark/masgn_splat.txt
index e10e6d22..c6265c65 100644
--- a/test/yarp/snapshots/whitequark/masgn_splat.txt
+++ b/test/yarp/snapshots/whitequark/masgn_splat.txt
@@ -51,7 +51,7 @@ ProgramNode(0...139)(
        nil
      ),
      MultiWriteNode(47...65)(
-       [InstanceVariableTargetNode(47...51)(),
+       [InstanceVariableTargetNode(47...51)(:foo),
         ClassVariableTargetNode(53...58)()],
        (59...60),
        ArrayNode(61...65)(
diff --git a/test/yarp/snapshots/whitequark/parser_bug_272.txt b/test/yarp/snapshots/whitequark/parser_bug_272.txt
index eeb981d6..50d75398 100644
--- a/test/yarp/snapshots/whitequark/parser_bug_272.txt
+++ b/test/yarp/snapshots/whitequark/parser_bug_272.txt
@@ -6,7 +6,7 @@ ProgramNode(0...15)(
        nil,
        (0...1),
        nil,
-       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)()]),
+       ArgumentsNode(2...4)([InstanceVariableReadNode(2...4)(:b)]),
        nil,
        BlockNode(5...15)(
          [:c],
diff --git a/test/yarp/snapshots/whitequark/resbody_var.txt b/test/yarp/snapshots/whitequark/resbody_var.txt
index 861a91f7..4530e6cd 100644
--- a/test/yarp/snapshots/whitequark/resbody_var.txt
+++ b/test/yarp/snapshots/whitequark/resbody_var.txt
@@ -10,7 +10,7 @@ ProgramNode(0...73)(
          (13...19),
          [],
          (20...22),
-         InstanceVariableTargetNode(23...26)(),
+         InstanceVariableTargetNode(23...26)(:ex),
          StatementsNode(28...31)(
            [CallNode(28...31)(
               nil,
diff --git a/test/yarp/snapshots/whitequark/string_concat.txt b/test/yarp/snapshots/whitequark/string_concat.txt
index c20f4ac3..fde498b3 100644
--- a/test/yarp/snapshots/whitequark/string_concat.txt
+++ b/test/yarp/snapshots/whitequark/string_concat.txt
@@ -7,7 +7,7 @@ ProgramNode(0...14)(
          [StringNode(1...4)(nil, (1...4), nil, "foo"),
           EmbeddedVariableNode(4...7)(
             (4...5),
-            InstanceVariableReadNode(5...7)()
+            InstanceVariableReadNode(5...7)(:a)
           )],
          (7...8)
        ),
diff --git a/test/yarp/snapshots/whitequark/string_dvar.txt b/test/yarp/snapshots/whitequark/string_dvar.txt
index c89e3595..2378e8fd 100644
--- a/test/yarp/snapshots/whitequark/string_dvar.txt
+++ b/test/yarp/snapshots/whitequark/string_dvar.txt
@@ -5,7 +5,7 @@ ProgramNode(0...14)(
        (0...1),
        [EmbeddedVariableNode(1...4)(
           (1...2),
-          InstanceVariableReadNode(2...4)()
+          InstanceVariableReadNode(2...4)(:a)
         ),
         StringNode(4...5)(nil, (4...5), nil, " "),
         EmbeddedVariableNode(5...9)((5...6), ClassVariableReadNode(6...9)()),
diff --git a/test/yarp/snapshots/whitequark/var_op_asgn.txt b/test/yarp/snapshots/whitequark/var_op_asgn.txt
index 4591e68c..3aff7a6a 100644
--- a/test/yarp/snapshots/whitequark/var_op_asgn.txt
+++ b/test/yarp/snapshots/whitequark/var_op_asgn.txt
@@ -8,6 +8,7 @@ ProgramNode(0...53)(
        :|
      ),
      InstanceVariableOperatorWriteNode(13...20)(
+       :a,
        (13...15),
        (16...18),
        IntegerNode(19...20)(),