Fix up new types for block arguments and splats in prism compiler

This commit is contained in:
Kevin Newton 2024-09-25 09:52:47 -04:00
parent cafd666adf
commit ecbc4a67c9
No known key found for this signature in database
GPG Key ID: 0EAD74C79EC73F26

View File

@ -1977,7 +1977,7 @@ pm_compile_index_operator_write_node(rb_iseq_t *iseq, const pm_index_operator_wr
int boff = (node->block == NULL ? 0 : 1); int boff = (node->block == NULL ? 0 : 1);
int flag = PM_NODE_TYPE_P(node->receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0; int flag = PM_NODE_TYPE_P(node->receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0;
struct rb_callinfo_kwarg *keywords = NULL; struct rb_callinfo_kwarg *keywords = NULL;
int argc = pm_setup_args(node->arguments, node->block, &flag, &keywords, iseq, ret, scope_node, node_location); int argc = pm_setup_args(node->arguments, (const pm_node_t *) node->block, &flag, &keywords, iseq, ret, scope_node, node_location);
if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) { if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) {
if (boff) { if (boff) {
@ -2084,7 +2084,7 @@ pm_compile_index_operator_write_node(rb_iseq_t *iseq, const pm_index_operator_wr
* []= method. * []= method.
*/ */
static void static void
pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_t *receiver, const pm_arguments_node_t *arguments, const pm_node_t *block, const pm_node_t *value, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_t *receiver, const pm_arguments_node_t *arguments, const pm_block_argument_node_t *block, const pm_node_t *value, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node)
{ {
const pm_node_location_t location = *node_location; const pm_node_location_t location = *node_location;
if (!popped) PUSH_INSN(ret, location, putnil); if (!popped) PUSH_INSN(ret, location, putnil);
@ -2093,7 +2093,7 @@ pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node,
int boff = (block == NULL ? 0 : 1); int boff = (block == NULL ? 0 : 1);
int flag = PM_NODE_TYPE_P(receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0; int flag = PM_NODE_TYPE_P(receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0;
struct rb_callinfo_kwarg *keywords = NULL; struct rb_callinfo_kwarg *keywords = NULL;
int argc = pm_setup_args(arguments, block, &flag, &keywords, iseq, ret, scope_node, node_location); int argc = pm_setup_args(arguments, (const pm_node_t *) block, &flag, &keywords, iseq, ret, scope_node, node_location);
if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) { if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) {
if (boff) { if (boff) {
@ -2648,8 +2648,7 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t
CHECK(pm_compile_pattern_match(iseq, scope_node, cast->requireds.nodes[index], ret, next_loop_label, in_single_pattern, in_alternation_pattern, false, base_index + 4)); CHECK(pm_compile_pattern_match(iseq, scope_node, cast->requireds.nodes[index], ret, next_loop_label, in_single_pattern, in_alternation_pattern, false, base_index + 4));
} }
RUBY_ASSERT(PM_NODE_TYPE_P(cast->left, PM_SPLAT_NODE)); const pm_splat_node_t *left = cast->left;
const pm_splat_node_t *left = (const pm_splat_node_t *) cast->left;
if (left->expression != NULL) { if (left->expression != NULL) {
PUSH_INSN1(ret, location, topn, INT2FIX(3)); PUSH_INSN1(ret, location, topn, INT2FIX(3));
@ -2896,7 +2895,7 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t
PUSH_INSN(ret, location, dup); PUSH_INSN(ret, location, dup);
CHECK(pm_compile_pattern_match(iseq, scope_node, cast->value, ret, match_failed_label, in_single_pattern, in_alternation_pattern, use_deconstructed_cache, base_index + 1)); CHECK(pm_compile_pattern_match(iseq, scope_node, cast->value, ret, match_failed_label, in_single_pattern, in_alternation_pattern, use_deconstructed_cache, base_index + 1));
CHECK(pm_compile_pattern(iseq, scope_node, cast->target, ret, matched_label, match_failed_label, in_single_pattern, in_alternation_pattern, false, base_index)); CHECK(pm_compile_pattern(iseq, scope_node, (const pm_node_t *) cast->target, ret, matched_label, match_failed_label, in_single_pattern, in_alternation_pattern, false, base_index));
PUSH_INSN(ret, location, putnil); PUSH_INSN(ret, location, putnil);
PUSH_LABEL(ret, match_failed_label); PUSH_LABEL(ret, match_failed_label);
@ -4595,7 +4594,7 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons
int flags = 0; int flags = 0;
struct rb_callinfo_kwarg *kwargs = NULL; struct rb_callinfo_kwarg *kwargs = NULL;
int argc = pm_setup_args(cast->arguments, cast->block, &flags, &kwargs, iseq, parents, scope_node, &location); int argc = pm_setup_args(cast->arguments, (const pm_node_t *) cast->block, &flags, &kwargs, iseq, parents, scope_node, &location);
if (state != NULL) { if (state != NULL) {
PUSH_INSN1(writes, location, topn, INT2FIX(argc + 1)); PUSH_INSN1(writes, location, topn, INT2FIX(argc + 1));