summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xbenchmark/fib39.rb8
-rw-r--r--mrbgems/mruby-numeric-ext/src/numeric_ext.c2
-rw-r--r--src/array.c4
-rw-r--r--src/kernel.c2
-rw-r--r--src/object.c1
-rw-r--r--src/vm.c9
-rw-r--r--tasks/mruby_build_commands.rake4
-rw-r--r--test/t/kernel.rb10
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);
diff --git a/src/vm.c b/src/vm.c
index b81ae249e..24b2945dc 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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