Modified: MacRuby/trunk/error.c (4317 => 4318)
--- MacRuby/trunk/error.c 2010-07-04 12:32:27 UTC (rev 4317)
+++ MacRuby/trunk/error.c 2010-07-06 22:27:21 UTC (rev 4318)
@@ -1214,14 +1214,13 @@
if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));
}
-VALUE
-rb_format_exception_message(VALUE exc)
+static VALUE
+format_message(VALUE exc)
{
+ CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
VALUE message = rb_vm_call(exc, sel_registerName("message"), 0, NULL);
VALUE bt = rb_vm_call(exc, sel_registerName("backtrace"), 0, NULL);
- CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
-
const long count = (bt != Qnil ? RARRAY_LEN(bt) : 0);
if (count > 0) {
for (long i = 0; i < count; i++) {
@@ -1239,11 +1238,26 @@
CFStringAppendFormat(result, NULL, CFSTR("%s (%s)\n"),
RSTRING_PTR(message), rb_class2name(*(VALUE *)exc));
}
-
CFMakeCollectable(result);
return (VALUE)result;
}
+static VALUE
+restore_level(VALUE lvl)
+{
+ rb_set_safe_level_force((int)lvl);
+ return Qnil;
+}
+
+VALUE
+rb_format_exception_message(VALUE exc)
+{
+ const int old_level = rb_safe_level();
+ rb_set_safe_level_force(0);
+
+ return rb_ensure(format_message, exc, restore_level, (VALUE)old_level);
+}
+
void
Init_syserr(void)
{