summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/yarp/desugar_visitor.rb10
-rw-r--r--test/yarp/snapshots/methods.txt2
-rw-r--r--test/yarp/snapshots/patterns.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/case_in.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/lasgn_ivar_env.txt7
-rw-r--r--test/yarp/snapshots/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/parse_line_call_ivar_line_break_paren.txt2
-rw-r--r--test/yarp/snapshots/strings.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/assignment.txt7
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/defined.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/dstr.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/literal.txt22
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/variables.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/semantic/dstr.txt6
-rw-r--r--test/yarp/snapshots/unparser/corpus/semantic/literal.txt2
-rw-r--r--test/yarp/snapshots/variables.txt8
-rw-r--r--test/yarp/snapshots/whitequark/array_words_interp.txt2
-rw-r--r--test/yarp/snapshots/whitequark/defined.txt2
-rw-r--r--test/yarp/snapshots/whitequark/ivar.txt2
-rw-r--r--test/yarp/snapshots/whitequark/ivasgn.txt7
-rw-r--r--test/yarp/snapshots/whitequark/masgn_splat.txt2
-rw-r--r--test/yarp/snapshots/whitequark/parser_bug_272.txt2
-rw-r--r--test/yarp/snapshots/whitequark/resbody_var.txt2
-rw-r--r--test/yarp/snapshots/whitequark/string_concat.txt2
-rw-r--r--test/yarp/snapshots/whitequark/string_dvar.txt2
-rw-r--r--test/yarp/snapshots/whitequark/var_op_asgn.txt1
-rw-r--r--yarp/config.yml14
-rw-r--r--yarp/yarp.c40
30 files changed, 103 insertions, 59 deletions
diff --git a/lib/yarp/desugar_visitor.rb b/lib/yarp/desugar_visitor.rb
index 3f901630b0..83a9bb5336 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/test/yarp/snapshots/methods.txt b/test/yarp/snapshots/methods.txt
index a2cfa8e06d..32a7a4e7cd 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 de5946a7cf..f888d1498f 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 8a5fafdf74..5ea3d11b78 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 cfb1f96443..5aab2888ef 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 ee013f5137..04727011a2 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 b71eeaf2a7..f065032f3a 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 b7cca1732b..efbc413fe1 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 ae67416e67..6466d9dd45 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 38033453af..d6f624624c 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 bcf853886f..6166e0cd26 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 c2d6a71bb1..1d39c45c83 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 8466149369..49d08824bf 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 bc9f86842d..a38a7f4f88 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 b7ab14e36c..29857ec53c 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 14843a83a6..490b13e0bc 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 d8578058df..b9df7fcbd9 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 35b90dbae3..a6b6a444f9 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 3cc21323f7..963a83dd48 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 12a3005593..9d8d997e2b 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 88bb2ace35..cf233251f2 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 4f6f90bbd7..587dcfaa9d 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 e10e6d22d1..c6265c652e 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 eeb981d694..50d7539807 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 861a91f79f..4530e6cdbd 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 c20f4ac35e..fde498b39f 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 c89e359565..2378e8fdcb 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 4591e68c96..3aff7a6a60 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)(),
diff --git a/yarp/config.yml b/yarp/config.yml
index d35436088a..b4e8b47913 100644
--- a/yarp/config.yml
+++ b/yarp/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/yarp/yarp.c b/yarp/yarp.c
index 78c0a03cfe..089de42b9a 100644
--- a/yarp/yarp.c
+++ b/yarp/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
@@ -12821,7 +12827,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;
@@ -12922,7 +12928,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;
@@ -13033,7 +13039,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;