diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-01-09 13:04:26 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2024-01-09 13:04:26 +0900 |
commit | a4406bc89a46e9b732c1ce649b28c801e21be5c1 (patch) | |
tree | 83c4c023326380eb46ef5426bb756176db210837 /parse.y | |
parent | 37ed86fd3c798e298fad9db6e7df1f3f45e1e03b (diff) |
Extract repeating NODE references as a local variable
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -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); } |