[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