diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-05-28 16:57:42 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 16:20:58 +0900 |
| commit | fa6a9f6f13e4d47808dee7cb991995284411892b (patch) | |
| tree | 83883d5e6648708a565cfbb419fe5941cef02a77 /src | |
| parent | 00f5ddc9aeeab49d656044d14a03765bd6fdfc53 (diff) | |
| download | mruby-fa6a9f6f13e4d47808dee7cb991995284411892b.tar.gz mruby-fa6a9f6f13e4d47808dee7cb991995284411892b.zip | |
Add functions that take symbols as arguments.
- :
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 31 | ||||
| -rw-r--r-- | src/variable.c | 6 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/class.c b/src/class.c index 465577e1a..cf0243915 100644 --- a/src/class.c +++ b/src/class.c @@ -1324,16 +1324,35 @@ mrb_define_singleton_method(mrb_state *mrb, struct RObject *o, const char *name, } MRB_API void +mrb_define_singleton_method_id(mrb_state *mrb, struct RObject *o, mrb_sym name, mrb_func_t func, mrb_aspec aspec) +{ + prepare_singleton_class(mrb, (struct RBasic*)o); + mrb_define_method_id(mrb, o->c, name, func, aspec); +} + +MRB_API void mrb_define_class_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, mrb_aspec aspec) { mrb_define_singleton_method(mrb, (struct RObject*)c, name, func, aspec); } MRB_API void +mrb_define_class_method_id(mrb_state *mrb, struct RClass *c, mrb_sym name, mrb_func_t func, mrb_aspec aspec) +{ + mrb_define_singleton_method_id(mrb, (struct RObject*)c, name, func, aspec); +} + +MRB_API void +mrb_define_module_function_id(mrb_state *mrb, struct RClass *c, mrb_sym name, mrb_func_t func, mrb_aspec aspec) +{ + mrb_define_class_method_id(mrb, c, name, func, aspec); + mrb_define_method_id(mrb, c, name, func, aspec); +} + +MRB_API void mrb_define_module_function(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, mrb_aspec aspec) { - mrb_define_class_method(mrb, c, name, func, aspec); - mrb_define_method(mrb, c, name, func, aspec); + mrb_define_module_function_id(mrb, c, mrb_intern_cstr(mrb, name), func, aspec); } #ifdef MRB_METHOD_CACHE @@ -1927,7 +1946,7 @@ undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a) mrb_define_method_raw(mrb, c, a, m); } -void +MRB_API void mrb_undef_method_id(mrb_state *mrb, struct RClass *c, mrb_sym a) { if (!mrb_obj_respond_to(mrb, c, a)) { @@ -1943,6 +1962,12 @@ mrb_undef_method(mrb_state *mrb, struct RClass *c, const char *name) } MRB_API void +mrb_undef_class_method_id(mrb_state *mrb, struct RClass *c, mrb_sym name) +{ + mrb_undef_method_id(mrb, mrb_class_ptr(mrb_singleton_class(mrb, mrb_obj_value(c))), name); +} + +MRB_API void mrb_undef_class_method(mrb_state *mrb, struct RClass *c, const char *name) { mrb_undef_method(mrb, mrb_class_ptr(mrb_singleton_class(mrb, mrb_obj_value(c))), name); diff --git a/src/variable.c b/src/variable.c index add1155c8..8fcbd6427 100644 --- a/src/variable.c +++ b/src/variable.c @@ -873,6 +873,12 @@ mrb_const_remove(mrb_state *mrb, mrb_value mod, mrb_sym sym) } MRB_API void +mrb_define_const_id(mrb_state *mrb, struct RClass *mod, mrb_sym name, mrb_value v) +{ + mrb_obj_iv_set(mrb, (struct RObject*)mod, name, v); +} + +MRB_API void mrb_define_const(mrb_state *mrb, struct RClass *mod, const char *name, mrb_value v) { mrb_obj_iv_set(mrb, (struct RObject*)mod, mrb_intern_cstr(mrb, name), v); |
