[ruby/yarp] Add instance variable names to the constant pool

https://github.com/ruby/yarp/commit/f049932c44
This commit is contained in:
Kevin Newton 2023-08-29 09:17:34 -04:00 committed by git
parent 455153705c
commit b435161404
30 changed files with 103 additions and 59 deletions

View File

@ -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

View File

@ -199,7 +199,7 @@ ProgramNode(0...1194)(
),
DefNode(190...204)(
(199...200),
InstanceVariableReadNode(194...198)(),
InstanceVariableReadNode(194...198)(:var),
nil,
nil,
[],

View File

@ -923,7 +923,7 @@ ProgramNode(0...3743)(
"foo"
),
PinnedVariableNode(961...966)(
InstanceVariableReadNode(962...966)(),
InstanceVariableReadNode(962...966)(:bar),
(961...962)
),
(958...960)

View File

@ -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)(

View File

@ -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)

View File

@ -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)

View File

@ -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)
)]
)
)

View File

@ -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,

View File

@ -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,

View File

@ -185,7 +185,7 @@ ProgramNode(0...498)(
(414...415),
[EmbeddedVariableNode(415...420)(
(415...416),
InstanceVariableReadNode(416...420)()
InstanceVariableReadNode(416...420)(:foo)
)],
(420...421)
),

View File

@ -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)(

View File

@ -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)
),

View File

@ -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)
),

View File

@ -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)

View File

@ -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)(),

View File

@ -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)
),

View File

@ -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")],

View File

@ -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)()],

View File

@ -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
)],

View File

@ -3,7 +3,7 @@ ProgramNode(0...42)(
StatementsNode(0...42)(
[DefinedNode(0...13)(
nil,
InstanceVariableReadNode(9...13)(),
InstanceVariableReadNode(9...13)(:foo),
nil,
(0...8)
),

View File

@ -1,4 +1,4 @@
ProgramNode(0...4)(
[],
StatementsNode(0...4)([InstanceVariableReadNode(0...4)()])
StatementsNode(0...4)([InstanceVariableReadNode(0...4)(:foo)])
)

View File

@ -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)
)]
)
)

View File

@ -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)(

View File

@ -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],

View File

@ -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,

View File

@ -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)
),

View File

@ -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)()),

View File

@ -8,6 +8,7 @@ ProgramNode(0...53)(
:|
),
InstanceVariableOperatorWriteNode(13...20)(
:a,
(13...15),
(16...18),
IntegerNode(19...20)(),

View File

@ -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

View File

@ -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;