Skip to content

Commit

Permalink
Revise IO#wait arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
nobu committed Mar 5, 2021
1 parent 2ca2cff commit 0599f6d
Showing 1 changed file with 16 additions and 19 deletions.
35 changes: 16 additions & 19 deletions ext/io/wait/wait.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ wait_mode_sym(VALUE mode)
/*
* call-seq:
* io.wait(events, timeout) -> event mask or false.
* io.wait(timeout = nil, mode = :read) -> event mask or false (deprecated)
* io.wait(timeout = nil, mode = :read) -> event mask or false.
*
* Waits until the IO becomes ready for the specified events and returns the
* subset of events that become ready, or +false+ when times out.
Expand All @@ -222,34 +222,31 @@ wait_mode_sym(VALUE mode)
* Returns +true+ immediately when buffered data is available.
*
* Optional parameter +mode+ is one of +:read+, +:write+, or
* +:read_write+ (deprecated).
* +:read_write+.
*/

static VALUE
io_wait(int argc, VALUE *argv, VALUE io)
{
VALUE timeout = Qnil;
VALUE timeout = Qundef;
rb_io_event_t events = 0;

if (argc < 2 || (argc >= 2 && RB_SYMBOL_P(argv[1]))) {
if (argc > 0) {
timeout = argv[0];
}

for (int i = 1; i < argc; i += 1) {
events |= wait_mode_sym(argv[i]);
if (argc != 2 || (RB_SYRB_SYMBOL_P(argv[0]) || RB_SYMBOL_P(argv[1]))) {
for (int i = 0; i < argc; i += 1) {
if (RB_SYMBOL_P(argv[i])) {
events |= wait_mode_sym(argv[i]);
}
else if (timeout == Qundef) {
rb_time_interval(timeout = argv[i]);
}
else {
rb_raise(rb_eArgError, "timeout given more than once");
}
}
}
else if (argc == 2) {
else /* argc == 2 */ {
events = RB_NUM2UINT(argv[0]);

if (argv[1] != Qnil) {
timeout = argv[1];
}
}
else {
// TODO error
return Qnil;
timeout = argv[1];
}

if (events == 0) {
Expand Down

0 comments on commit 0599f6d

Please sign in to comment.