summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-09 13:04:26 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-01-09 13:04:26 +0900
commita4406bc89a46e9b732c1ce649b28c801e21be5c1 (patch)
tree83c4c023326380eb46ef5426bb756176db210837 /parse.y
parent37ed86fd3c798e298fad9db6e7df1f3f45e1e03b (diff)
Extract repeating NODE references as a local variable
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y12
1 files changed, 7 insertions, 5 deletions
diff --git a/parse.y b/parse.y
index 755d35e873..2ac575ca7f 100644
--- a/parse.y
+++ b/parse.y
@@ -6850,11 +6850,13 @@ assocs : assoc
assocs = tail;
}
else if (tail) {
- if (RNODE_LIST(assocs)->nd_head &&
- !RNODE_LIST(tail)->nd_head && nd_type_p(RNODE_LIST(tail)->nd_next, NODE_LIST) &&
- nd_type_p(RNODE_LIST(RNODE_LIST(tail)->nd_next)->nd_head, NODE_HASH)) {
- /* DSTAR */
- tail = RNODE_HASH(RNODE_LIST(RNODE_LIST(tail)->nd_next)->nd_head)->nd_head;
+ if (RNODE_LIST(assocs)->nd_head) {
+ NODE *n = RNODE_LIST(tail)->nd_next;
+ if (!RNODE_LIST(tail)->nd_head && nd_type_p(n, NODE_LIST) &&
+ nd_type_p((n = RNODE_LIST(n)->nd_head), NODE_HASH)) {
+ /* DSTAR */
+ tail = RNODE_HASH(n)->nd_head;
+ }
}
assocs = list_concat(assocs, tail);
}