[macruby-changes] [1559] MacRuby/branches/experimental/roxor.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Fri May 8 16:24:25 PDT 2009
Revision: 1559
http://trac.macosforge.org/projects/ruby/changeset/1559
Author: lsansonetti at apple.com
Date: 2009-05-08 16:24:25 -0700 (Fri, 08 May 2009)
Log Message:
-----------
don't stack reentrant blocks
Modified Paths:
--------------
MacRuby/branches/experimental/roxor.cpp
Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp 2009-05-08 12:09:25 UTC (rev 1558)
+++ MacRuby/branches/experimental/roxor.cpp 2009-05-08 23:24:25 UTC (rev 1559)
@@ -7825,15 +7825,21 @@
va_end(ar);
}
- rb_vm_block_t *b = (rb_vm_block_t *)block;
- rb_vm_block_t *old_b = GET_VM()->previous_block;
- GET_VM()->previous_block = GET_VM()->current_block;
- GET_VM()->current_block = b;
+ const bool swap_blocks = block == NULL || block != GET_VM()->current_block;
+ rb_vm_block_t *old_block = NULL;
+ if (swap_blocks) {
+ old_block = GET_VM()->previous_block;
+ GET_VM()->previous_block = GET_VM()->current_block;
+ GET_VM()->current_block = block;
+ }
+
VALUE retval = __rb_vm_dispatch(cache, self, NULL, sel, opt, argc, argv);
- GET_VM()->current_block = GET_VM()->previous_block;
- GET_VM()->previous_block = old_b;
+ if (swap_blocks) {
+ GET_VM()->current_block = GET_VM()->previous_block;
+ GET_VM()->previous_block = old_block;
+ }
if (!GET_VM()->bindings.empty()) {
rb_objc_release(GET_VM()->bindings.back());
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090508/97d9e13f/attachment.html>
More information about the macruby-changes
mailing list