diff options
Diffstat (limited to 'mrbgems/mruby-io')
| -rw-r--r-- | mrbgems/mruby-io/mrblib/file.rb | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-io/mrblib/io.rb | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/file.c | 64 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/file_test.c | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/io.c | 74 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/io.rb | 5 |
6 files changed, 82 insertions, 73 deletions
diff --git a/mrbgems/mruby-io/mrblib/file.rb b/mrbgems/mruby-io/mrblib/file.rb index aa73252e1..9398acef6 100644 --- a/mrbgems/mruby-io/mrblib/file.rb +++ b/mrbgems/mruby-io/mrblib/file.rb @@ -2,7 +2,7 @@ class File < IO attr_accessor :path def initialize(fd_or_path, mode = "r", perm = 0666) - if fd_or_path.kind_of? Fixnum + if fd_or_path.kind_of? Integer super(fd_or_path, mode) else @path = fd_or_path diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index e597db886..034f88529 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -186,7 +186,7 @@ class IO def read(length = nil, outbuf = "") unless length.nil? - unless length.is_a? Fixnum + unless length.is_a? Integer raise TypeError.new "can't convert #{length.class} into Integer" end if length < 0 @@ -229,7 +229,7 @@ class IO case arg when String rs = arg - when Fixnum + when Integer rs = "\n" limit = arg else diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index 53ed4b69d..d272cab7d 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -399,7 +399,7 @@ mrb_file_mtime(mrb_state *mrb, mrb_value self) if (mrb_fstat(fd, &st) == -1) return mrb_false_value(); - return mrb_fixnum_value((mrb_int)st.st_mtime); + return mrb_int_value(mrb, (mrb_int)st.st_mtime); } static mrb_value @@ -448,8 +448,8 @@ mrb_file_size(mrb_state *mrb, mrb_value self) } if (st.st_size > MRB_INT_MAX) { -#ifdef MRB_WITHOUT_FLOAT - mrb_raise(mrb, E_RUNTIME_ERROR, "File#size too large for MRB_WITHOUT_FLOAT"); +#ifdef MRB_NO_FLOAT + mrb_raise(mrb, E_RUNTIME_ERROR, "File#size too large for MRB_NO_FLOAT"); #else return mrb_float_value(mrb, (mrb_float)st.st_size); #endif @@ -614,36 +614,36 @@ mrb_init_file(mrb_state *mrb) mrb_define_method(mrb, file, "size", mrb_file_size, MRB_ARGS_NONE()); mrb_define_method(mrb, file, "truncate", mrb_file_truncate, MRB_ARGS_REQ(1)); - cnst = mrb_define_module_under(mrb, file, "Constants"); - mrb_define_const(mrb, cnst, "LOCK_SH", mrb_fixnum_value(LOCK_SH)); - mrb_define_const(mrb, cnst, "LOCK_EX", mrb_fixnum_value(LOCK_EX)); - mrb_define_const(mrb, cnst, "LOCK_UN", mrb_fixnum_value(LOCK_UN)); - mrb_define_const(mrb, cnst, "LOCK_NB", mrb_fixnum_value(LOCK_NB)); - mrb_define_const(mrb, cnst, "SEPARATOR", mrb_str_new_cstr(mrb, FILE_SEPARATOR)); - mrb_define_const(mrb, cnst, "PATH_SEPARATOR", mrb_str_new_cstr(mrb, PATH_SEPARATOR)); + cnst = mrb_define_module_under_id(mrb, file, MRB_SYM(Constants)); + mrb_define_const_id(mrb, cnst, MRB_SYM(LOCK_SH), mrb_fixnum_value(LOCK_SH)); + mrb_define_const_id(mrb, cnst, MRB_SYM(LOCK_EX), mrb_fixnum_value(LOCK_EX)); + mrb_define_const_id(mrb, cnst, MRB_SYM(LOCK_UN), mrb_fixnum_value(LOCK_UN)); + mrb_define_const_id(mrb, cnst, MRB_SYM(LOCK_NB), mrb_fixnum_value(LOCK_NB)); + mrb_define_const_id(mrb, cnst, MRB_SYM(SEPARATOR), mrb_str_new_cstr(mrb, FILE_SEPARATOR)); + mrb_define_const_id(mrb, cnst, MRB_SYM(PATH_SEPARATOR), mrb_str_new_cstr(mrb, PATH_SEPARATOR)); #if defined(_WIN32) || defined(_WIN64) - mrb_define_const(mrb, cnst, "ALT_SEPARATOR", mrb_str_new_cstr(mrb, FILE_ALT_SEPARATOR)); + mrb_define_const_id(mrb, cnst, MRB_SYM(ALT_SEPARATOR), mrb_str_new_cstr(mrb, FILE_ALT_SEPARATOR)); #else - mrb_define_const(mrb, cnst, "ALT_SEPARATOR", mrb_nil_value()); + mrb_define_const_id(mrb, cnst, MRB_SYM(ALT_SEPARATOR), mrb_nil_value()); #endif - mrb_define_const(mrb, cnst, "NULL", mrb_str_new_cstr(mrb, NULL_FILE)); - - mrb_define_const(mrb, cnst, "RDONLY", mrb_fixnum_value(MRB_O_RDONLY)); - mrb_define_const(mrb, cnst, "WRONLY", mrb_fixnum_value(MRB_O_WRONLY)); - mrb_define_const(mrb, cnst, "RDWR", mrb_fixnum_value(MRB_O_RDWR)); - mrb_define_const(mrb, cnst, "APPEND", mrb_fixnum_value(MRB_O_APPEND)); - mrb_define_const(mrb, cnst, "CREAT", mrb_fixnum_value(MRB_O_CREAT)); - mrb_define_const(mrb, cnst, "EXCL", mrb_fixnum_value(MRB_O_EXCL)); - mrb_define_const(mrb, cnst, "TRUNC", mrb_fixnum_value(MRB_O_TRUNC)); - mrb_define_const(mrb, cnst, "NONBLOCK", mrb_fixnum_value(MRB_O_NONBLOCK)); - mrb_define_const(mrb, cnst, "NOCTTY", mrb_fixnum_value(MRB_O_NOCTTY)); - mrb_define_const(mrb, cnst, "BINARY", mrb_fixnum_value(MRB_O_BINARY)); - mrb_define_const(mrb, cnst, "SHARE_DELETE", mrb_fixnum_value(MRB_O_SHARE_DELETE)); - mrb_define_const(mrb, cnst, "SYNC", mrb_fixnum_value(MRB_O_SYNC)); - mrb_define_const(mrb, cnst, "DSYNC", mrb_fixnum_value(MRB_O_DSYNC)); - mrb_define_const(mrb, cnst, "RSYNC", mrb_fixnum_value(MRB_O_RSYNC)); - mrb_define_const(mrb, cnst, "NOFOLLOW", mrb_fixnum_value(MRB_O_NOFOLLOW)); - mrb_define_const(mrb, cnst, "NOATIME", mrb_fixnum_value(MRB_O_NOATIME)); - mrb_define_const(mrb, cnst, "DIRECT", mrb_fixnum_value(MRB_O_DIRECT)); - mrb_define_const(mrb, cnst, "TMPFILE", mrb_fixnum_value(MRB_O_TMPFILE)); + mrb_define_const_id(mrb, cnst, MRB_SYM(NULL), mrb_str_new_cstr(mrb, NULL_FILE)); + + mrb_define_const_id(mrb, cnst, MRB_SYM(RDONLY), mrb_fixnum_value(MRB_O_RDONLY)); + mrb_define_const_id(mrb, cnst, MRB_SYM(WRONLY), mrb_fixnum_value(MRB_O_WRONLY)); + mrb_define_const_id(mrb, cnst, MRB_SYM(RDWR), mrb_fixnum_value(MRB_O_RDWR)); + mrb_define_const_id(mrb, cnst, MRB_SYM(APPEND), mrb_fixnum_value(MRB_O_APPEND)); + mrb_define_const_id(mrb, cnst, MRB_SYM(CREAT), mrb_fixnum_value(MRB_O_CREAT)); + mrb_define_const_id(mrb, cnst, MRB_SYM(EXCL), mrb_fixnum_value(MRB_O_EXCL)); + mrb_define_const_id(mrb, cnst, MRB_SYM(TRUNC), mrb_fixnum_value(MRB_O_TRUNC)); + mrb_define_const_id(mrb, cnst, MRB_SYM(NONBLOCK), mrb_fixnum_value(MRB_O_NONBLOCK)); + mrb_define_const_id(mrb, cnst, MRB_SYM(NOCTTY), mrb_fixnum_value(MRB_O_NOCTTY)); + mrb_define_const_id(mrb, cnst, MRB_SYM(BINARY), mrb_fixnum_value(MRB_O_BINARY)); + mrb_define_const_id(mrb, cnst, MRB_SYM(SHARE_DELETE), mrb_fixnum_value(MRB_O_SHARE_DELETE)); + mrb_define_const_id(mrb, cnst, MRB_SYM(SYNC), mrb_fixnum_value(MRB_O_SYNC)); + mrb_define_const_id(mrb, cnst, MRB_SYM(DSYNC), mrb_fixnum_value(MRB_O_DSYNC)); + mrb_define_const_id(mrb, cnst, MRB_SYM(RSYNC), mrb_fixnum_value(MRB_O_RSYNC)); + mrb_define_const_id(mrb, cnst, MRB_SYM(NOFOLLOW), mrb_fixnum_value(MRB_O_NOFOLLOW)); + mrb_define_const_id(mrb, cnst, MRB_SYM(NOATIME), mrb_fixnum_value(MRB_O_NOATIME)); + mrb_define_const_id(mrb, cnst, MRB_SYM(DIRECT), mrb_fixnum_value(MRB_O_DIRECT)); + mrb_define_const_id(mrb, cnst, MRB_SYM(TMPFILE), mrb_fixnum_value(MRB_O_TMPFILE)); } diff --git a/mrbgems/mruby-io/src/file_test.c b/mrbgems/mruby-io/src/file_test.c index b7a28f4d3..f1762369a 100644 --- a/mrbgems/mruby-io/src/file_test.c +++ b/mrbgems/mruby-io/src/file_test.c @@ -66,11 +66,13 @@ mrb_stat(mrb_state *mrb, mrb_value obj, struct stat *st) return mrb_stat0(mrb, obj, st, 0); } +#ifdef S_ISLNK static int mrb_lstat(mrb_state *mrb, mrb_value obj, struct stat *st) { return mrb_stat0(mrb, obj, st, 1); } +#endif /* * Document-method: directory? @@ -302,7 +304,7 @@ mrb_filetest_s_size(mrb_state *mrb, mrb_value klass) if (mrb_stat(mrb, obj, &st) < 0) mrb_sys_fail(mrb, "mrb_stat"); - return mrb_fixnum_value(st.st_size); + return mrb_int_value(mrb, st.st_size); } /* @@ -324,7 +326,7 @@ mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass) if (st.st_size == 0) return mrb_nil_value(); - return mrb_fixnum_value(st.st_size); + return mrb_int_value(mrb, st.st_size); } void diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 2c9cba84a..0fa0f34b1 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -102,14 +102,14 @@ io_set_process_status(mrb_state *mrb, pid_t pid, int status) mrb_value v; c_status = NULL; - if (mrb_class_defined(mrb, "Process")) { - c_process = mrb_module_get(mrb, "Process"); - if (mrb_const_defined(mrb, mrb_obj_value(c_process), mrb_intern_cstr(mrb, "Status"))) { - c_status = mrb_class_get_under(mrb, c_process, "Status"); + if (mrb_class_defined_id(mrb, MRB_SYM(Process))) { + c_process = mrb_module_get_id(mrb, MRB_SYM(Process)); + if (mrb_const_defined(mrb, mrb_obj_value(c_process), MRB_SYM(Status))) { + c_status = mrb_class_get_under_id(mrb, c_process, MRB_SYM(Status)); } } if (c_status != NULL) { - v = mrb_funcall(mrb, mrb_obj_value(c_status), "new", 2, mrb_fixnum_value(pid), mrb_fixnum_value(status)); + v = mrb_funcall_id(mrb, mrb_obj_value(c_status), MRB_SYM(new), 2, mrb_fixnum_value(pid), mrb_fixnum_value(status)); } else { v = mrb_fixnum_value(WEXITSTATUS(status)); } @@ -327,19 +327,16 @@ mrb_io_alloc(mrb_state *mrb) #endif static int -option_to_fd(mrb_state *mrb, mrb_value hash, const char *key) +option_to_fd(mrb_state *mrb, mrb_value v) { - mrb_value opt; + if (mrb_undef_p(v)) return -1; + if (mrb_nil_p(v)) return -1; - if (!mrb_hash_p(hash)) return -1; - opt = mrb_hash_fetch(mrb, hash, mrb_symbol_value(mrb_intern_static(mrb, key, strlen(key))), mrb_nil_value()); - if (mrb_nil_p(opt)) return -1; - - switch (mrb_type(opt)) { + switch (mrb_type(v)) { case MRB_TT_DATA: /* IO */ - return mrb_io_fileno(mrb, opt); - case MRB_TT_FIXNUM: - return (int)mrb_fixnum(opt); + return mrb_io_fileno(mrb, v); + case MRB_TT_INTEGER: + return (int)mrb_integer(v); default: mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action"); break; @@ -353,8 +350,14 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) { mrb_value cmd, io; mrb_value mode = mrb_str_new_cstr(mrb, "r"); - mrb_value opt = mrb_hash_new(mrb); - + mrb_value kv[3]; + mrb_sym knames[3] = {MRB_SYM(in), MRB_SYM(out), MRB_SYM(err)}; + const mrb_kwargs kw = { + 3, 0, + knames, + kv, + NULL, + }; struct mrb_io *fptr; const char *pname; int pid = 0, flags; @@ -366,23 +369,22 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) HANDLE ofd[2]; int doexec; - int opt_in, opt_out, opt_err; ifd[0] = INVALID_HANDLE_VALUE; ifd[1] = INVALID_HANDLE_VALUE; ofd[0] = INVALID_HANDLE_VALUE; ofd[1] = INVALID_HANDLE_VALUE; - mrb_get_args(mrb, "S|oH", &cmd, &mode, &opt); + mrb_get_args(mrb, "S|o:", &cmd, &mode, &kw, &kv); io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type)); pname = RSTRING_CSTR(mrb, cmd); flags = mrb_io_mode_to_flags(mrb, mode); doexec = (strcmp("-", pname) != 0); - opt_in = option_to_fd(mrb, opt, "in"); - opt_out = option_to_fd(mrb, opt, "out"); - opt_err = option_to_fd(mrb, opt, "err"); + option_to_fd(mrb, kv[0]); + option_to_fd(mrb, kv[1]); + option_to_fd(mrb, kv[2]); saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; @@ -458,8 +460,14 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) { mrb_value cmd, io, result; mrb_value mode = mrb_str_new_cstr(mrb, "r"); - mrb_value opt = mrb_hash_new(mrb); - + mrb_value kv[3]; + mrb_sym knames[3] = {MRB_SYM(in), MRB_SYM(out), MRB_SYM(err)}; + const mrb_kwargs kw = { + 3, 0, + knames, + kv, + NULL, + }; struct mrb_io *fptr; const char *pname; int pid, flags, fd, write_fd = -1; @@ -469,16 +477,16 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) int saved_errno; int opt_in, opt_out, opt_err; - mrb_get_args(mrb, "S|oH", &cmd, &mode, &opt); + mrb_get_args(mrb, "S|o:", &cmd, &mode, &kw); io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type)); pname = RSTRING_CSTR(mrb, cmd); flags = mrb_io_mode_to_flags(mrb, mode); doexec = (strcmp("-", pname) != 0); - opt_in = option_to_fd(mrb, opt, "in"); - opt_out = option_to_fd(mrb, opt, "out"); - opt_err = option_to_fd(mrb, opt, "err"); + opt_in = option_to_fd(mrb, kv[0]); + opt_out = option_to_fd(mrb, kv[1]); + opt_err = option_to_fd(mrb, kv[2]); if (OPEN_READABLE_P(flags)) { if (pipe(pr) == -1) { @@ -973,10 +981,10 @@ mrb_io_sysseek(mrb_state *mrb, mrb_value io) mrb_sys_fail(mrb, "sysseek"); } if (pos > MRB_INT_MAX) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)pos); #else - mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_WITHOUT_FLOAT"); + mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_NO_FLOAT"); #endif } else { return mrb_fixnum_value(pos); @@ -1076,12 +1084,12 @@ time2timeval(mrb_state *mrb, mrb_value time) struct timeval t = { 0, 0 }; switch (mrb_type(time)) { - case MRB_TT_FIXNUM: - t.tv_sec = (ftime_t)mrb_fixnum(time); + case MRB_TT_INTEGER: + t.tv_sec = (ftime_t)mrb_integer(time); t.tv_usec = 0; break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: t.tv_sec = (ftime_t)mrb_float(time); t.tv_usec = (fsuseconds_t)((mrb_float(time) - t.tv_sec) * 1000000.0); diff --git a/mrbgems/mruby-io/test/io.rb b/mrbgems/mruby-io/test/io.rb index 2088a61e3..76ae13a58 100644 --- a/mrbgems/mruby-io/test/io.rb +++ b/mrbgems/mruby-io/test/io.rb @@ -7,7 +7,7 @@ $cr, $crlf, $cmd = MRubyIOTestUtil.win? ? [1, "\r\n", "cmd /c "] : [0, "\n", ""] def assert_io_open(meth) assert "assert_io_open" do fd = IO.sysopen($mrbtest_io_rfname) - assert_equal Fixnum, fd.class + assert_equal Integer, fd.class io1 = IO.__send__(meth, fd) begin assert_equal IO, io1.class @@ -27,7 +27,6 @@ def assert_io_open(meth) assert_raise(RuntimeError) { IO.__send__(meth, 1023) } # For Windows assert_raise(RuntimeError) { IO.__send__(meth, 1 << 26) } - assert_raise(RuntimeError) { IO.__send__(meth, 1 << 32) } if (1 << 32).kind_of?(Integer) end end @@ -433,7 +432,7 @@ assert('IO.popen') do $? = nil io = IO.popen("#{$cmd}echo mruby-io") assert_true io.close_on_exec? - assert_equal Fixnum, io.pid.class + assert_equal Integer, io.pid.class out = io.read assert_equal out.class, String |
