diff options
| -rw-r--r-- | prism_compile.c | 12 | ||||
| -rw-r--r-- | test/.excludes-prism/TestAssignmentGen.rb | 1 |
2 files changed, 9 insertions, 4 deletions
diff --git a/prism_compile.c b/prism_compile.c index 7880e6d231..022305effe 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -4036,9 +4036,15 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons // // for i, j in []; end // - if (state != NULL) state->position--; + size_t before_position; + if (state != NULL) { + before_position = state->position; + state->position--; + } + pm_compile_multi_target_node(iseq, node, parents, writes, cleanup, scope_node, state); - if (state != NULL) state->position++; + if (state != NULL) state->position = before_position; + break; } default: @@ -4095,7 +4101,7 @@ pm_compile_multi_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR if (state == NULL) state = &target_state; size_t base_position = state->position; - size_t splat_position = has_rest ? 1 : 0; + size_t splat_position = (has_rest || has_posts) ? 1 : 0; // Next, we'll iterate through all of the leading targets. for (size_t index = 0; index < lefts->size; index++) { diff --git a/test/.excludes-prism/TestAssignmentGen.rb b/test/.excludes-prism/TestAssignmentGen.rb deleted file mode 100644 index 5f3bb12ef7..0000000000 --- a/test/.excludes-prism/TestAssignmentGen.rb +++ /dev/null @@ -1 +0,0 @@ -exclude(:test_assignment, "https://github.com/ruby/prism/issues/2370") |
