diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-12 09:20:57 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-12 09:20:57 +0900 |
| commit | 918e7bb18746db6879f8e501391606d6c26a051f (patch) | |
| tree | 057d114251cd38b810085307a0bfd8bd02c084ce /src/class.c | |
| parent | a25404c3057f89e8d1f17a05ef4473b8f1c8fe94 (diff) | |
| download | mruby-918e7bb18746db6879f8e501391606d6c26a051f.tar.gz mruby-918e7bb18746db6879f8e501391606d6c26a051f.zip | |
Refactor check before `mrb_class_ptr()`; ref #3602
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/src/class.c b/src/class.c index c7781c9b8..8aa976c08 100644 --- a/src/class.c +++ b/src/class.c @@ -123,6 +123,19 @@ module_from_sym(mrb_state *mrb, struct RClass *klass, mrb_sym id) return mrb_class_ptr(c); } +static mrb_bool +class_ptr_p(mrb_value obj) +{ + switch (mrb_type(obj)) { + case MRB_TT_CLASS: + case MRB_TT_SCLASS: + case MRB_TT_MODULE: + return TRUE; + default: + return FALSE; + } +} + MRB_API struct RClass* mrb_class_outer_module(mrb_state *mrb, struct RClass *c) { @@ -137,14 +150,8 @@ mrb_class_outer_module(mrb_state *mrb, struct RClass *c) mrb_value klass; klass = mrb_obj_iv_get(mrb, (struct RObject *)cls, mrb_intern_lit(mrb, "__attached__")); - switch (mrb_type(klass)) { - case MRB_TT_CLASS: - case MRB_TT_SCLASS: - case MRB_TT_MODULE: + if (class_ptr_p(klass)) { cls = mrb_class_ptr(klass); - break; - default: - break; } } return cls; @@ -153,12 +160,7 @@ mrb_class_outer_module(mrb_state *mrb, struct RClass *c) static void check_if_class_or_module(mrb_state *mrb, mrb_value obj) { - switch (mrb_type(obj)) { - case MRB_TT_CLASS: - case MRB_TT_SCLASS: - case MRB_TT_MODULE: - return; - default: + if (!class_ptr_p(obj)) { mrb_raisef(mrb, E_TYPE_ERROR, "%S is not a class/module", mrb_inspect(mrb, obj)); } } @@ -616,14 +618,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) mrb_value ss; ss = ARGV[arg_i++]; - switch (mrb_type(ss)) { - case MRB_TT_CLASS: - case MRB_TT_MODULE: - case MRB_TT_SCLASS: - break; - default: + if (!class_ptr_p(ss)) { mrb_raisef(mrb, E_TYPE_ERROR, "%S is not class/module", ss); - break; } *p = ss; i++; @@ -1772,15 +1768,11 @@ mrb_mod_to_s(mrb_state *mrb, mrb_value klass) str = mrb_str_new_lit(mrb, "#<Class:"); - switch (mrb_type(v)) { - case MRB_TT_CLASS: - case MRB_TT_MODULE: - case MRB_TT_SCLASS: - mrb_str_cat_str(mrb, str, mrb_inspect(mrb, v)); - break; - default: - mrb_str_cat_str(mrb, str, mrb_any_to_s(mrb, v)); - break; + if (class_ptr_p(v)) { + mrb_str_cat_str(mrb, str, mrb_inspect(mrb, v)); + } + else { + mrb_str_cat_str(mrb, str, mrb_any_to_s(mrb, v)); } return mrb_str_cat_lit(mrb, str, ">"); } |
