[macruby-changes] [2389] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Aug 26 04:44:04 PDT 2009


Revision: 2389
          http://trac.macosforge.org/projects/ruby/changeset/2389
Author:   vincent.isambart at gmail.com
Date:     2009-08-26 04:44:00 -0700 (Wed, 26 Aug 2009)
Log Message:
-----------
added support for "else" in begin rescue blocks

Modified Paths:
--------------
    MacRuby/trunk/compiler.cpp
    MacRuby/trunk/test_vm/exception.rb

Modified: MacRuby/trunk/compiler.cpp
===================================================================
--- MacRuby/trunk/compiler.cpp	2009-08-26 04:47:33 UTC (rev 2388)
+++ MacRuby/trunk/compiler.cpp	2009-08-26 11:44:00 UTC (rev 2389)
@@ -4436,11 +4436,19 @@
 		BranchInst::Create(begin_bb, bb);
 		bb = begin_bb;
 		rescue_bb = new_rescue_bb;
-		Value *begin_val = compile_node(node->nd_head);
-		BasicBlock *real_begin_bb = bb;
+		Value *not_rescued_val = compile_node(node->nd_head);
 		rescue_bb = old_rescue_bb;
-		BranchInst::Create(merge_bb, bb);
-		
+
+		if (node->nd_else != NULL) {
+		    BasicBlock *else_bb = BasicBlock::Create("else", f);
+		    BranchInst::Create(else_bb, bb);
+		    bb = else_bb;
+		    not_rescued_val = compile_node(node->nd_else);
+		}
+
+		BasicBlock *not_rescued_bb = bb;
+		BranchInst::Create(merge_bb, not_rescued_bb);
+
 		// Landing pad header.
 		bb = new_rescue_bb;
 		compile_landing_pad_header();
@@ -4459,7 +4467,7 @@
 
 		PHINode *pn = PHINode::Create(RubyObjTy, "rescue_result",
 			merge_bb);
-		pn->addIncoming(begin_val, real_begin_bb);
+		pn->addIncoming(not_rescued_val, not_rescued_bb);
 		pn->addIncoming(rescue_val, new_rescue_bb);
 		bb = merge_bb;
 

Modified: MacRuby/trunk/test_vm/exception.rb
===================================================================
--- MacRuby/trunk/test_vm/exception.rb	2009-08-26 04:47:33 UTC (rev 2388)
+++ MacRuby/trunk/test_vm/exception.rb	2009-08-26 11:44:00 UTC (rev 2389)
@@ -9,6 +9,7 @@
 assert "42", "x = 40; begin; raise; x = nil; rescue; x += 1; ensure; x += 1; end; p x"
 
 assert "42", "x = 40; begin; x; rescue => e; else; x = 42 ; end; p x"
+assert ":ok", "p begin; :ko; rescue => e; :ko; else; :ok; end"
 
 assert "42", "x = begin; 42; rescue; nil; end; p x"
 assert "42", "x = begin; raise; nil; rescue; 42; end; p x"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090826/10482503/attachment.html>


More information about the macruby-changes mailing list