summaryrefslogtreecommitdiff
path: root/prism
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-13 08:47:41 -0400
committergit <svn-admin@ruby-lang.org>2024-03-13 13:52:13 +0000
commitd1eaa97ec3cdbe38605379fc87a55987d6802dc7 (patch)
treeb7efdc26e943bf04664ce4c3818a29747651247d /prism
parent3f8ef7ff7c09e67a48eff33804060803b9f11119 (diff)
[ruby/prism] Track parentheses in patterns
https://github.com/ruby/prism/commit/62db99f156
Diffstat (limited to 'prism')
-rw-r--r--prism/prism.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/prism/prism.c b/prism/prism.c
index 947d1a92bb..1d94ead82a 100644
--- a/prism/prism.c
+++ b/prism/prism.c
@@ -14883,14 +14883,20 @@ parse_pattern_primitives(pm_parser_t *parser, pm_diagnostic_id_t diag_id) {
break;
}
case PM_TOKEN_PARENTHESIS_LEFT: {
+ pm_token_t opening = parser->current;
parser_lex(parser);
- if (node != NULL) {
- pm_node_destroy(parser, node);
- }
- node = parse_pattern(parser, false, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN);
+ pm_node_t *body = parse_pattern(parser, false, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN);
accept1(parser, PM_TOKEN_NEWLINE);
expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN);
+ pm_node_t *right = (pm_node_t *) pm_parentheses_node_create(parser, &opening, body, &parser->previous);
+
+ if (node == NULL) {
+ node = right;
+ } else {
+ node = (pm_node_t *) pm_alternation_pattern_node_create(parser, node, right, &operator);
+ }
+
break;
}
default: {