diff options
| author | Masaki Muranaka <[email protected]> | 2013-03-28 17:35:04 +0900 |
|---|---|---|
| committer | Masaki Muranaka <[email protected]> | 2013-03-28 17:35:04 +0900 |
| commit | c0b5220418879200ed23e34e87485ad591cd9755 (patch) | |
| tree | a6a2406024a19bc6389163c70b17cb76e704fa25 | |
| parent | e265d7c7efe51bc425e39c7fa208a6f421bba199 (diff) | |
| download | mruby-c0b5220418879200ed23e34e87485ad591cd9755.tar.gz mruby-c0b5220418879200ed23e34e87485ad591cd9755.zip | |
Modify mrb_name_error() to use mrb_format().
| -rw-r--r-- | src/class.c | 24 | ||||
| -rw-r--r-- | src/error.c | 12 | ||||
| -rw-r--r-- | src/error.h | 1 | ||||
| -rw-r--r-- | src/kernel.c | 4 |
4 files changed, 19 insertions, 22 deletions
diff --git a/src/class.c b/src/class.c index 4b19ba87e..030d018bc 100644 --- a/src/class.c +++ b/src/class.c @@ -1473,7 +1473,7 @@ check_cv_name(mrb_state *mrb, mrb_sym id) s = mrb_sym2name_len(mrb, id, &len); if (len < 3 || !(s[0] == '@' && s[1] == '@')) { - mrb_name_error(mrb, id, "`%s' is not allowed as a class variable name", s); + mrb_name_error(mrb, id, "`%S' is not allowed as a class variable name", mrb_sym2str(mrb, id)); } } @@ -1595,12 +1595,12 @@ mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod) if (!mrb_undef_p(val)) return val; if (mrb_cv_defined(mrb, mod, id)){ - mrb_name_error(mrb, id, "cannot remove %s for %s", - mrb_sym2name(mrb, id), mrb_class_name(mrb, mrb_class_ptr(mod))); + mrb_name_error(mrb, id, "cannot remove %S for %S", + mrb_sym2str(mrb, id), mod); } - mrb_name_error(mrb, id, "class variable %s not defined for %s", - mrb_sym2name(mrb, id), mrb_class_name(mrb, mrb_class_ptr(mod))); + mrb_name_error(mrb, id, "class variable %S not defined for %S", + mrb_sym2str(mrb, id), mod); /* not reached */ return mrb_nil_value(); @@ -1645,8 +1645,9 @@ mrb_mod_method_defined(mrb_state *mrb, mrb_value mod) } static void -remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid) +remove_method(mrb_state *mrb, mrb_value mod, mrb_sym mid) { + struct RClass *c = mrb_class_ptr(mod); khash_t(mt) *h = c->mt; khiter_t k; @@ -1658,8 +1659,8 @@ remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid) } } - mrb_name_error(mrb, mid, "method `%s' not defined in %s", - mrb_sym2name(mrb, mid), mrb_class_name(mrb, c)); + mrb_name_error(mrb, mid, "method `%S' not defined in %S", + mrb_sym2str(mrb, mid), mod); } /* 15.2.2.4.41 */ @@ -1674,13 +1675,12 @@ remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid) mrb_value mrb_mod_remove_method(mrb_state *mrb, mrb_value mod) { - struct RClass *c = mrb_class_ptr(mod); int argc; mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); while (argc--) { - remove_method(mrb, c, mrb_symbol(*argv)); + remove_method(mrb, mod, mrb_symbol(*argv)); argv++; } return mod; @@ -1694,7 +1694,7 @@ check_const_name(mrb_state *mrb, mrb_sym id) s = mrb_sym2name_len(mrb, id, &len); if (len < 1 || !ISUPPER(*s)) { - mrb_name_error(mrb, id, "wrong constant name %s", s); + mrb_name_error(mrb, id, "wrong constant name %S", mrb_sym2str(mrb, id)); } } @@ -1743,7 +1743,7 @@ mrb_mod_remove_const(mrb_state *mrb, mrb_value mod) check_const_name(mrb, id); val = mrb_iv_remove(mrb, mod, id); if (mrb_undef_p(val)) { - mrb_name_error(mrb, id, "constant %s not defined", mrb_sym2name(mrb, id)); + mrb_name_error(mrb, id, "constant %S not defined", mrb_sym2str(mrb, id)); } return val; } diff --git a/src/error.c b/src/error.c index 52e4958a1..e65bc5eaf 100644 --- a/src/error.c +++ b/src/error.c @@ -292,18 +292,14 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...) void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...) { - mrb_value exc, argv[2]; + mrb_value exc; + mrb_value argv[2]; va_list args; - char buf[256]; - int n; va_start(args, fmt); - n = vsnprintf(buf, sizeof(buf), fmt, args); + argv[0] = mrb_vformat(mrb, fmt, args); va_end(args); - if (n < 0) { - n = 0; - } - argv[0] = mrb_str_new(mrb, buf, n); + argv[1] = mrb_symbol_value(id); /* ignore now */ exc = mrb_class_new_instance(mrb, 1, argv, E_NAME_ERROR); mrb_exc_raise(mrb, exc); diff --git a/src/error.h b/src/error.h index 53ee2b206..83d0938aa 100644 --- a/src/error.h +++ b/src/error.h @@ -12,6 +12,7 @@ int sysexit_status(mrb_state *mrb, mrb_value err); mrb_value mrb_exc_new3(mrb_state *mrb, struct RClass* c, mrb_value str); mrb_value make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr); mrb_value mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv); +mrb_value mrb_format(mrb_state *mrb, const char *format, ...); void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...); void mrb_exc_print(mrb_state *mrb, struct RObject *exc); diff --git a/src/kernel.c b/src/kernel.c index 23b0153ab..ec6408701 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -556,7 +556,7 @@ check_iv_name(mrb_state *mrb, mrb_sym id) s = mrb_sym2name_len(mrb, id, &len); if (len < 2 || !(s[0] == '@' && s[1] != '@')) { - mrb_name_error(mrb, id, "`%s' is not allowed as an instance variable name", s); + mrb_name_error(mrb, id, "`%S' is not allowed as an instance variable name", mrb_sym2str(mrb, id)); } } @@ -964,7 +964,7 @@ mrb_obj_remove_instance_variable(mrb_state *mrb, mrb_value self) check_iv_name(mrb, sym); val = mrb_iv_remove(mrb, self, sym); if (mrb_undef_p(val)) { - mrb_name_error(mrb, sym, "instance variable %s not defined", mrb_sym2name(mrb, sym)); + mrb_name_error(mrb, sym, "instance variable %S not defined", mrb_sym2str(mrb, sym)); } return val; } |
