From 965997d91b0bdd33d22582cee445aca007fb177d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 31 Dec 2022 10:39:05 +0900 Subject: [PATCH] mruby-io/io.c: implement `IO#flush` in C --- mrbgems/mruby-io/mrblib/io.rb | 6 ------ mrbgems/mruby-io/src/io.c | 8 ++++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index 27c6f554e..f40ae8d5f 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -74,12 +74,6 @@ class IO str end - def flush - # mruby-io always writes immediately (no output buffer). - raise IOError, "closed stream" if self.closed? - self - end - def hash # We must define IO#hash here because IO includes Enumerable and # Enumerable#hash will call IO#read() otherwise diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 0f0cbcde4..14444c34b 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1631,6 +1631,13 @@ io_readchar(mrb_state *mrb, mrb_value self) return io_bufread(mrb, buf, len); } +static mrb_value +io_flush(mrb_state *mrb, mrb_value self) +{ + io_get_open_fptr(mrb, self); + return self; +} + void mrb_init_io(mrb_state *mrb) { @@ -1664,6 +1671,7 @@ mrb_init_io(mrb_state *mrb) mrb_define_method(mrb, io, "close_on_exec=", io_set_close_on_exec, MRB_ARGS_REQ(1)); mrb_define_method(mrb, io, "close_on_exec?", io_close_on_exec_p, MRB_ARGS_NONE()); mrb_define_method(mrb, io, "closed?", io_closed, MRB_ARGS_NONE()); /* 15.2.20.5.2 */ + mrb_define_method(mrb, io, "flush", io_flush, MRB_ARGS_NONE()); /* 15.2.20.5.7 */ mrb_define_method(mrb, io, "ungetc", io_ungetc, MRB_ARGS_REQ(1)); mrb_define_method(mrb, io, "pos", io_pos, MRB_ARGS_NONE()); mrb_define_method(mrb, io, "pid", io_pid, MRB_ARGS_NONE());