[macruby-changes] [2004] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Wed Jul 8 16:41:46 PDT 2009
Revision: 2004
http://trac.macosforge.org/projects/ruby/changeset/2004
Author: lsansonetti at apple.com
Date: 2009-07-08 16:41:46 -0700 (Wed, 08 Jul 2009)
Log Message:
-----------
finally implemented rb_rescue2()
Modified Paths:
--------------
MacRuby/branches/experimental/eval.c
MacRuby/branches/experimental/vm.cpp
Modified: MacRuby/branches/experimental/eval.c
===================================================================
--- MacRuby/branches/experimental/eval.c 2009-07-08 19:29:01 UTC (rev 2003)
+++ MacRuby/branches/experimental/eval.c 2009-07-08 23:41:46 UTC (rev 2004)
@@ -459,14 +459,6 @@
}
VALUE
-rb_rescue2(VALUE (* b_proc) (ANYARGS), VALUE data1,
- VALUE (* r_proc) (ANYARGS), VALUE data2, ...)
-{
- // TODO
- return (*b_proc)(data1);
-}
-
-VALUE
rb_rescue(VALUE (* b_proc)(ANYARGS), VALUE data1,
VALUE (* r_proc)(ANYARGS), VALUE data2)
{
Modified: MacRuby/branches/experimental/vm.cpp
===================================================================
--- MacRuby/branches/experimental/vm.cpp 2009-07-08 19:29:01 UTC (rev 2003)
+++ MacRuby/branches/experimental/vm.cpp 2009-07-08 23:41:46 UTC (rev 2004)
@@ -3757,6 +3757,41 @@
}
extern "C"
+VALUE
+rb_rescue2(VALUE (*b_proc) (ANYARGS), VALUE data1,
+ VALUE (*r_proc) (ANYARGS), VALUE data2, ...)
+{
+ try {
+ return (*b_proc)(data1);
+ }
+ catch (...) {
+ VALUE exc = rb_vm_current_exception();
+ if (exc != Qnil) {
+ va_list ar;
+ VALUE eclass;
+ bool handled = false;
+
+ va_start(ar, data2);
+ while ((eclass = va_arg(ar, VALUE)) != 0) {
+ if (rb_obj_is_kind_of(exc, eclass)) {
+ handled = true;
+ break;
+ }
+ }
+ va_end(ar);
+
+ if (handled) {
+ if (r_proc != NULL) {
+ return (*r_proc)(data2);
+ }
+ return Qnil;
+ }
+ }
+ throw;
+ }
+}
+
+extern "C"
void
rb_vm_break(VALUE val)
{
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090708/ca5028fc/attachment.html>
More information about the macruby-changes
mailing list