From fd3af6aec88fe8ad01efb23f69a075f83ac91063 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Mon, 3 Sep 2012 00:41:09 +0900 Subject: introduce toplevel object main; close #327 --- include/mruby/class.h | 2 ++ include/mruby/value.h | 6 ++++-- src/kernel.c | 3 +++ src/state.c | 6 ++++-- test/t/kernel.rb | 2 +- 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 -- cgit v1.2.3