aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/yarp/desugar_visitor.rb14
-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/strings.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/assignment.txt5
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/dstr.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/literal.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/variables.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/semantic/dstr.txt2
-rw-r--r--test/yarp/snapshots/variables.txt8
-rw-r--r--test/yarp/snapshots/whitequark/cvar.txt5
-rw-r--r--test/yarp/snapshots/whitequark/cvasgn.txt7
-rw-r--r--test/yarp/snapshots/whitequark/masgn_splat.txt2
-rw-r--r--test/yarp/snapshots/whitequark/string_dvar.txt5
-rw-r--r--test/yarp/snapshots/whitequark/var_op_asgn.txt2
-rw-r--r--yarp/config.yml14
-rw-r--r--yarp/yarp.c44
18 files changed, 81 insertions, 41 deletions
diff --git a/lib/yarp/desugar_visitor.rb b/lib/yarp/desugar_visitor.rb
index 8fe488368e..d0c0494e0c 100644
--- a/lib/yarp/desugar_visitor.rb
+++ b/lib/yarp/desugar_visitor.rb
@@ -8,7 +8,7 @@ module YARP
#
# @@foo && @@foo = bar
def visit_class_variable_and_write_node(node)
- desugar_and_write_node(node, ClassVariableReadNode, ClassVariableWriteNode)
+ desugar_and_write_node(node, ClassVariableReadNode, ClassVariableWriteNode, arguments: [node.name])
end
# @@foo ||= bar
@@ -17,7 +17,7 @@ module YARP
#
# defined?(@@foo) ? @@foo : @@foo = bar
def visit_class_variable_or_write_node(node)
- desugar_or_write_defined_node(node, ClassVariableReadNode, ClassVariableWriteNode)
+ desugar_or_write_defined_node(node, ClassVariableReadNode, ClassVariableWriteNode, arguments: [node.name])
end
# @@foo += bar
@@ -26,7 +26,7 @@ module YARP
#
# @@foo = @@foo + bar
def visit_class_variable_operator_write_node(node)
- desugar_operator_write_node(node, ClassVariableReadNode, ClassVariableWriteNode)
+ desugar_operator_write_node(node, ClassVariableReadNode, ClassVariableWriteNode, arguments: [node.name])
end
# Foo &&= bar
@@ -245,15 +245,15 @@ module YARP
end
# Don't desugar `x ||= y` to `defined?(x) ? x : x = y`
- def desugar_or_write_defined_node(node, read_class, write_class)
+ def desugar_or_write_defined_node(node, read_class, write_class, arguments: [])
IfNode.new(
node.operator_loc,
- DefinedNode.new(nil, read_class.new(node.name_loc), nil, node.operator_loc, node.name_loc),
- StatementsNode.new([read_class.new(node.name_loc)], node.location),
+ DefinedNode.new(nil, read_class.new(*arguments, node.name_loc), nil, node.operator_loc, node.name_loc),
+ StatementsNode.new([read_class.new(*arguments, node.name_loc)], node.location),
ElseNode.new(
node.operator_loc,
StatementsNode.new(
- [write_class.new(node.name_loc, node.value, node.operator_loc, node.location)],
+ [write_class.new(*arguments, node.name_loc, node.value, node.operator_loc, node.location)],
node.location
),
node.operator_loc,
diff --git a/test/yarp/snapshots/methods.txt b/test/yarp/snapshots/methods.txt
index 70e030811c..b5ec66aae3 100644
--- a/test/yarp/snapshots/methods.txt
+++ b/test/yarp/snapshots/methods.txt
@@ -910,7 +910,7 @@ ProgramNode(0...1194)(
),
DefNode(811...826)(
(821...822),
- ClassVariableReadNode(815...820)(),
+ ClassVariableReadNode(815...820)(:@@var),
nil,
nil,
[],
diff --git a/test/yarp/snapshots/patterns.txt b/test/yarp/snapshots/patterns.txt
index 63764bca0b..01292cbf3c 100644
--- a/test/yarp/snapshots/patterns.txt
+++ b/test/yarp/snapshots/patterns.txt
@@ -941,7 +941,7 @@ ProgramNode(0...3743)(
"foo"
),
PinnedVariableNode(974...980)(
- ClassVariableReadNode(975...980)(),
+ ClassVariableReadNode(975...980)(:@@bar),
(974...975)
),
(971...973)
diff --git a/test/yarp/snapshots/seattlerb/case_in.txt b/test/yarp/snapshots/seattlerb/case_in.txt
index 2e508d8c9a..aaee410ef3 100644
--- a/test/yarp/snapshots/seattlerb/case_in.txt
+++ b/test/yarp/snapshots/seattlerb/case_in.txt
@@ -502,7 +502,7 @@ ProgramNode(0...747)(
(633...634)
),
PinnedVariableNode(638...642)(
- ClassVariableReadNode(639...642)(),
+ ClassVariableReadNode(639...642)(:@@c),
(638...639)
)],
nil,
diff --git a/test/yarp/snapshots/strings.txt b/test/yarp/snapshots/strings.txt
index ee8bc79f17..86a732d85d 100644
--- a/test/yarp/snapshots/strings.txt
+++ b/test/yarp/snapshots/strings.txt
@@ -20,7 +20,7 @@ ProgramNode(0...498)(
(122...123),
[EmbeddedVariableNode(123...129)(
(123...124),
- ClassVariableReadNode(124...129)()
+ ClassVariableReadNode(124...129)(:@@foo)
)],
(129...130)
),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/assignment.txt b/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
index 7e193e0e87..78ab4d3d78 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/assignment.txt
@@ -54,8 +54,8 @@ ProgramNode(0...704)(
(54...55)
),
MultiWriteNode(65...84)(
- [ClassVariableTargetNode(66...69)(),
- ClassVariableTargetNode(71...74)()],
+ [ClassVariableTargetNode(66...69)(:@@a),
+ ClassVariableTargetNode(71...74)(:@@b)],
(76...77),
ArrayNode(78...84)(
[IntegerNode(79...80)(), IntegerNode(82...83)()],
@@ -291,6 +291,7 @@ ProgramNode(0...704)(
)
),
ClassVariableWriteNode(302...309)(
+ :@@a,
(302...305),
IntegerNode(308...309)(),
(306...307)
diff --git a/test/yarp/snapshots/unparser/corpus/literal/dstr.txt b/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
index 1abbed681f..facf0171e7 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/dstr.txt
@@ -84,7 +84,7 @@ ProgramNode(0...299)(
[StringNode(167...168)(nil, (167...168), nil, "a"),
EmbeddedVariableNode(168...172)(
(168...169),
- ClassVariableReadNode(169...172)()
+ ClassVariableReadNode(169...172)(:@@a)
)],
(172...173)
),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/literal.txt b/test/yarp/snapshots/unparser/corpus/literal/literal.txt
index 03f9aecbd5..3b85d3e95f 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/literal.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/literal.txt
@@ -158,7 +158,7 @@ ProgramNode(0...916)(
StringNode(210...211)(nil, (210...211), nil, " "),
EmbeddedVariableNode(211...215)(
(211...212),
- ClassVariableReadNode(212...215)()
+ ClassVariableReadNode(212...215)(:@@a)
),
StringNode(215...216)(nil, (215...216), nil, " "),
EmbeddedVariableNode(216...219)(
diff --git a/test/yarp/snapshots/unparser/corpus/literal/variables.txt b/test/yarp/snapshots/unparser/corpus/literal/variables.txt
index 051fb2f498..dfb85ec013 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/variables.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/variables.txt
@@ -3,7 +3,7 @@ ProgramNode(0...66)(
StatementsNode(0...66)(
[CallNode(0...1)(nil, nil, (0...1), nil, nil, nil, nil, 2, "a"),
InstanceVariableReadNode(2...4)(:@a),
- ClassVariableReadNode(5...8)(),
+ ClassVariableReadNode(5...8)(:@@a),
GlobalVariableReadNode(9...11)(),
NumberedReferenceReadNode(12...14)(),
BackReferenceReadNode(15...17)(),
diff --git a/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt b/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
index 47d37b1c38..8822eb5333 100644
--- a/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
+++ b/test/yarp/snapshots/unparser/corpus/semantic/dstr.txt
@@ -246,7 +246,7 @@ ProgramNode(0...608)(
[StringNode(598...599)(nil, (598...599), nil, "a"),
EmbeddedVariableNode(599...603)(
(599...600),
- ClassVariableReadNode(600...603)()
+ ClassVariableReadNode(600...603)(:@@a)
)],
(603...604)
),
diff --git a/test/yarp/snapshots/variables.txt b/test/yarp/snapshots/variables.txt
index 2dd87366c5..419942d1eb 100644
--- a/test/yarp/snapshots/variables.txt
+++ b/test/yarp/snapshots/variables.txt
@@ -1,21 +1,23 @@
ProgramNode(0...293)(
[:abc, :foo, :bar, :baz],
StatementsNode(0...293)(
- [ClassVariableReadNode(0...5)(),
+ [ClassVariableReadNode(0...5)(:@@abc),
ClassVariableWriteNode(7...16)(
+ :@@abc,
(7...12),
IntegerNode(15...16)(),
(13...14)
),
MultiWriteNode(18...34)(
- [ClassVariableTargetNode(18...23)(),
- ClassVariableTargetNode(25...30)()],
+ [ClassVariableTargetNode(18...23)(:@@foo),
+ ClassVariableTargetNode(25...30)(:@@bar)],
(31...32),
IntegerNode(33...34)(),
nil,
nil
),
ClassVariableWriteNode(36...48)(
+ :@@foo,
(36...41),
ArrayNode(44...48)(
[IntegerNode(44...45)(), IntegerNode(47...48)()],
diff --git a/test/yarp/snapshots/whitequark/cvar.txt b/test/yarp/snapshots/whitequark/cvar.txt
index 069ff24b17..6a1f2e50f4 100644
--- a/test/yarp/snapshots/whitequark/cvar.txt
+++ b/test/yarp/snapshots/whitequark/cvar.txt
@@ -1 +1,4 @@
-ProgramNode(0...5)([], StatementsNode(0...5)([ClassVariableReadNode(0...5)()]))
+ProgramNode(0...5)(
+ [],
+ StatementsNode(0...5)([ClassVariableReadNode(0...5)(:@@foo)])
+)
diff --git a/test/yarp/snapshots/whitequark/cvasgn.txt b/test/yarp/snapshots/whitequark/cvasgn.txt
index b972caaab7..7e07810eb6 100644
--- a/test/yarp/snapshots/whitequark/cvasgn.txt
+++ b/test/yarp/snapshots/whitequark/cvasgn.txt
@@ -1,6 +1,11 @@
ProgramNode(0...10)(
[],
StatementsNode(0...10)(
- [ClassVariableWriteNode(0...10)((0...5), IntegerNode(8...10)(), (6...7))]
+ [ClassVariableWriteNode(0...10)(
+ :@@var,
+ (0...5),
+ IntegerNode(8...10)(),
+ (6...7)
+ )]
)
)
diff --git a/test/yarp/snapshots/whitequark/masgn_splat.txt b/test/yarp/snapshots/whitequark/masgn_splat.txt
index b093187ef6..d21760a65b 100644
--- a/test/yarp/snapshots/whitequark/masgn_splat.txt
+++ b/test/yarp/snapshots/whitequark/masgn_splat.txt
@@ -52,7 +52,7 @@ ProgramNode(0...139)(
),
MultiWriteNode(47...65)(
[InstanceVariableTargetNode(47...51)(:@foo),
- ClassVariableTargetNode(53...58)()],
+ ClassVariableTargetNode(53...58)(:@@bar)],
(59...60),
ArrayNode(61...65)(
[SplatNode(61...65)(
diff --git a/test/yarp/snapshots/whitequark/string_dvar.txt b/test/yarp/snapshots/whitequark/string_dvar.txt
index 981ea318c4..12f083660b 100644
--- a/test/yarp/snapshots/whitequark/string_dvar.txt
+++ b/test/yarp/snapshots/whitequark/string_dvar.txt
@@ -8,7 +8,10 @@ ProgramNode(0...14)(
InstanceVariableReadNode(2...4)(:@a)
),
StringNode(4...5)(nil, (4...5), nil, " "),
- EmbeddedVariableNode(5...9)((5...6), ClassVariableReadNode(6...9)()),
+ EmbeddedVariableNode(5...9)(
+ (5...6),
+ ClassVariableReadNode(6...9)(:@@a)
+ ),
StringNode(9...10)(nil, (9...10), nil, " "),
EmbeddedVariableNode(10...13)(
(10...11),
diff --git a/test/yarp/snapshots/whitequark/var_op_asgn.txt b/test/yarp/snapshots/whitequark/var_op_asgn.txt
index 5618d0944c..0927e8b8f3 100644
--- a/test/yarp/snapshots/whitequark/var_op_asgn.txt
+++ b/test/yarp/snapshots/whitequark/var_op_asgn.txt
@@ -2,6 +2,7 @@ ProgramNode(0...53)(
[:a],
StatementsNode(0...53)(
[ClassVariableOperatorWriteNode(0...11)(
+ :@@var,
(0...5),
(6...8),
IntegerNode(9...11)(),
@@ -28,6 +29,7 @@ ProgramNode(0...53)(
nil,
StatementsNode(37...48)(
[ClassVariableOperatorWriteNode(37...48)(
+ :@@var,
(37...42),
(43...45),
IntegerNode(46...48)(),
diff --git a/yarp/config.yml b/yarp/config.yml
index b4e8b47913..72c4aeb8af 100644
--- a/yarp/config.yml
+++ b/yarp/config.yml
@@ -727,6 +727,8 @@ nodes:
^^^^^^^^^^^^^
- name: ClassVariableAndWriteNode
child_nodes:
+ - name: name
+ type: constant
- name: name_loc
type: location
- name: operator_loc
@@ -740,6 +742,8 @@ nodes:
^^^^^^^^^^^^^^^^
- name: ClassVariableOperatorWriteNode
child_nodes:
+ - name: name
+ type: constant
- name: name_loc
type: location
- name: operator_loc
@@ -755,6 +759,8 @@ nodes:
^^^^^^^^^^^^^^^^^
- name: ClassVariableOrWriteNode
child_nodes:
+ - name: name
+ type: constant
- name: name_loc
type: location
- name: operator_loc
@@ -767,12 +773,18 @@ nodes:
@@target ||= value
^^^^^^^^^^^^^^^^^^
- name: ClassVariableReadNode
+ child_nodes:
+ - name: name
+ type: constant
comment: |
Represents referencing a class variable.
@@foo
^^^^^
- name: ClassVariableTargetNode
+ child_nodes:
+ - name: name
+ type: constant
comment: |
Represents writing to a class variable in a context that doesn't have an explicit value.
@@ -780,6 +792,8 @@ nodes:
^^^^^ ^^^^^
- name: ClassVariableWriteNode
child_nodes:
+ - name: name
+ type: constant
- name: name_loc
type: location
- name: value
diff --git a/yarp/yarp.c b/yarp/yarp.c
index 46fe7259a4..6fd16e16fc 100644
--- a/yarp/yarp.c
+++ b/yarp/yarp.c
@@ -1558,8 +1558,7 @@ yp_class_node_create(yp_parser_t *parser, yp_constant_id_list_t *locals, const y
// Allocate and initialize a new ClassVariableAndWriteNode node.
static yp_class_variable_and_write_node_t *
-yp_class_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_CLASS_VARIABLE_READ_NODE));
+yp_class_variable_and_write_node_create(yp_parser_t *parser, yp_class_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
assert(operator->type == YP_TOKEN_AMPERSAND_AMPERSAND_EQUAL);
yp_class_variable_and_write_node_t *node = YP_ALLOC_NODE(parser, yp_class_variable_and_write_node_t);
@@ -1567,11 +1566,12 @@ yp_class_variable_and_write_node_create(yp_parser_t *parser, yp_node_t *target,
{
.type = YP_NODE_CLASS_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
};
@@ -1581,18 +1581,19 @@ yp_class_variable_and_write_node_create(yp_parser_t *parser, yp_node_t *target,
// Allocate and initialize a new ClassVariableOperatorWriteNode node.
static yp_class_variable_operator_write_node_t *
-yp_class_variable_operator_write_node_create(yp_parser_t *parser, yp_node_t *target, const yp_token_t *operator, yp_node_t *value) {
+yp_class_variable_operator_write_node_create(yp_parser_t *parser, yp_class_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
yp_class_variable_operator_write_node_t *node = YP_ALLOC_NODE(parser, yp_class_variable_operator_write_node_t);
*node = (yp_class_variable_operator_write_node_t) {
{
.type = YP_NODE_CLASS_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)
@@ -1603,8 +1604,7 @@ yp_class_variable_operator_write_node_create(yp_parser_t *parser, yp_node_t *tar
// Allocate and initialize a new ClassVariableOrWriteNode node.
static yp_class_variable_or_write_node_t *
-yp_class_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_CLASS_VARIABLE_READ_NODE));
+yp_class_variable_or_write_node_create(yp_parser_t *parser, yp_class_variable_read_node_t *target, const yp_token_t *operator, yp_node_t *value) {
assert(operator->type == YP_TOKEN_PIPE_PIPE_EQUAL);
yp_class_variable_or_write_node_t *node = YP_ALLOC_NODE(parser, yp_class_variable_or_write_node_t);
@@ -1612,11 +1612,12 @@ yp_class_variable_or_write_node_create(yp_parser_t *parser, yp_node_t *target, c
{
.type = YP_NODE_CLASS_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
};
@@ -1629,13 +1630,21 @@ static yp_class_variable_read_node_t *
yp_class_variable_read_node_create(yp_parser_t *parser, const yp_token_t *token) {
assert(token->type == YP_TOKEN_CLASS_VARIABLE);
yp_class_variable_read_node_t *node = YP_ALLOC_NODE(parser, yp_class_variable_read_node_t);
- *node = (yp_class_variable_read_node_t) {{ .type = YP_NODE_CLASS_VARIABLE_READ_NODE, .location = YP_LOCATION_TOKEN_VALUE(token) }};
+
+ *node = (yp_class_variable_read_node_t) {
+ {
+ .type = YP_NODE_CLASS_VARIABLE_READ_NODE,
+ .location = YP_LOCATION_TOKEN_VALUE(token)
+ },
+ .name = yp_parser_constant_id_location(parser, token->start, token->end)
+ };
+
return node;
}
// Initialize a new ClassVariableWriteNode node from a ClassVariableRead node.
static yp_class_variable_write_node_t *
-yp_class_variable_read_node_to_class_variable_write_node(yp_parser_t *parser, yp_class_variable_read_node_t *read_node, yp_token_t *operator, yp_node_t *value) {
+yp_class_variable_write_node_create(yp_parser_t *parser, yp_class_variable_read_node_t *read_node, yp_token_t *operator, yp_node_t *value) {
yp_class_variable_write_node_t *node = YP_ALLOC_NODE(parser, yp_class_variable_write_node_t);
*node = (yp_class_variable_write_node_t) {
@@ -1646,6 +1655,7 @@ yp_class_variable_read_node_to_class_variable_write_node(yp_parser_t *parser, yp
.end = value->location.end
},
},
+ .name = read_node->name,
.name_loc = YP_LOCATION_NODE_VALUE((yp_node_t *) read_node),
.operator_loc = YP_OPTIONAL_LOCATION_TOKEN_VALUE(operator),
.value = value
@@ -8007,7 +8017,7 @@ parse_write(yp_parser_t *parser, yp_node_t *target, yp_token_t *operator, yp_nod
case YP_NODE_MISSING_NODE:
return target;
case YP_NODE_CLASS_VARIABLE_READ_NODE: {
- yp_class_variable_write_node_t *write_node = yp_class_variable_read_node_to_class_variable_write_node(parser, (yp_class_variable_read_node_t *) target, operator, value);
+ yp_class_variable_write_node_t *write_node = yp_class_variable_write_node_create(parser, (yp_class_variable_read_node_t *) target, operator, value);
yp_node_destroy(parser, target);
return (yp_node_t *) write_node;
}
@@ -12837,7 +12847,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_class_variable_and_write_node_create(parser, node, &token, value);
+ yp_node_t *result = (yp_node_t *) yp_class_variable_and_write_node_create(parser, (yp_class_variable_read_node_t *) node, &token, value);
yp_node_destroy(parser, node);
return result;
@@ -12938,7 +12948,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_class_variable_or_write_node_create(parser, node, &token, value);
+ yp_node_t *result = (yp_node_t *) yp_class_variable_or_write_node_create(parser, (yp_class_variable_read_node_t *) node, &token, value);
yp_node_destroy(parser, node);
return result;
@@ -13049,7 +13059,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_class_variable_operator_write_node_create(parser, node, &token, value);
+ yp_node_t *result = (yp_node_t *) yp_class_variable_operator_write_node_create(parser, (yp_class_variable_read_node_t *) node, &token, value);
yp_node_destroy(parser, node);
return result;