diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2024-02-06 22:28:52 -0500 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2024-02-12 13:57:24 -0500 |
| commit | 2131d04f43d81469f6ab4215bef4644390e70ee5 (patch) | |
| tree | 56b2cc5368c994a358685241da63b1f82050b147 /test/ruby | |
| parent | 7af97dc71fd6790a3f4ffe47dcc5720b675f6b6b (diff) | |
YJIT: Add support for `**kwrest` parameters
Now that `...` uses `**kwrest` instead of regular splat and
ruby2keywords, we need to support these type of methods to
support `...` well.
Diffstat (limited to 'test/ruby')
| -rw-r--r-- | test/ruby/test_yjit.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/ruby/test_yjit.rb b/test/ruby/test_yjit.rb index bd513c60e6..33cb7b16cf 100644 --- a/test/ruby/test_yjit.rb +++ b/test/ruby/test_yjit.rb @@ -1532,6 +1532,34 @@ class TestYJIT < Test::Unit::TestCase RUBY end + def test_kwrest + assert_compiles(<<~RUBY, result: true, no_send_fallbacks: true) + def req_rest(r1:, **kwrest) = [r1, kwrest] + def opt_rest(r1: 1.succ, **kwrest) = [r1, kwrest] + def kwrest(**kwrest) = kwrest + + def calls + [ + [1, {}] == req_rest(r1: 1), + [1, {:r2=>2, :r3=>3}] == req_rest(r1: 1, r2: 2, r3: 3), + [1, {:r2=>2, :r3=>3}] == req_rest(r2: 2, r1:1, r3: 3), + [1, {:r2=>2, :r3=>3}] == req_rest(r2: 2, r3: 3, r1: 1), + + [2, {}] == opt_rest, + [2, { r2: 2, r3: 3 }] == opt_rest(r2: 2, r3: 3), + [0, { r2: 2, r3: 3 }] == opt_rest(r1: 0, r3: 3, r2: 2), + [0, { r2: 2, r3: 3 }] == opt_rest(r2: 2, r1: 0, r3: 3), + [1, { r2: 2, r3: 3 }] == opt_rest(r2: 2, r3: 3, r1: 1), + + {} == kwrest, + { r0: 88, r1: 99 } == kwrest(r0: 88, r1: 99), + ] + end + + calls.all? + RUBY + end + private def code_gc_helpers |
