diff --git a/mrbgems/mruby-print/mrblib/print.rb b/mrbgems/mruby-print/mrblib/print.rb index 627324620..503008eb1 100644 --- a/mrbgems/mruby-print/mrblib/print.rb +++ b/mrbgems/mruby-print/mrblib/print.rb @@ -12,24 +12,12 @@ module Kernel i = 0 len = args.size while i < len - __printstr args[i].inspect - __printstr "\n" + print args[i].inspect, "\n" i += 1 end args.__svalue end - # ISO 15.3.1.2.10 Kernel.print - # ISO 15.3.1.3.35 Kernel#print - def print(*args) - i = 0 - len = args.size - while i < len - __printstr args[i].to_s - i += 1 - end - end - # ISO 15.3.1.2.11 Kernel.puts # ISO 15.3.1.3.39 Kernel#puts def puts(*args) @@ -40,16 +28,15 @@ module Kernel if s.kind_of?(Array) puts(*s) else - s = s.to_s - __printstr s - __printstr "\n" if (s[-1] != "\n") + print s + print "\n" if (s[-1] != "\n") end i += 1 end - __printstr "\n" if len == 0 + print "\n" if len == 0 end def printf(*args) - __printstr(sprintf(*args)) + print(sprintf(*args)) end end diff --git a/mrbgems/mruby-print/src/print.c b/mrbgems/mruby-print/src/print.c index 29725d4bc..742224e4a 100644 --- a/mrbgems/mruby-print/src/print.c +++ b/mrbgems/mruby-print/src/print.c @@ -15,11 +15,9 @@ #endif #endif -static mrb_value -mrb_printstr(mrb_state *mrb, mrb_value self) +static void +printstr(mrb_state *mrb, mrb_value s) { - mrb_value s = mrb_get_arg1(mrb); - if (mrb_string_p(s)) { const char *p = RSTRING_PTR(s); mrb_int len = RSTRING_LEN(s); @@ -35,21 +33,33 @@ mrb_printstr(mrb_state *mrb, mrb_value self) utf16, (DWORD)wlen, &written, NULL); } mrb_free(mrb, utf16); + return; } - else #endif - { - fwrite(p, (size_t)len, 1, stdout); - } + fwrite(p, (size_t)len, 1, stdout); fflush(stdout); } +} + +// ISO 15.3.1.2.10 Kernel.print +// ISO 15.3.1.3.35 Kernel#print +static mrb_value +mrb_print(mrb_state *mrb, mrb_value self) +{ + mrb_int argc = mrb_get_argc(mrb); + const mrb_value *argv = mrb_get_argv(mrb); + + for (mrb_int i=0; ikernel_module, "__printstr", mrb_printstr, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, mrb->kernel_module, "print", mrb_print, MRB_ARGS_ANY()); /* 15.3.1.3.35 */ } void