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