diff options
author | Alan Wu <[email protected]> | 2024-08-28 12:41:56 -0400 |
---|---|---|
committer | Alan Wu <[email protected]> | 2024-08-28 13:34:37 -0400 |
commit | 7c9bcdf3973300aaed107f055d7cd4062799bea4 () | |
tree | 9ee105f76d5cbb87946b194d2d9568ef88dc2510 /prism_compile.c | |
parent | ce6b0c44256fc10509263d92959150fcbaa63e21 (diff) |
[PRISM] Improve `dup_rest` optimization targeting
Part of implementing 3de20efc308cccc38bf9dacfffca6c626d039a06 in prism_compile.c. Down to 2 failures from 30 failures in test/ruby/test_allocation.rb.
Notes: Merged: https://.com/ruby/ruby/pull/11479
-rw-r--r-- | prism_compile.c | 39 |
1 files changed, 27 insertions, 12 deletions
@@ -1818,25 +1818,40 @@ pm_setup_args(const pm_arguments_node_t *arguments_node, const pm_node_t *block, VALUE dup_rest = Qtrue; if (arguments_node != NULL) { - if (arguments_node->arguments.size >= 2 && PM_NODE_TYPE_P(arguments_node->arguments.nodes[0], PM_SPLAT_NODE) && PM_NODE_TYPE_P(arguments_node->arguments.nodes[1], PM_KEYWORD_HASH_NODE)) { dup_rest = Qfalse; - const pm_keyword_hash_node_t *keyword_arg = (const pm_keyword_hash_node_t *) arguments_node->arguments.nodes[1]; - const pm_node_list_t *elements = &keyword_arg->elements; - if (PM_NODE_TYPE_P(elements->nodes[0], PM_ASSOC_NODE)) { - const pm_assoc_node_t *assoc = (const pm_assoc_node_t *) elements->nodes[0]; - if (pm_setup_args_dup_rest_p(assoc->value)) { - dup_rest = Qtrue; } - } - if (PM_NODE_TYPE_P(elements->nodes[0], PM_ASSOC_SPLAT_NODE)) { - const pm_assoc_splat_node_t *assoc = (const pm_assoc_splat_node_t *) elements->nodes[0]; - if (assoc->value && pm_setup_args_dup_rest_p(assoc->value)) { - dup_rest = Qtrue; } } } |