summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2012-06-14 21:51:58 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2012-06-14 21:51:58 -0700
commit79e162526954be38ca27e77159f2c127d05667cd (patch)
tree443606b38dfa193f029506002cc57ca0782ea4aa
parent93cabfc18b87d404e98aace2098174372a9afd58 (diff)
parentcfd5f5157d06f9c62a04660843c3c02014d8a3a5 (diff)
downloadmruby-79e162526954be38ca27e77159f2c127d05667cd.tar.gz
mruby-79e162526954be38ca27e77159f2c127d05667cd.zip
Merge pull request #286 from monaka/pr-simplify-error-c
Simplify error.c
-rw-r--r--mrblib/error.rb8
-rw-r--r--src/error.c49
-rw-r--r--test/t/exception.rb30
3 files changed, 56 insertions, 31 deletions
diff --git a/mrblib/error.rb b/mrblib/error.rb
index 3fa7f21e3..1cb2b1150 100644
--- a/mrblib/error.rb
+++ b/mrblib/error.rb
@@ -17,5 +17,13 @@ end
class ScriptError < Exception
end
+# ISO 15.2.38
+class SyntaxError < ScriptError
+end
+
+# ISO 15.2.39
+class LoadError < ScriptError
+end
+
class NotImplementedError < ScriptError
end
diff --git a/src/error.c b/src/error.c
index 3585f1634..590fad5a5 100644
--- a/src/error.c
+++ b/src/error.c
@@ -173,24 +173,19 @@ mrb_exc_raise(mrb_state *mrb, mrb_value exc)
}
void
-mrb_raise_va(mrb_state *mrb, struct RClass *c, const char *fmt, va_list args)
-{
- char buf[256];
-
- vsnprintf(buf, 256, fmt, args);
- mrb_exc_raise(mrb, mrb_exc_new(mrb, c, buf, strlen(buf)));
-}
-
-void
mrb_raise(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
{
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- vsnprintf(buf, 256, fmt, args);
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
- mrb_exc_raise(mrb, mrb_exc_new(mrb, c, buf, strlen(buf)));
+ if (n < 0) {
+ n = 0;
+ }
+ mrb_exc_raise(mrb, mrb_exc_new(mrb, c, buf, n));
}
void
@@ -199,12 +194,15 @@ mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
mrb_value exc, argv[2];
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- //argv[0] = mrb_vsprintf(fmt, args);
- vsnprintf(buf, 256, fmt, args);
- argv[0] = mrb_str_new(mrb, buf, strlen(buf));
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
+ if (n < 0) {
+ n = 0;
+ }
+ argv[0] = mrb_str_new(mrb, buf, n);
argv[1] = mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id));
exc = mrb_class_new_instance(mrb, 2, argv, E_NAME_ERROR);
@@ -216,11 +214,15 @@ mrb_sprintf(mrb_state *mrb, const char *fmt, ...)
{
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- vsnprintf(buf, 256, fmt, args);
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
- return mrb_str_new(mrb, buf, strlen(buf));
+ if (n < 0) {
+ n = 0;
+ }
+ return mrb_str_new(mrb, buf, n);
}
void
@@ -237,18 +239,6 @@ mrb_warn(const char *fmt, ...)
void
-mrb_warning(const char *fmt, ...)
-{
- va_list args;
- char buf[256];
-
- va_start(args, fmt);
- snprintf(buf, 256, "warning: %s", fmt);
- printf(buf, args);
- va_end(args);
-}
-
-void
mrb_bug(const char *fmt, ...)
{
va_list args;
@@ -395,9 +385,6 @@ mrb_init_exception(mrb_state *mrb)
eNameError = mrb_define_class(mrb, "NameError", mrb->eStandardError_class); /* 15.2.31 */
mrb_define_class(mrb, "NoMethodError", eNameError); /* 15.2.32 */
- // eScriptError = mrb_define_class(mrb, "ScriptError", mrb->eException_class); /* 15.2.37 */
- // mrb_define_class(mrb, "SyntaxError", eScriptError); /* 15.2.38 */
- // mrb_define_class(mrb, "LoadError", eScriptError); /* 15.2.39 */
// mrb_define_class(mrb, "SystemCallError", mrb->eStandardError_class); /* 15.2.36 */
mrb_define_class(mrb, "LocalJumpError", mrb->eStandardError_class); /* 15.2.25 */
diff --git a/test/t/exception.rb b/test/t/exception.rb
index 22795161f..d7226a368 100644
--- a/test/t/exception.rb
+++ b/test/t/exception.rb
@@ -41,6 +41,36 @@ assert('Exception.exception', '15.2.22.4.1') do
e.message == 'a'
end
+assert('ScriptError', '15.2.37') do
+ begin
+ raise ScriptError.new
+ rescue ScriptError
+ true
+ else
+ false
+ end
+end
+
+assert('SyntaxError', '15.2.38') do
+ begin
+ raise SyntaxError.new
+ rescue SyntaxError
+ true
+ else
+ false
+ end
+end
+
+assert('LoadError', '15.2.39') do
+ begin
+ raise LoadError.new
+ rescue LoadError
+ true
+ else
+ false
+ end
+end
+
# Not ISO specified
assert('Exception 1') do