Skip to content

Commit 2fc1e7f

Browse files
committed
Add SPLAT flag on ArrayNode indicating if it contains splat element(s)
This commit puts a SPLAT flag on any ArrayNodes which contain SplatNode elements
1 parent 46b8576 commit 2fc1e7f

File tree

98 files changed

+462
-235
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+462
-235
lines changed

config.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,14 @@ tokens:
331331
flags:
332332
- name: ArgumentsNodeFlags
333333
values:
334-
- name: KEYWORD_SPLAT
334+
- name: CONTAINS_KEYWORD_SPLAT
335335
comment: "if arguments contain keyword splat"
336336
comment: Flags for arguments nodes.
337+
- name: ArrayNodeFlags
338+
values:
339+
- name: CONTAINS_SPLAT
340+
comment: "if array contains splat nodes"
341+
comment: Flags for array nodes.
337342
- name: CallNodeFlags
338343
values:
339344
- name: SAFE_NAVIGATION
@@ -459,6 +464,9 @@ nodes:
459464
type: location?
460465
- name: closing_loc
461466
type: location?
467+
- name: flags
468+
type: flags
469+
kind: ArrayNodeFlags
462470
comment: |
463471
Represents an array literal. This can be a regular array using brackets or
464472
a special array using % like %w or %i.

src/prism.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,10 @@ pm_array_node_elements_append(pm_array_node_t *node, pm_node_t *element) {
11511151
if (PM_NODE_TYPE_P(element, PM_ARRAY_NODE) || PM_NODE_TYPE_P(element, PM_HASH_NODE) || PM_NODE_TYPE_P(element, PM_RANGE_NODE) || (element->flags & PM_NODE_FLAG_STATIC_LITERAL) == 0) {
11521152
node->base.flags &= (pm_node_flags_t) ~PM_NODE_FLAG_STATIC_LITERAL;
11531153
}
1154+
1155+
if (PM_NODE_TYPE_P(element, PM_SPLAT_NODE)) {
1156+
node->base.flags |= PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT;
1157+
}
11541158
}
11551159

11561160
/**
@@ -11144,7 +11148,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for
1114411148
parsed_bare_hash = true;
1114511149
parse_arguments_append(parser, arguments, argument);
1114611150
if (contains_keyword_splat) {
11147-
arguments->arguments->base.flags |= PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT;
11151+
arguments->arguments->base.flags |= PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT;
1114811152
}
1114911153
break;
1115011154
}
@@ -11258,7 +11262,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for
1125811262

1125911263
parse_arguments_append(parser, arguments, argument);
1126011264
if (contains_keyword_splat) {
11261-
arguments->arguments->base.flags |= PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT;
11265+
arguments->arguments->base.flags |= PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT;
1126211266
}
1126311267
break;
1126411268
}

test/prism/snapshots/arrays.txt

Lines changed: 42 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/break.txt

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/constants.txt

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/dos_endings.txt

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/method_calls.txt

Lines changed: 9 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/methods.txt

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/next.txt

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)