[macruby-changes] [2108] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Tue Jul 28 22:11:28 PDT 2009


Revision: 2108
          http://trac.macosforge.org/projects/ruby/changeset/2108
Author:   lsansonetti at apple.com
Date:     2009-07-28 22:11:26 -0700 (Tue, 28 Jul 2009)
Log Message:
-----------
better fix than last one

Modified Paths:
--------------
    MacRuby/branches/experimental/compiler.cpp
    MacRuby/branches/experimental/compiler.h

Modified: MacRuby/branches/experimental/compiler.cpp
===================================================================
--- MacRuby/branches/experimental/compiler.cpp	2009-07-29 02:35:18 UTC (rev 2107)
+++ MacRuby/branches/experimental/compiler.cpp	2009-07-29 05:11:26 UTC (rev 2108)
@@ -49,6 +49,7 @@
     current_var_uses = NULL;
     running_block = NULL;
     current_block = false;
+    current_block_chain = false;
     current_block_node = NULL;
     current_block_func = NULL;
     current_opened_class = NULL;
@@ -4125,8 +4126,8 @@
 
 		current_mid = mid;
 		current_instance_method = !singleton_method;
-		const bool old_current_block = current_block;
-		current_block = false;
+		const bool old_current_block_chain = current_block_chain;
+		current_block_chain = false;
 
 		DEBUG_LEVEL_INC();
 		Value *val = compile_node(body);
@@ -4134,7 +4135,7 @@
 		Function *new_function = cast<Function>(val);
 		DEBUG_LEVEL_DEC();
 
-		current_block = old_current_block;
+		current_block_chain = old_current_block_chain;
 		current_mid = 0;
 		current_instance_method = false;
 
@@ -4491,18 +4492,20 @@
 		NODE *old_current_block_node = current_block_node;
 		ID old_current_mid = current_mid;
 		bool old_current_block = current_block;
+		bool old_current_block_chain = current_block_chain;
 		int old_return_from_block = return_from_block;
 		BasicBlock *old_rescue_bb = rescue_bb;
 
 		current_mid = 0;
 		current_block = true;
+		current_block_chain = true;
 
 		assert(node->nd_body != NULL);
 		Value *block = compile_node(node->nd_body);	
 		assert(Function::classof(block));
 
 		BasicBlock *return_from_block_bb = NULL;
-		if (!old_current_block && return_from_block != -1) {
+		if (!old_current_block_chain && return_from_block != -1) {
 		    // The block we just compiled contains one or more
 		    // return expressions! We need to enclose the dispatcher
 		    // call inside an exception handler, since return-from
@@ -4517,6 +4520,7 @@
 		current_loop_end_bb = old_current_loop_end_bb;
 		current_mid = old_current_mid;
 		current_block = old_current_block;
+		current_block_chain = old_current_block_chain;
 
 		current_block_func = cast<Function>(block);
 		current_block_node = node->nd_body;

Modified: MacRuby/branches/experimental/compiler.h
===================================================================
--- MacRuby/branches/experimental/compiler.h	2009-07-29 02:35:18 UTC (rev 2107)
+++ MacRuby/branches/experimental/compiler.h	2009-07-29 05:11:26 UTC (rev 2108)
@@ -84,6 +84,7 @@
 	ID self_id;
 	Value *current_self;
 	bool current_block;
+	bool current_block_chain;
 	Value *current_var_uses;
 	Value *running_block;
 	BasicBlock *begin_bb;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090728/9f84aea3/attachment-0001.html>


More information about the macruby-changes mailing list