diff options
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; |