diff options
Diffstat (limited to 'mrbgems/mruby-kernel-ext/src/kernel.c')
| -rw-r--r-- | mrbgems/mruby-kernel-ext/src/kernel.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c new file mode 100644 index 000000000..1ce63ac94 --- /dev/null +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -0,0 +1,36 @@ +#include "mruby.h" +#include "mruby/error.h" + +/* + * 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(); +} + +void +mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) +{ + struct RClass *krn = mrb->kernel_module; + + mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_NONE()); + mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); +} + +void +mrb_mruby_kernel_ext_gem_final(mrb_state *mrb) +{ +} |
