diff options
| -rwxr-xr-x | benchmark/fib39.rb | 8 | ||||
| -rw-r--r-- | mrbgems/mruby-numeric-ext/src/numeric_ext.c | 2 | ||||
| -rw-r--r-- | src/array.c | 4 | ||||
| -rw-r--r-- | src/kernel.c | 2 | ||||
| -rw-r--r-- | src/object.c | 1 | ||||
| -rw-r--r-- | src/vm.c | 9 | ||||
| -rw-r--r-- | tasks/mruby_build_commands.rake | 4 | ||||
| -rw-r--r-- | test/t/kernel.rb | 10 |
8 files changed, 30 insertions, 10 deletions
diff --git a/benchmark/fib39.rb b/benchmark/fib39.rb new file mode 100755 index 000000000..d5565b779 --- /dev/null +++ b/benchmark/fib39.rb @@ -0,0 +1,8 @@ +# Fib 39 + +def fib n + return n if n < 2 + fib(n-2) + fib(n-1) +end + +puts fib(39) diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index 09904c1a9..f193fb531 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -10,7 +10,7 @@ mrb_int_chr(mrb_state *mrb, mrb_value x) chr = mrb_fixnum(x); if (chr >= (1 << CHAR_BIT)) { - mrb_raisef(mrb, E_RANGE_ERROR, "%" PRIdMRB_INT " out of char range", chr); + mrb_raisef(mrb, E_RANGE_ERROR, "%S out of char range", x); } c = (char)chr; diff --git a/src/array.c b/src/array.c index 88f56f6b4..b1f05b450 100644 --- a/src/array.c +++ b/src/array.c @@ -38,11 +38,11 @@ ary_new_capa(mrb_state *mrb, mrb_int capa) mrb_int blen; if (capa > ARY_MAX_SIZE) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "ary size too big"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big"); } blen = capa * sizeof(mrb_value) ; if (blen < capa) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "ary size too big"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big"); } a = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class); diff --git a/src/kernel.c b/src/kernel.c index f14a94b3a..54c90dfc0 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -108,7 +108,7 @@ mrb_obj_not_equal_m(mrb_state *mrb, mrb_value self) mrb_bool eql_p; mrb_get_args(mrb, "o", &arg); - eql_p = mrb_obj_equal(mrb, self, arg); + eql_p = mrb_equal(mrb, self, arg); return mrb_bool_value(!eql_p); } diff --git a/src/object.c b/src/object.c index bc59b615e..23786e859 100644 --- a/src/object.c +++ b/src/object.c @@ -440,6 +440,7 @@ mrb_any_to_s(mrb_state *mrb, mrb_value obj) mrb_str_buf_cat(mrb, str, "#<", 2); mrb_str_cat2(mrb, str, cname); + mrb_str_cat(mrb, str, ":", 1); mrb_str_concat(mrb, str, mrb_ptr_to_str(mrb, mrb_voidp(obj))); mrb_str_buf_cat(mrb, str, ">", 1); @@ -55,6 +55,9 @@ The value below allows about 60000 recursive calls in the simplest case. */ # define DEBUG(x) #endif +#define TO_STR(x) TO_STR_(x) +#define TO_STR_(x) #x + static inline void stack_clear(mrb_value *from, size_t count) { @@ -133,9 +136,9 @@ stack_extend(mrb_state *mrb, int room, int keep) mrb->stend = mrb->stbase + size; envadjust(mrb, oldbase, mrb->stbase); /* Raise an exception if the new stack size will be too large, - to prevent infinite recursion. However, do this only after resizing the stack, so mrb_raisef has stack space to work with. */ + to prevent infinite recursion. However, do this only after resizing the stack, so mrb_raise has stack space to work with. */ if (size > MRB_STACK_MAX) { - mrb_raisef(mrb, E_RUNTIME_ERROR, "stack level too deep. (limit=%S)", mrb_fixnum_value(MRB_STACK_MAX)); + mrb_raise(mrb, E_RUNTIME_ERROR, "stack level too deep. (limit=" TO_STR(MRB_STACK_MAX) ")"); } } @@ -275,7 +278,7 @@ mrb_funcall(mrb_state *mrb, mrb_value self, const char *name, int argc, ...) int i; if (argc > MRB_FUNCALL_ARGC_MAX) { - mrb_raisef(mrb, E_ARGUMENT_ERROR, "Too long arguments. (limit=%S)", mrb_fixnum_value(MRB_FUNCALL_ARGC_MAX)); + mrb_raise(mrb, E_ARGUMENT_ERROR, "Too long arguments. (limit=" TO_STR(MRB_FUNCALL_ARGC_MAX) ")"); } va_start(ap, argc); diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 0effa648b..b647ccf98 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -249,11 +249,9 @@ module MRuby def run(out, infiles, funcname) @command ||= @build.mrbcfile - commandline = "#{filename @command} #{@compile_options % {:funcname => funcname}}" - IO.popen(commandline, 'r+') do |io| + IO.popen("#{filename @command} #{@compile_options % {:funcname => funcname}}", 'r+') do |io| [infiles].flatten.each do |f| _pp "MRBC", f.relative_path, nil, :indent => 2 - log "#{commandline} ## #{f}" io.write IO.read(f) end io.close_write diff --git a/test/t/kernel.rb b/test/t/kernel.rb index 5caa3d7ac..aea687646 100644 --- a/test/t/kernel.rb +++ b/test/t/kernel.rb @@ -349,3 +349,13 @@ end assert('Kernel#to_s', '15.3.1.3.46') do to_s.class == String end + +assert('Kernel#!=') do + str1 = "hello" + str2 = str1 + str3 = "world" + + (str1[1] != 'e') == false and + (str1 != str3) == true and + (str2 != str1) == false +end |
