summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/class.h2
-rw-r--r--include/mruby/value.h6
-rw-r--r--src/kernel.c3
-rw-r--r--src/state.c6
-rw-r--r--test/t/kernel.rb2
5 files changed, 14 insertions, 5 deletions
diff --git a/include/mruby/class.h b/include/mruby/class.h
index c573bc13e..3eae31f4e 100644
--- a/include/mruby/class.h
+++ b/include/mruby/class.h
@@ -39,6 +39,8 @@ mrb_class(mrb_state *mrb, mrb_value v)
return mrb->fixnum_class;
case MRB_TT_FLOAT:
return mrb->float_class;
+ case MRB_TT_MAIN:
+ return mrb->object_class;
#ifdef ENABLE_REGEXP
case MRB_TT_REGEX:
diff --git a/include/mruby/value.h b/include/mruby/value.h
index 6cbe95509..a5bf3f8a4 100644
--- a/include/mruby/value.h
+++ b/include/mruby/value.h
@@ -34,7 +34,8 @@ enum mrb_vtype {
MRB_TT_FILE, /* 21 */
MRB_TT_ENV, /* 22 */
MRB_TT_DATA, /* 23 */
- MRB_TT_MAXDEFINE /* 24 */
+ MRB_TT_MAIN, /* 24 */
+ MRB_TT_MAXDEFINE /* 25 */
};
typedef struct mrb_value {
@@ -94,7 +95,8 @@ enum mrb_vtype {
MRB_TT_FILE, /* 22 */
MRB_TT_ENV, /* 23 */
MRB_TT_DATA, /* 24 */
- MRB_TT_MAXDEFINE /* 25 */
+ MRB_TT_MAIN, /* 25 */
+ MRB_TT_MAXDEFINE /* 26 */
};
#ifdef MRB_ENDIAN_BIG
diff --git a/src/kernel.c b/src/kernel.c
index 9307f57e5..05868bc70 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -64,6 +64,9 @@ mrb_obj_inspect(mrb_state *mrb, mrb_value obj)
else if (mrb_nil_p(obj)) {
return mrb_str_new(mrb, "nil", 3);
}
+ else if (mrb_type(obj) == MRB_TT_MAIN) {
+ return mrb_str_new(mrb, "main", 4);
+ }
return mrb_funcall(mrb, obj, "to_s", 0, 0);
}
diff --git a/src/state.c b/src/state.c
index 57f052569..6efacd68c 100644
--- a/src/state.c
+++ b/src/state.c
@@ -97,6 +97,8 @@ mrb_add_irep(mrb_state *mrb, int idx)
mrb_value
mrb_top_self(mrb_state *mrb)
{
- // for now
- return mrb_nil_value();
+ mrb_value v;
+
+ MRB_SET_VALUE(v, MRB_TT_MAIN, value.i, 0);
+ return v;
}
diff --git a/test/t/kernel.rb b/test/t/kernel.rb
index 59d9f3df5..25404cd33 100644
--- a/test/t/kernel.rb
+++ b/test/t/kernel.rb
@@ -338,5 +338,5 @@ end
assert('Kernel#to_s', '15.3.1.3.46') do
# TODO looks strange..
- to_s == ''
+ nil.to_s == ''
end