diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-09-03 00:41:09 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-09-03 00:41:09 +0900 |
| commit | fd3af6aec88fe8ad01efb23f69a075f83ac91063 (patch) | |
| tree | 217eff2af8c75591be2f6f6a24e4296c093dcf71 | |
| parent | 9c12b47d7373cdfecede2e014b63cea4da97ee36 (diff) | |
| download | mruby-fd3af6aec88fe8ad01efb23f69a075f83ac91063.tar.gz mruby-fd3af6aec88fe8ad01efb23f69a075f83ac91063.zip | |
introduce toplevel object main; close #327
| -rw-r--r-- | include/mruby/class.h | 2 | ||||
| -rw-r--r-- | include/mruby/value.h | 6 | ||||
| -rw-r--r-- | src/kernel.c | 3 | ||||
| -rw-r--r-- | src/state.c | 6 | ||||
| -rw-r--r-- | 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 |
