diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-02-15 10:45:32 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-02-15 10:45:32 +0900 |
| commit | e96743f3d7c83feb0cf2da25dd777b2799623af2 (patch) | |
| tree | 63d487e10d13f28dac74f9e1c6733994b4e14a2b /src | |
| parent | 37fe3d666f12f4dbd0e2fc1688d83ece94667f4e (diff) | |
| download | mruby-e96743f3d7c83feb0cf2da25dd777b2799623af2.tar.gz mruby-e96743f3d7c83feb0cf2da25dd777b2799623af2.zip | |
use mrb_get_args("n") instead of decomposing each time
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 83 |
1 files changed, 31 insertions, 52 deletions
diff --git a/src/class.c b/src/class.c index e2ee288f4..779078cce 100644 --- a/src/class.c +++ b/src/class.c @@ -600,9 +600,14 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) if (mrb_type(ss) == MRB_TT_SYMBOL) { *symp = mrb_symbol(ss); } - else { + else if (mrb_string_p(ss)) { *symp = mrb_intern_str(mrb, to_str(mrb, ss)); } + else { + mrb_value obj = mrb_funcall(mrb, ss, "inspect", 0); + mrb_raisef(mrb, E_TYPE_ERROR, "%s is not a symbol", + mrb_string_value_ptr(mrb, obj)); + } i++; } } @@ -1453,20 +1458,6 @@ mod_define_method(mrb_state *mrb, mrb_value self) return blk; } -static mrb_sym -mrb_sym_value(mrb_state *mrb, mrb_value val) -{ - if (mrb_string_p(val)) { - return mrb_intern_str(mrb, val); - } - else if(!mrb_symbol_p(val)) { - mrb_value obj = mrb_funcall(mrb, val, "inspect", 0); - mrb_raisef(mrb, E_TYPE_ERROR, "%s is not a symbol", - mrb_string_value_ptr(mrb, obj)); - } - return mrb_symbol(val); -} - static void check_cv_name(mrb_state *mrb, mrb_sym id) { @@ -1497,13 +1488,10 @@ check_cv_name(mrb_state *mrb, mrb_sym id) static mrb_value mrb_mod_cvar_defined(mrb_state *mrb, mrb_value mod) { - mrb_value sym; mrb_sym id; - mrb_get_args(mrb, "o", &sym); + mrb_get_args(mrb, "n", &id); - id = mrb_sym_value(mrb,sym); check_cv_name(mrb, id); - if(mrb_cv_defined(mrb, mod, id)) return mrb_true_value(); return mrb_false_value(); @@ -1527,11 +1515,9 @@ mrb_mod_cvar_defined(mrb_state *mrb, mrb_value mod) static mrb_value mrb_mod_cvar_get(mrb_state *mrb, mrb_value mod) { - mrb_value sym; mrb_sym id; - mrb_get_args(mrb, "o", &sym); - id = mrb_sym_value(mrb,sym); + mrb_get_args(mrb, "n", &id); check_cv_name(mrb, id); return mrb_cv_get(mrb, mod, id); } @@ -1557,12 +1543,10 @@ mrb_mod_cvar_get(mrb_state *mrb, mrb_value mod) static mrb_value mrb_mod_cvar_set(mrb_state *mrb, mrb_value mod) { - mrb_value sym, value; + mrb_value value; mrb_sym id; - mrb_get_args(mrb, "oo", &sym, &value); - - id = mrb_sym_value(mrb,sym); + mrb_get_args(mrb, "no", &id, &value); check_cv_name(mrb, id); mrb_cv_set(mrb, mod, id, value); return value; @@ -1594,16 +1578,13 @@ mrb_mod_cvar_set(mrb_state *mrb, mrb_value mod) mrb_value mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod) { - mrb_value sym, val; + mrb_value val; mrb_sym id; - mrb_get_args(mrb, "o", &sym); - - id = mrb_sym_value(mrb,sym); + mrb_get_args(mrb, "n", &id); check_cv_name(mrb, id); val = mrb_iv_remove(mrb, mod, id); - if (!mrb_undef_p(val)) return val; if (mrb_cv_defined(mrb, mod, id)){ @@ -1648,12 +1629,9 @@ mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod) static mrb_value mrb_mod_method_defined(mrb_state *mrb, mrb_value mod) { - mrb_value sym; mrb_sym id; - mrb_get_args(mrb, "o", &sym); - id = mrb_sym_value(mrb,sym); - + mrb_get_args(mrb, "n", &id); if (mrb_obj_respond_to(mrb_class_ptr(mod), id)) { return mrb_true_value(); } @@ -1717,11 +1695,11 @@ check_const_name(mrb_state *mrb, mrb_sym id) mrb_value mrb_mod_const_defined(mrb_state *mrb, mrb_value mod) { - mrb_value sym; - mrb_get_args(mrb, "o", &sym); + mrb_sym id; - check_const_name(mrb, mrb_sym_value(mrb,sym)); - if(mrb_const_defined(mrb, mod, mrb_sym_value(mrb, sym))) { + mrb_get_args(mrb, "n", &id); + check_const_name(mrb, id); + if(mrb_const_defined(mrb, mod, id)) { return mrb_true_value(); } return mrb_false_value(); @@ -1730,35 +1708,36 @@ mrb_mod_const_defined(mrb_state *mrb, mrb_value mod) mrb_value mrb_mod_const_get(mrb_state *mrb, mrb_value mod) { - mrb_value sym; - mrb_get_args(mrb, "o", &sym); + mrb_sym id; - check_const_name(mrb, mrb_sym_value(mrb,sym)); - return mrb_const_get(mrb, mod, mrb_sym_value(mrb, sym)); + mrb_get_args(mrb, "n", &id); + check_const_name(mrb, id); + return mrb_const_get(mrb, mod, id); } mrb_value mrb_mod_const_set(mrb_state *mrb, mrb_value mod) { - mrb_value sym, value; - mrb_get_args(mrb, "oo", &sym, &value); + mrb_sym id; + mrb_value value; - check_const_name(mrb, mrb_sym_value(mrb,sym)); - mrb_const_set(mrb, mod, mrb_sym_value(mrb, sym), value); + mrb_get_args(mrb, "no", &id, &value); + check_const_name(mrb, id); + mrb_const_set(mrb, mod, id, value); return value; } mrb_value mrb_mod_remove_const(mrb_state *mrb, mrb_value mod) { - mrb_sym sym; + mrb_sym id; mrb_value val; - mrb_get_args(mrb, "n", &sym); - check_const_name(mrb, sym); - val = mrb_iv_remove(mrb, mod, sym); + mrb_get_args(mrb, "n", &id); + check_const_name(mrb, id); + val = mrb_iv_remove(mrb, mod, id); if (mrb_undef_p(val)) { - mrb_name_error(mrb, sym, "instance variable %s not defined", mrb_sym2name(mrb, sym)); + mrb_name_error(mrb, id, "instance variable %s not defined", mrb_sym2name(mrb, id)); } return val; } |
