Skip to content

Commit 7e1dc8f

Browse files
Add pm_unexpected_node_create function
1 parent bf17817 commit 7e1dc8f

3 files changed

Lines changed: 24 additions & 4 deletions

File tree

config.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3687,8 +3687,12 @@ nodes:
36873687
/(?<foo>bar)/ =~ baz
36883688
^^^^^^^^^^^^^^^^^^^^
36893689
- name: ErrorRecoveryNode
3690+
fields:
3691+
- name: child
3692+
type: node?
3693+
kind: Node
36903694
comment: |
3691-
Represents a node that is missing from the source and results in a syntax error.
3695+
Represents a node that is either missing or unexpected and results in a syntax error.
36923696
- name: ModuleNode
36933697
fields:
36943698
- name: locals

lib/prism/node_ext.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def child
208208
if name
209209
ConstantReadNode.new(source, -1, name_loc, 0, name)
210210
else
211-
ErrorRecoveryNode.new(source, -1, location, 0)
211+
ErrorRecoveryNode.new(source, -1, location, 0, nil)
212212
end
213213
end
214214
end
@@ -249,7 +249,7 @@ def child
249249
if name
250250
ConstantReadNode.new(source, -1, name_loc, 0, name)
251251
else
252-
ErrorRecoveryNode.new(source, -1, location, 0)
252+
ErrorRecoveryNode.new(source, -1, location, 0, nil)
253253
end
254254
end
255255
end

src/prism.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1965,7 +1965,23 @@ pm_missing_node_create(pm_parser_t *parser, const uint8_t *start, const uint8_t
19651965
pm_error_recovery_node_t *node = PM_NODE_ALLOC(parser, pm_error_recovery_node_t);
19661966

19671967
*node = (pm_error_recovery_node_t) {
1968-
.base = PM_NODE_INIT(parser, PM_ERROR_RECOVERY_NODE, 0, start, end)
1968+
.base = PM_NODE_INIT(parser, PM_ERROR_RECOVERY_NODE, 0, start, end),
1969+
.child = NULL
1970+
};
1971+
1972+
return node;
1973+
}
1974+
1975+
/**
1976+
* Allocate a new ErrorRecoveryNode node that wraps an unexpected child node.
1977+
*/
1978+
PRISM_ATTRIBUTE_UNUSED static pm_error_recovery_node_t *
1979+
pm_unexpected_node_create(pm_parser_t *parser, pm_node_t *child) {
1980+
pm_error_recovery_node_t *node = PM_NODE_ALLOC(parser, pm_error_recovery_node_t);
1981+
1982+
*node = (pm_error_recovery_node_t) {
1983+
.base = PM_NODE_INIT(parser, PM_ERROR_RECOVERY_NODE, 0, child->location.start, child->location.end),
1984+
.child = child
19691985
};
19701986

19711987
return node;

0 commit comments

Comments
 (0)