diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-27 22:47:31 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-27 22:47:31 +0900 |
| commit | f2c086d7d54930bf1894f262995858f2e9deb999 (patch) | |
| tree | e6953e05d635927fec0c722f0b8598dee354a253 /src | |
| parent | 211710d78205b743123563d99a3ab8a94bc787d8 (diff) | |
| parent | 65ace4e02704835dcabff9c9ab67621a8974e7c2 (diff) | |
| download | mruby-f2c086d7d54930bf1894f262995858f2e9deb999.tar.gz mruby-f2c086d7d54930bf1894f262995858f2e9deb999.zip | |
Merge pull request #1963 from ksss/implement-__method__
Implement Kernel#__method__
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c index f4ee6bd9d..e637a53b1 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -210,6 +210,26 @@ mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self) return mrb_bool_value(given_p); } +/* + * call-seq: + * __method__ -> symbol + * + * Returns the name at the definition of the current method as a + * Symbol. + * If called outside of a method, it returns <code>nil</code>. + * + */ +static mrb_value +mrb_f_method(mrb_state *mrb, mrb_value self) +{ + mrb_callinfo *ci = mrb->c->ci; + ci--; + if (ci->mid) + return mrb_symbol_value(ci->mid); + else + return mrb_nil_value(); +} + /* 15.3.1.3.7 */ /* * call-seq: @@ -1113,6 +1133,7 @@ mrb_init_kernel(mrb_state *mrb) mrb_define_method(mrb, krn, "===", mrb_equal_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.2 */ mrb_define_method(mrb, krn, "__id__", mrb_obj_id_m, MRB_ARGS_NONE()); /* 15.3.1.3.3 */ mrb_define_method(mrb, krn, "__send__", mrb_f_send, MRB_ARGS_ANY()); /* 15.3.1.3.4 */ + mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); mrb_define_method(mrb, krn, "block_given?", mrb_f_block_given_p_m, MRB_ARGS_NONE()); /* 15.3.1.3.6 */ mrb_define_method(mrb, krn, "class", mrb_obj_class_m, MRB_ARGS_NONE()); /* 15.3.1.3.7 */ mrb_define_method(mrb, krn, "clone", mrb_obj_clone, MRB_ARGS_NONE()); /* 15.3.1.3.8 */ |
