[macruby-changes] [3923] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Apr 13 14:13:56 PDT 2010
Revision: 3923
http://trac.macosforge.org/projects/ruby/changeset/3923
Author: eloy.de.enige at gmail.com
Date: 2010-04-13 14:13:55 -0700 (Tue, 13 Apr 2010)
Log Message:
-----------
Use the same message format for printed exceptions everywhere.
Modified Paths:
--------------
MacRuby/trunk/error.c
MacRuby/trunk/include/ruby/intern.h
MacRuby/trunk/objc.m
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/error.c
===================================================================
--- MacRuby/trunk/error.c 2010-04-13 05:26:55 UTC (rev 3922)
+++ MacRuby/trunk/error.c 2010-04-13 21:13:55 UTC (rev 3923)
@@ -1215,6 +1215,38 @@
if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));
}
+VALUE
+rb_format_exception_message(VALUE exc)
+{
+ VALUE message = rb_vm_call(exc, sel_registerName("message"), 0, NULL,
+ false);
+ VALUE bt = rb_vm_call(exc, sel_registerName("backtrace"), 0, NULL,
+ false);
+
+ CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
+
+ const long count = (bt != Qnil ? RARRAY_LEN(bt) : 0);
+ if (count > 0) {
+ for (long i = 0; i < count; i++) {
+ const char *bte = RSTRING_PTR(RARRAY_AT(bt, i));
+ if (i == 0) {
+ CFStringAppendFormat(result, NULL, CFSTR("%s: %s (%s)\n"),
+ bte, RSTRING_PTR(message), rb_class2name(*(VALUE *)exc));
+ }
+ else {
+ CFStringAppendFormat(result, NULL, CFSTR("\tfrom %s\n"), bte);
+ }
+ }
+ }
+ else {
+ CFStringAppendFormat(result, NULL, CFSTR("%s (%s)\n"),
+ RSTRING_PTR(message), rb_class2name(*(VALUE *)exc));
+ }
+
+ CFMakeCollectable(result);
+ return (VALUE)result;
+}
+
void
Init_syserr(void)
{
Modified: MacRuby/trunk/include/ruby/intern.h
===================================================================
--- MacRuby/trunk/include/ruby/intern.h 2010-04-13 05:26:55 UTC (rev 3922)
+++ MacRuby/trunk/include/ruby/intern.h 2010-04-13 21:13:55 UTC (rev 3923)
@@ -205,6 +205,7 @@
VALUE rb_exc_new(VALUE, const char*, long);
VALUE rb_exc_new2(VALUE, const char*);
VALUE rb_exc_new3(VALUE, VALUE);
+VALUE rb_format_exception_message(VALUE exc);
PRINTF_ARGS(NORETURN(void rb_loaderror(const char*, ...)), 1, 2);
PRINTF_ARGS(NORETURN(void rb_name_error(ID, const char*, ...)), 2, 3);
NORETURN(void rb_invalid_str(const char*, const char*));
Modified: MacRuby/trunk/objc.m
===================================================================
--- MacRuby/trunk/objc.m 2010-04-13 05:26:55 UTC (rev 3922)
+++ MacRuby/trunk/objc.m 2010-04-13 21:13:55 UTC (rev 3923)
@@ -606,7 +606,7 @@
rb_rb2oc_exception(VALUE exc)
{
NSString *name = [NSString stringWithUTF8String:rb_obj_classname(exc)];
- NSString *reason = [(id)exc performSelector:@selector(message)];
+ NSString *reason = (NSString *)rb_format_exception_message(exc);
#if 0
// This is technically not required, and it seems that some exceptions
// don't like to be treated like NSDictionary values...
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2010-04-13 05:26:55 UTC (rev 3922)
+++ MacRuby/trunk/vm.cpp 2010-04-13 21:13:55 UTC (rev 3923)
@@ -3837,29 +3837,7 @@
printf("uncaught Objective-C/C++ exception...\n");
std::terminate();
}
-
- VALUE message = rb_vm_call(exc, sel_registerName("message"), 0, NULL,
- false);
- VALUE bt = rb_vm_call(exc, sel_registerName("backtrace"), 0, NULL,
- false);
-
- const long count = (bt != Qnil ? RARRAY_LEN(bt) : 0);
- if (count > 0) {
- for (long i = 0; i < count; i++) {
- const char *bte = RSTRING_PTR(RARRAY_AT(bt, i));
- if (i == 0) {
- printf("%s: %s (%s)\n", bte, RSTRING_PTR(message),
- rb_class2name(*(VALUE *)exc));
- }
- else {
- printf("\tfrom %s\n", bte);
- }
- }
- }
- else {
- printf("%s (%s)\n", RSTRING_PTR(message),
- rb_class2name(*(VALUE *)exc));
- }
+ printf("%s", rb_str_cstr(rb_format_exception_message(exc)));
}
extern "C"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100413/90eebf93/attachment.html>
More information about the macruby-changes
mailing list