summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-05-10 22:09:02 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-05-10 22:09:02 +0900
commitfad8b1cefafcc40ca86cd87612ed8597ee600da3 (patch)
treedb7ebf663a584ef733abc9c508b64e93801b2815
parent08660c5b510b4bc5e6a2844e632fda0765e8421a (diff)
downloadmruby-fad8b1cefafcc40ca86cd87612ed8597ee600da3.tar.gz
mruby-fad8b1cefafcc40ca86cd87612ed8597ee600da3.zip
change mrb_warn to get mrb_state and %S formatter
-rw-r--r--include/mruby.h2
-rw-r--r--mrbgems/mruby-sprintf/src/sprintf.c2
-rw-r--r--mrbgems/mruby-struct/src/struct.c2
-rw-r--r--src/class.c5
-rw-r--r--src/error.c14
5 files changed, 13 insertions, 12 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 3960a9e35..14ea9d9fb 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -299,7 +299,7 @@ void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
-void mrb_warn(const char *fmt, ...);
+void mrb_warn(mrb_state *mrb, const char *fmt, ...);
void mrb_bug(const char *fmt, ...);
/* macros to get typical exception objects
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c
index fed730c74..fb577c1d0 100644
--- a/mrbgems/mruby-sprintf/src/sprintf.c
+++ b/mrbgems/mruby-sprintf/src/sprintf.c
@@ -1070,7 +1070,7 @@ retry:
if (posarg >= 0 && nextarg < argc) {
const char *mesg = "too many arguments for format string";
if (mrb_test(ruby_debug)) mrb_raise(mrb, E_ARGUMENT_ERROR, mesg);
- if (mrb_test(ruby_verbose)) mrb_warn("%s", mesg);
+ if (mrb_test(ruby_verbose)) mrb_warn(mrb, "%S", mrb_str_new_cstr(mrb, mesg));
}
#endif
mrb_str_resize(mrb, result, blen);
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 1d4a44e4e..e58394005 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -252,7 +252,7 @@ make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass * k
mrb_name_error(mrb, id, "identifier %S needs to be constant", name);
}
if (mrb_const_defined_at(mrb, klass, id)) {
- mrb_warn("redefining constant Struct::%s", mrb_string_value_ptr(mrb, name));
+ mrb_warn(mrb, "redefining constant Struct::%S", name);
//?rb_mod_remove_const(klass, mrb_sym2name(mrb, id));
}
c = mrb_define_class_under(mrb, klass, RSTRING_PTR(name), klass);
diff --git a/src/class.c b/src/class.c
index 47ea42228..8476ffa6c 100644
--- a/src/class.c
+++ b/src/class.c
@@ -255,13 +255,12 @@ mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, s
if (mrb_const_defined_at(mrb, outer, id)) {
c = class_from_sym(mrb, outer, id);
if (mrb_class_real(c->super) != super) {
- mrb_name_error(mrb, id, "%S is already defined", mrb_sym2str(mrb, id));
+ mrb_name_error(mrb, id, "%S is already defined", name);
}
return c;
}
if (!super) {
- mrb_warn("no super class for `%S::%S', Object assumed",
- mrb_obj_value(outer), mrb_sym2str(mrb, id));
+ mrb_warn(mrb, "no super class for `%S::%S', Object assumed", outer, name);
}
c = mrb_class_new(mrb, super);
setup_class(mrb, mrb_obj_value(outer), c, id);
diff --git a/src/error.c b/src/error.c
index d4e13fc96..37914666f 100644
--- a/src/error.c
+++ b/src/error.c
@@ -312,15 +312,17 @@ mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
}
void
-mrb_warn(const char *fmt, ...)
+mrb_warn(mrb_state *mrb, const char *fmt, ...)
{
#ifdef ENABLE_STDIO
- va_list args;
+ va_list ap;
+ mrb_value str;
- va_start(args, fmt);
- printf("warning: ");
- vprintf(fmt, args);
- va_end(args);
+ va_start(ap, fmt);
+ str = mrb_vformat(mrb, fmt, ap);
+ fputs("warning: ", stderr);
+ fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
+ va_end(ap);
#endif
}