diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2024-03-13 08:47:41 -0400 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-03-13 13:52:13 +0000 |
| commit | d1eaa97ec3cdbe38605379fc87a55987d6802dc7 (patch) | |
| tree | b7efdc26e943bf04664ce4c3818a29747651247d /prism | |
| parent | 3f8ef7ff7c09e67a48eff33804060803b9f11119 (diff) | |
[ruby/prism] Track parentheses in patterns
https://github.com/ruby/prism/commit/62db99f156
Diffstat (limited to 'prism')
| -rw-r--r-- | prism/prism.c | 14 |
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: { |
