From 789b93d5d54b3a14f3c6068fb464c7863859133c Mon Sep 17 00:00:00 2001 From: Masataka Pocke Kuwabara Date: Sun, 12 Sep 2021 15:46:08 +0900 Subject: [PATCH] Fix ArgumentError when IO.console receives keyword args --- ext/io/console/console.c | 6 +++++- test/io/console/test_io_console.rb | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ext/io/console/console.c b/ext/io/console/console.c index 5dec1a4..6aa7e58 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -90,6 +90,10 @@ extern VALUE rb_scheduler_timeout(struct timeval *timeout); #define sys_fail_fptr(fptr) rb_sys_fail_str((fptr)->pathv) #ifndef HAVE_RB_F_SEND +#ifndef RB_PASS_CALLED_KEYWORDS +# define rb_funcallv_kw(recv, mid, arg, argv, kw_splat) rb_funcallv(recv, mid, arg, argv) +#endif + static ID id___send__; static VALUE @@ -104,7 +108,7 @@ rb_f_send(int argc, VALUE *argv, VALUE recv) else { vid = id___send__; } - return rb_funcallv(recv, vid, argc, argv); + return rb_funcallv_kw(recv, vid, argc, argv, RB_PASS_CALLED_KEYWORDS); } #endif diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb index 3d12b1f..3320241 100644 --- a/test/io/console/test_io_console.rb +++ b/test/io/console/test_io_console.rb @@ -401,6 +401,10 @@ def test_close assert_equal(["true"], run_pty("IO.console(:close); p IO.console(:tty?)")) end + def test_console_kw + assert_equal(["File"], run_pty("IO.console.close; p IO.console(:clone, freeze: true).class")) + end + def test_sync assert_equal(["true"], run_pty("p IO.console.sync")) end @@ -477,6 +481,10 @@ def test_close IO.console(:close) end + def test_console_kw + assert_kind_of(IO, IO.console(:clone, freeze: true)) + end + def test_sync assert(IO.console.sync, "console should be unbuffered") ensure