Skip to content

Commit d80f10b

Browse files
authored
Merge branch 'master' into yjit-tailcall-fixup
2 parents 1cc47c4 + bbb7ab9 commit d80f10b

File tree

4 files changed

+15
-3
lines changed

4 files changed

+15
-3
lines changed

prism_compile.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,8 +2881,10 @@ pm_compile_destructured_param_locals(const pm_multi_target_node_t *node, st_tabl
28812881
const pm_node_t *left = node->lefts.nodes[index];
28822882

28832883
if (PM_NODE_TYPE_P(left, PM_REQUIRED_PARAMETER_NODE)) {
2884-
pm_insert_local_index(((const pm_required_parameter_node_t *) left)->name, local_index, index_lookup_table, local_table_for_iseq, scope_node);
2885-
local_index++;
2884+
if (!PM_NODE_FLAG_P(left, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
2885+
pm_insert_local_index(((const pm_required_parameter_node_t *) left)->name, local_index, index_lookup_table, local_table_for_iseq, scope_node);
2886+
local_index++;
2887+
}
28862888
} else {
28872889
RUBY_ASSERT(PM_NODE_TYPE_P(left, PM_MULTI_TARGET_NODE));
28882890
local_index = pm_compile_destructured_param_locals((const pm_multi_target_node_t *) left, index_lookup_table, local_table_for_iseq, scope_node, local_index);

test/ruby/test_compile_prism.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2203,6 +2203,11 @@ def test_BlockParametersNode
22032203
assert_prism_eval("Object.tap { || }")
22042204
assert_prism_eval("[1].map { |num| num }")
22052205
assert_prism_eval("[1].map { |a; b| b = 2; a + b}")
2206+
2207+
# Test block parameters with multiple _
2208+
assert_prism_eval(<<~RUBY)
2209+
[[1, 2, 3, 4, 5, 6]].map { |(_, _, _, _, _, _)| _ }
2210+
RUBY
22062211
end
22072212

22082213
def test_FowardingParameterNode

test/ruby/test_regexp.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2022,7 +2022,7 @@ def test_bug_20207 # [Bug #20207]
20222022

20232023
def test_bug_20212 # [Bug #20212]
20242024
regex = Regexp.new(
2025-
/\A((?=.*?[a-z])(?!.*--)[a-z\d]+[a-z\d-]*[a-z\d]+).((?=.*?[a-z])(?!.*--)[a-z\d]+[a-z\d-]*[a-z\d]+).((?=.*?[a-z])(?!.*--)[a-zd]+[a-zd-]*[a-zd]+).((?=.*?[a-z])(?!.*--)[a-zd]+[a-zd-]*[a-zd]+)\Z/x
2025+
/\A((?=.*?[a-z])(?!.*--)[a-z\d]+[a-z\d-]*[a-z\d]+).((?=.*?[a-z])(?!.*--)[a-z\d]+[a-z\d-]*[a-z\d]+).((?=.*?[a-z])(?!.*--)[a-z]+[a-z-]*[a-z]+).((?=.*?[a-z])(?!.*--)[a-z]+[a-z-]*[a-z]+)\Z/x
20262026
)
20272027
string = "www.google.com"
20282028
100.times.each { assert(regex.match?(string)) }

test/ruby/test_rubyoptions.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ class TestRubyOptions < Test::Unit::TestCase
1010
def self.rjit_enabled? = defined?(RubyVM::RJIT) && RubyVM::RJIT.enabled?
1111
def self.yjit_enabled? = defined?(RubyVM::YJIT.enabled?) && RubyVM::YJIT.enabled?
1212

13+
# Here we're defining our own RUBY_DESCRIPTION without "+PRISM". We do this
14+
# here so that the various tests that reference RUBY_DESCRIPTION don't have to
15+
# worry about it. The flag itself is tested in its own test.
16+
RUBY_DESCRIPTION = ::RUBY_DESCRIPTION.sub(/\+PRISM /, '')
17+
1318
NO_JIT_DESCRIPTION =
1419
if rjit_enabled?
1520
RUBY_DESCRIPTION.sub(/\+RJIT /, '')

0 commit comments

Comments
 (0)