summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2013-06-15 03:53:50 +0800
committerDaniel Bovensiepen <[email protected]>2013-06-15 03:53:50 +0800
commit373122a299ebec890cfaa95ee41fde221ac6a543 (patch)
tree346e79bb8a30a4e0b4102babf7dd9407beb36979 /mrbgems
parentad07d41bd1b42fe7d23e04361839f511c5f9cd7f (diff)
parent961cd408a86580c4d428f56153da00fd46738e35 (diff)
downloadmruby-373122a299ebec890cfaa95ee41fde221ac6a543.tar.gz
mruby-373122a299ebec890cfaa95ee41fde221ac6a543.zip
Merge upstream
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/default.gembox6
-rw-r--r--mrbgems/mruby-array-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-bin-mirb/mrbgem.rake5
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c35
-rw-r--r--mrbgems/mruby-bin-mruby/mrbgem.rake2
-rw-r--r--mrbgems/mruby-enum-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-eval/mrbgem.rake2
-rw-r--r--mrbgems/mruby-fiber/mrbgem.rake2
-rw-r--r--mrbgems/mruby-hash-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-math/mrbgem.rake2
-rw-r--r--mrbgems/mruby-math/src/math.c22
-rw-r--r--mrbgems/mruby-numeric-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-object-ext/mrbgem.rake4
-rw-r--r--mrbgems/mruby-object-ext/src/object.c108
-rw-r--r--mrbgems/mruby-object-ext/test/nil.rb11
-rw-r--r--mrbgems/mruby-object-ext/test/object.rb9
-rw-r--r--mrbgems/mruby-objectspace/mrbgem.rake2
-rw-r--r--mrbgems/mruby-print/mrbgem.rake2
-rw-r--r--mrbgems/mruby-proc-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-random/mrbgem.rake2
-rw-r--r--mrbgems/mruby-random/src/random.c31
-rw-r--r--mrbgems/mruby-range-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-range-ext/src/range.c4
-rw-r--r--mrbgems/mruby-sprintf/mrbgem.rake2
-rw-r--r--mrbgems/mruby-sprintf/src/sprintf.c4
-rw-r--r--mrbgems/mruby-string-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-struct/mrbgem.rake2
-rw-r--r--mrbgems/mruby-struct/src/struct.c5
-rw-r--r--mrbgems/mruby-symbol-ext/mrbgem.rake2
-rw-r--r--mrbgems/mruby-time/mrbgem.rake2
-rw-r--r--mrbgems/mruby-time/src/time.c2
-rw-r--r--mrbgems/mruby-toplevel-ext/mrbgem.rake4
-rw-r--r--mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb11
-rw-r--r--mrbgems/mruby-toplevel-ext/test/toplevel.rb24
34 files changed, 263 insertions, 58 deletions
diff --git a/mrbgems/default.gembox b/mrbgems/default.gembox
index 1c6732d48..33ee99be0 100644
--- a/mrbgems/default.gembox
+++ b/mrbgems/default.gembox
@@ -41,12 +41,18 @@ MRuby::GemBox.new do |conf|
# Use Random class
conf.gem :core => "mruby-random"
+ # Use extensional Object class
+ conf.gem :core => "mruby-object-ext"
+
# Use ObjectSpace class
conf.gem :core => "mruby-objectspace"
# Use Fiber class
conf.gem :core => "mruby-fiber"
+ # Use extended toplevel object (main) methods
+ conf.gem :core => "mruby-toplevel-ext"
+
# Generate mirb command
conf.gem :core => "mruby-bin-mirb"
diff --git a/mrbgems/mruby-array-ext/mrbgem.rake b/mrbgems/mruby-array-ext/mrbgem.rake
index 38e0ad267..18f92ad65 100644
--- a/mrbgems/mruby-array-ext/mrbgem.rake
+++ b/mrbgems/mruby-array-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-array-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-bin-mirb/mrbgem.rake b/mrbgems/mruby-bin-mirb/mrbgem.rake
index fd0b20254..846a3b077 100644
--- a/mrbgems/mruby-bin-mirb/mrbgem.rake
+++ b/mrbgems/mruby-bin-mirb/mrbgem.rake
@@ -1,5 +1,8 @@
MRuby::Gem::Specification.new('mruby-bin-mirb') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
+
+ spec.linker.libraries << 'readline' if spec.cc.defines.include? "ENABLE_READLINE"
+
spec.bins = %w(mirb)
end
diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
index 5e3e123c6..50556e092 100644
--- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
+++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
@@ -15,11 +15,19 @@
#include <mruby/data.h>
#include <mruby/compile.h>
#ifdef ENABLE_READLINE
+#include <limits.h>
#include <readline/readline.h>
#include <readline/history.h>
#endif
#include <mruby/string.h>
+
+#ifdef ENABLE_READLINE
+static const char *history_file_name = ".mirb_history";
+char history_path[PATH_MAX];
+#endif
+
+
static void
p(mrb_state *mrb, mrb_value obj, int prompt)
{
@@ -38,7 +46,7 @@ p(mrb_state *mrb, mrb_value obj, int prompt)
/* Guess if the user might want to enter more
* or if he wants an evaluation of his code now */
-int
+mrb_bool
is_code_block_open(struct mrb_parser_state *parser)
{
int code_block_open = FALSE;
@@ -236,6 +244,8 @@ main(int argc, char **argv)
#ifndef ENABLE_READLINE
int last_char;
int char_index;
+#else
+ char *home = NULL;
#endif
mrbc_context *cxt;
struct mrb_parser_state *parser;
@@ -268,6 +278,23 @@ main(int argc, char **argv)
if (args.verbose) cxt->dump_result = 1;
ai = mrb_gc_arena_save(mrb);
+
+#ifdef ENABLE_READLINE
+ using_history();
+ home = getenv("HOME");
+#ifdef _WIN32
+ if (!home)
+ home = getenv("USERPROFILE");
+#endif
+ if (home) {
+ strcpy(history_path, home);
+ strcat(history_path, "/");
+ strcat(history_path, history_file_name);
+ read_history(history_path);
+ }
+#endif
+
+
while (TRUE) {
#ifndef ENABLE_READLINE
print_cmdline(code_block_open);
@@ -346,7 +373,7 @@ main(int argc, char **argv)
}
else {
/* no */
- if (!mrb_respond_to(mrb,result,mrb_intern(mrb,"inspect"))){
+ if (!mrb_respond_to(mrb, result, mrb_intern2(mrb, "inspect", 7))){
result = mrb_any_to_s(mrb,result);
}
p(mrb, result, 1);
@@ -361,5 +388,9 @@ main(int argc, char **argv)
mrbc_context_free(mrb, cxt);
mrb_close(mrb);
+#ifdef ENABLE_READLINE
+ write_history(history_path);
+#endif
+
return 0;
}
diff --git a/mrbgems/mruby-bin-mruby/mrbgem.rake b/mrbgems/mruby-bin-mruby/mrbgem.rake
index 2e173a291..08ba89855 100644
--- a/mrbgems/mruby-bin-mruby/mrbgem.rake
+++ b/mrbgems/mruby-bin-mruby/mrbgem.rake
@@ -1,5 +1,5 @@
MRuby::Gem::Specification.new('mruby-bin-mruby') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
spec.bins = %w(mruby)
end
diff --git a/mrbgems/mruby-enum-ext/mrbgem.rake b/mrbgems/mruby-enum-ext/mrbgem.rake
index 758d298dc..e054f4318 100644
--- a/mrbgems/mruby-enum-ext/mrbgem.rake
+++ b/mrbgems/mruby-enum-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-enum-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-eval/mrbgem.rake b/mrbgems/mruby-eval/mrbgem.rake
index f80cf1b9e..217a9e604 100644
--- a/mrbgems/mruby-eval/mrbgem.rake
+++ b/mrbgems/mruby-eval/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-eval') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-fiber/mrbgem.rake b/mrbgems/mruby-fiber/mrbgem.rake
index cb258adcb..25009c47f 100644
--- a/mrbgems/mruby-fiber/mrbgem.rake
+++ b/mrbgems/mruby-fiber/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-fiber') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-hash-ext/mrbgem.rake b/mrbgems/mruby-hash-ext/mrbgem.rake
index 3163c8c88..25d4f8e61 100644
--- a/mrbgems/mruby-hash-ext/mrbgem.rake
+++ b/mrbgems/mruby-hash-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-hash-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-math/mrbgem.rake b/mrbgems/mruby-math/mrbgem.rake
index 4b0fa40fd..75d3d1fff 100644
--- a/mrbgems/mruby-math/mrbgem.rake
+++ b/mrbgems/mruby-math/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-math') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-math/src/math.c b/mrbgems/mruby-math/src/math.c
index bf3c007b4..bdc7767f7 100644
--- a/mrbgems/mruby-math/src/math.c
+++ b/mrbgems/mruby-math/src/math.c
@@ -12,8 +12,8 @@
#define domain_error(msg) \
mrb_raise(mrb, E_RANGE_ERROR, "Numerical argument is out of domain - " #msg)
-/* math functions not provided under Microsoft Visual C++ */
-#ifdef _MSC_VER
+/* math functions not provided by Microsoft Visual C++ 2012 or older */
+#if defined _MSC_VER && _MSC_VER < 1800
#define MATH_TOLERANCE 1E-12
@@ -87,6 +87,12 @@ erfc(double x)
return one_sqrtpi*exp(-x*x)*q2;
}
+double
+log2(double x)
+{
+ return log10(x)/log10(2.0);
+}
+
#endif
/*
@@ -358,18 +364,6 @@ math_atanh(mrb_state *mrb, mrb_value obj)
# define log10(x) ((x) < 0.0 ? nan("") : log10(x))
#endif
-#ifndef log2
-#ifndef HAVE_LOG2
-double
-log2(double x)
-{
- return log10(x)/log10(2.0);
-}
-#else
-extern double log2(double);
-#endif
-#endif
-
/*
* call-seq:
* Math.exp(x) -> float
diff --git a/mrbgems/mruby-numeric-ext/mrbgem.rake b/mrbgems/mruby-numeric-ext/mrbgem.rake
index 69c4fde4c..010804058 100644
--- a/mrbgems/mruby-numeric-ext/mrbgem.rake
+++ b/mrbgems/mruby-numeric-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-numeric-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-object-ext/mrbgem.rake b/mrbgems/mruby-object-ext/mrbgem.rake
new file mode 100644
index 000000000..980f1667a
--- /dev/null
+++ b/mrbgems/mruby-object-ext/mrbgem.rake
@@ -0,0 +1,4 @@
+MRuby::Gem::Specification.new('mruby-object-ext') do |spec|
+ spec.license = 'MIT'
+ spec.author = 'mruby developers'
+end
diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c
new file mode 100644
index 000000000..598ebe91d
--- /dev/null
+++ b/mrbgems/mruby-object-ext/src/object.c
@@ -0,0 +1,108 @@
+#include "mruby.h"
+#include "mruby/array.h"
+#include "mruby/class.h"
+
+/*
+ * call-seq:
+ * nil.to_a -> []
+ *
+ * Always returns an empty array.
+ */
+
+static mrb_value
+nil_to_a(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_ary_new(mrb);
+}
+
+/*
+ * call-seq:
+ * nil.to_f -> 0.0
+ *
+ * Always returns zero.
+ */
+
+static mrb_value
+nil_to_f(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_float_value(mrb, 0.0);
+}
+
+/*
+ * call-seq:
+ * nil.to_i -> 0
+ *
+ * Always returns zero.
+ */
+
+static mrb_value
+nil_to_i(mrb_state *mrb, mrb_value obj)
+{
+ return mrb_fixnum_value(0);
+}
+
+/*
+ * call-seq:
+ * obj.instance_exec(arg...) {|var...| block } -> obj
+ *
+ * Executes the given block within the context of the receiver
+ * (_obj_). In order to set the context, the variable +self+ is set
+ * to _obj_ while the code is executing, giving the code access to
+ * _obj_'s instance variables. Arguments are passed as block parameters.
+ *
+ * class KlassWithSecret
+ * def initialize
+ * @secret = 99
+ * end
+ * end
+ * k = KlassWithSecret.new
+ * k.instance_exec(5) {|x| @secret+x } #=> 104
+ */
+
+mrb_value
+mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c);
+
+static mrb_value
+mrb_obj_instance_exec(mrb_state *mrb, mrb_value self)
+{
+ mrb_value *argv;
+ int argc;
+ mrb_value blk;
+ struct RClass *c;
+
+ mrb_get_args(mrb, "*&", &argv, &argc, &blk);
+
+ if (mrb_nil_p(blk)) {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
+ }
+
+ switch (mrb_type(self)) {
+ case MRB_TT_SYMBOL:
+ case MRB_TT_FIXNUM:
+ case MRB_TT_FLOAT:
+ c = 0;
+ break;
+ default:
+ c = mrb_class_ptr(mrb_singleton_class(mrb, self));
+ break;
+ }
+
+ return mrb_yield_internal(mrb, blk, argc, argv, self, c);
+}
+
+void
+mrb_mruby_object_ext_gem_init(mrb_state* mrb)
+{
+ struct RClass * n = mrb->nil_class;
+
+ mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE());
+ mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE());
+ mrb_define_method(mrb, n, "to_i", nil_to_i, MRB_ARGS_NONE());
+
+ mrb_define_method(mrb, mrb->object_class, "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
+}
+
+void
+mrb_mruby_object_ext_gem_final(mrb_state* mrb)
+{
+}
diff --git a/mrbgems/mruby-object-ext/test/nil.rb b/mrbgems/mruby-object-ext/test/nil.rb
new file mode 100644
index 000000000..e385dec6a
--- /dev/null
+++ b/mrbgems/mruby-object-ext/test/nil.rb
@@ -0,0 +1,11 @@
+assert('NilClass#to_a') do
+ assert_equal nil.to_a, []
+end
+
+assert('NilClass#to_f') do
+ assert_equal nil.to_f, 0.0
+end
+
+assert('NilClass#to_i') do
+ assert_equal nil.to_i, 0
+end
diff --git a/mrbgems/mruby-object-ext/test/object.rb b/mrbgems/mruby-object-ext/test/object.rb
new file mode 100644
index 000000000..1a75622f6
--- /dev/null
+++ b/mrbgems/mruby-object-ext/test/object.rb
@@ -0,0 +1,9 @@
+assert('Object#instance_exec') do
+ class KlassWithSecret
+ def initialize
+ @secret = 99
+ end
+ end
+ k = KlassWithSecret.new
+ assert_equal k.instance_exec(5) {|x| @secret+x }, 104
+end
diff --git a/mrbgems/mruby-objectspace/mrbgem.rake b/mrbgems/mruby-objectspace/mrbgem.rake
index 100df4cdc..6a6a3e778 100644
--- a/mrbgems/mruby-objectspace/mrbgem.rake
+++ b/mrbgems/mruby-objectspace/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-objectspace') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-print/mrbgem.rake b/mrbgems/mruby-print/mrbgem.rake
index dc7831280..768fc2e18 100644
--- a/mrbgems/mruby-print/mrbgem.rake
+++ b/mrbgems/mruby-print/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-print') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-proc-ext/mrbgem.rake b/mrbgems/mruby-proc-ext/mrbgem.rake
index 7f979431d..b75fceda3 100644
--- a/mrbgems/mruby-proc-ext/mrbgem.rake
+++ b/mrbgems/mruby-proc-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-proc-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-random/mrbgem.rake b/mrbgems/mruby-random/mrbgem.rake
index 38e93e4b1..7ad3c855c 100644
--- a/mrbgems/mruby-random/mrbgem.rake
+++ b/mrbgems/mruby-random/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-random') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c
index 13b4fa7a3..1c89ca21d 100644
--- a/mrbgems/mruby-random/src/random.c
+++ b/mrbgems/mruby-random/src/random.c
@@ -11,12 +11,17 @@
#include <time.h>
-#define GLOBAL_RAND_SEED_KEY "$mrb_g_rand_seed"
-#define INSTANCE_RAND_SEED_KEY "$mrb_i_rand_seed"
-#define MT_STATE_KEY "$mrb_i_mt_state"
+#define GLOBAL_RAND_SEED_KEY "$mrb_g_rand_seed"
+#define GLOBAL_RAND_SEED_KEY_CSTR_LEN 16
+
+#define INSTANCE_RAND_SEED_KEY "$mrb_i_rand_seed"
+#define INSTANCE_RAND_SEED_KEY_CSTR_LEN 16
+
+#define MT_STATE_KEY "$mrb_i_mt_state"
+#define MT_STATE_KEY_CSTR_LEN 15
static const struct mrb_data_type mt_state_type = {
- MT_STATE_KEY, mrb_free,
+ MT_STATE_KEY, mrb_free,
};
static mt_state *mrb_mt_get_context(mrb_state *mrb, mrb_value self)
@@ -24,7 +29,7 @@ static mt_state *mrb_mt_get_context(mrb_state *mrb, mrb_value self)
mt_state *t;
mrb_value context;
- context = mrb_iv_get(mrb, self, mrb_intern(mrb, MT_STATE_KEY));
+ context = mrb_iv_get(mrb, self, mrb_intern2(mrb, MT_STATE_KEY, MT_STATE_KEY_CSTR_LEN));
t = (mt_state*)mrb_data_get_ptr(mrb, context, &mt_state_type);
if (!t)
mrb_raise(mrb, E_RUNTIME_ERROR, "mt_state get from mrb_iv_get failed");
@@ -141,7 +146,7 @@ static mrb_value mrb_random_g_rand(mrb_state *mrb, mrb_value self)
mrb_value seed;
max = get_opt(mrb);
- seed = mrb_gv_get(mrb, mrb_intern(mrb, GLOBAL_RAND_SEED_KEY));
+ seed = mrb_gv_get(mrb, mrb_intern2(mrb, GLOBAL_RAND_SEED_KEY, GLOBAL_RAND_SEED_KEY_CSTR_LEN));
if (mrb_nil_p(seed)) {
mrb_random_mt_g_srand(mrb, mrb_nil_value());
}
@@ -155,8 +160,8 @@ static mrb_value mrb_random_g_srand(mrb_state *mrb, mrb_value self)
seed = get_opt(mrb);
seed = mrb_random_mt_g_srand(mrb, seed);
- old_seed = mrb_gv_get(mrb, mrb_intern(mrb, GLOBAL_RAND_SEED_KEY));
- mrb_gv_set(mrb, mrb_intern(mrb, GLOBAL_RAND_SEED_KEY), seed);
+ old_seed = mrb_gv_get(mrb, mrb_intern2(mrb, GLOBAL_RAND_SEED_KEY, GLOBAL_RAND_SEED_KEY_CSTR_LEN));
+ mrb_gv_set(mrb, mrb_intern2(mrb, GLOBAL_RAND_SEED_KEY, GLOBAL_RAND_SEED_KEY_CSTR_LEN), seed);
return old_seed;
}
@@ -170,8 +175,8 @@ static mrb_value mrb_random_init(mrb_state *mrb, mrb_value self)
seed = get_opt(mrb);
seed = mrb_random_mt_srand(mrb, t, seed);
- mrb_iv_set(mrb, self, mrb_intern(mrb, INSTANCE_RAND_SEED_KEY), seed);
- mrb_iv_set(mrb, self, mrb_intern(mrb, MT_STATE_KEY),
+ mrb_iv_set(mrb, self, mrb_intern2(mrb, INSTANCE_RAND_SEED_KEY, INSTANCE_RAND_SEED_KEY_CSTR_LEN), seed);
+ mrb_iv_set(mrb, self, mrb_intern2(mrb, MT_STATE_KEY, MT_STATE_KEY_CSTR_LEN),
mrb_obj_value(Data_Wrap_Struct(mrb, mrb->object_class, &mt_state_type, (void*) t)));
return self;
}
@@ -183,7 +188,7 @@ static mrb_value mrb_random_rand(mrb_state *mrb, mrb_value self)
mt_state *t = mrb_mt_get_context(mrb, self);
max = get_opt(mrb);
- seed = mrb_iv_get(mrb, self, mrb_intern(mrb, INSTANCE_RAND_SEED_KEY));
+ seed = mrb_iv_get(mrb, self, mrb_intern2(mrb, INSTANCE_RAND_SEED_KEY, INSTANCE_RAND_SEED_KEY_CSTR_LEN));
if (mrb_nil_p(seed)) {
mrb_random_mt_srand(mrb, t, mrb_nil_value());
}
@@ -198,8 +203,8 @@ static mrb_value mrb_random_srand(mrb_state *mrb, mrb_value self)
seed = get_opt(mrb);
seed = mrb_random_mt_srand(mrb, t, seed);
- old_seed = mrb_iv_get(mrb, self, mrb_intern(mrb, INSTANCE_RAND_SEED_KEY));
- mrb_iv_set(mrb, self, mrb_intern(mrb, INSTANCE_RAND_SEED_KEY), seed);
+ old_seed = mrb_iv_get(mrb, self, mrb_intern2(mrb, INSTANCE_RAND_SEED_KEY, INSTANCE_RAND_SEED_KEY_CSTR_LEN));
+ mrb_iv_set(mrb, self, mrb_intern2(mrb, INSTANCE_RAND_SEED_KEY, INSTANCE_RAND_SEED_KEY_CSTR_LEN), seed);
return old_seed;
}
diff --git a/mrbgems/mruby-range-ext/mrbgem.rake b/mrbgems/mruby-range-ext/mrbgem.rake
index 5ed521a44..a7970aa51 100644
--- a/mrbgems/mruby-range-ext/mrbgem.rake
+++ b/mrbgems/mruby-range-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-range-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c
index 377677ffb..4e17dac8c 100644
--- a/mrbgems/mruby-range-ext/src/range.c
+++ b/mrbgems/mruby-range-ext/src/range.c
@@ -1,7 +1,7 @@
#include "mruby.h"
#include "mruby/range.h"
-static int
+static mrb_bool
r_le(mrb_state *mrb, mrb_value a, mrb_value b)
{
mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* compare result */
@@ -15,7 +15,7 @@ r_le(mrb_state *mrb, mrb_value a, mrb_value b)
return FALSE;
}
-static int
+static mrb_bool
r_lt(mrb_state *mrb, mrb_value a, mrb_value b)
{
mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b);
diff --git a/mrbgems/mruby-sprintf/mrbgem.rake b/mrbgems/mruby-sprintf/mrbgem.rake
index 8772a5174..3e15ee7a9 100644
--- a/mrbgems/mruby-sprintf/mrbgem.rake
+++ b/mrbgems/mruby-sprintf/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-sprintf') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c
index 55698d09f..6479b19bc 100644
--- a/mrbgems/mruby-sprintf/src/sprintf.c
+++ b/mrbgems/mruby-sprintf/src/sprintf.c
@@ -15,10 +15,6 @@
#include <math.h>
#include <ctype.h>
-#ifdef _MSC_VER
-#include <float.h>
-#endif
-
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
diff --git a/mrbgems/mruby-string-ext/mrbgem.rake b/mrbgems/mruby-string-ext/mrbgem.rake
index 83db97eb4..4a3369998 100644
--- a/mrbgems/mruby-string-ext/mrbgem.rake
+++ b/mrbgems/mruby-string-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-string-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-struct/mrbgem.rake b/mrbgems/mruby-struct/mrbgem.rake
index 476e990da..3e9eab8d7 100644
--- a/mrbgems/mruby-struct/mrbgem.rake
+++ b/mrbgems/mruby-struct/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-struct') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index a2731ca54..a8511fc3c 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -43,7 +43,7 @@ struct_ivar_get(mrb_state *mrb, mrb_value c, mrb_sym id)
mrb_value
mrb_struct_iv_get(mrb_state *mrb, mrb_value c, const char *name)
{
- return struct_ivar_get(mrb, c, mrb_intern(mrb, name));
+ return struct_ivar_get(mrb, c, mrb_intern_cstr(mrb, name));
}
mrb_value
@@ -185,8 +185,7 @@ static mrb_value
mrb_struct_set(mrb_state *mrb, mrb_value obj, mrb_value val)
{
const char *name;
- int i;
- size_t len;
+ size_t i, len;
mrb_sym mid;
mrb_value members, slot, *ptr, *ptr_members;
diff --git a/mrbgems/mruby-symbol-ext/mrbgem.rake b/mrbgems/mruby-symbol-ext/mrbgem.rake
index 8e40c743b..6294e7a46 100644
--- a/mrbgems/mruby-symbol-ext/mrbgem.rake
+++ b/mrbgems/mruby-symbol-ext/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-symbol-ext') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-time/mrbgem.rake b/mrbgems/mruby-time/mrbgem.rake
index 0f0b4899d..edf2aa3fc 100644
--- a/mrbgems/mruby-time/mrbgem.rake
+++ b/mrbgems/mruby-time/mrbgem.rake
@@ -1,4 +1,4 @@
MRuby::Gem::Specification.new('mruby-time') do |spec|
spec.license = 'MIT'
- spec.authors = 'mruby developers'
+ spec.author = 'mruby developers'
end
diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c
index 2a2aabe72..8b797f047 100644
--- a/mrbgems/mruby-time/src/time.c
+++ b/mrbgems/mruby-time/src/time.c
@@ -105,7 +105,7 @@ static const char *mon_names[] = {
};
static const char *wday_names[] = {
- "Sun", "Mon", "Tus", "Wed", "Thu", "Fri", "Sat",
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
};
struct mrb_time {
diff --git a/mrbgems/mruby-toplevel-ext/mrbgem.rake b/mrbgems/mruby-toplevel-ext/mrbgem.rake
new file mode 100644
index 000000000..78eb73a26
--- /dev/null
+++ b/mrbgems/mruby-toplevel-ext/mrbgem.rake
@@ -0,0 +1,4 @@
+MRuby::Gem::Specification.new('mruby-toplevel-ext') do |spec|
+ spec.license = 'MIT'
+ spec.author = 'mruby developers'
+end
diff --git a/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb b/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb
new file mode 100644
index 000000000..774562398
--- /dev/null
+++ b/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb
@@ -0,0 +1,11 @@
+
+def self.include (*modules)
+ self.class.include(*modules)
+end
+
+def self.private(*methods)
+end
+def self.protected(*methods)
+end
+def self.public(*methods)
+end
diff --git a/mrbgems/mruby-toplevel-ext/test/toplevel.rb b/mrbgems/mruby-toplevel-ext/test/toplevel.rb
new file mode 100644
index 000000000..4401beba1
--- /dev/null
+++ b/mrbgems/mruby-toplevel-ext/test/toplevel.rb
@@ -0,0 +1,24 @@
+##
+# Toplevel Self(Ext) Test
+
+module ToplevelTestModule1
+ def method_foo
+ :foo
+ end
+
+ CONST_BAR = :bar
+end
+
+module ToplevelTestModule2
+ CONST_BAR = :bar2
+end
+
+assert('Toplevel#include') do
+ self.include ToplevelTestModule2, ToplevelTestModule1
+
+ assert_true self.class.included_modules.include?( ToplevelTestModule1 )
+ assert_true self.class.included_modules.include?( ToplevelTestModule2 )
+ assert_equal :foo, method_foo
+ assert_equal :bar2, CONST_BAR
+end
+