[macruby-changes] [962] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 17 15:57:08 PDT 2009
Revision: 962
http://trac.macosforge.org/projects/ruby/changeset/962
Author: lsansonetti at apple.com
Date: 2009-03-17 15:57:07 -0700 (Tue, 17 Mar 2009)
Log Message:
-----------
implemented until + added some tests + fixed a test
Modified Paths:
--------------
MacRuby/branches/experimental/roxor.cpp
MacRuby/branches/experimental/test_roxor.rb
Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp 2009-03-17 22:46:33 UTC (rev 961)
+++ MacRuby/branches/experimental/roxor.cpp 2009-03-17 22:57:07 UTC (rev 962)
@@ -3521,28 +3521,34 @@
break;
case NODE_WHILE:
+ case NODE_UNTIL:
{
assert(node->nd_body != NULL);
assert(node->nd_cond != NULL);
Function *f = bb->getParent();
- BasicBlock *whileBB = BasicBlock::Create("while", f);
+ BasicBlock *loopBB = BasicBlock::Create("loop", f);
BasicBlock *bodyBB = BasicBlock::Create("body", f);
BasicBlock *afterBB = BasicBlock::Create("after", f);
- BranchInst::Create(whileBB, bb);
+ BranchInst::Create(loopBB, bb);
- bb = whileBB;
+ bb = loopBB;
Value *condVal = compile_node(node->nd_cond);
- compile_boolean_test(condVal, bodyBB, afterBB);
+ if (nd_type(node) == NODE_WHILE) {
+ compile_boolean_test(condVal, bodyBB, afterBB);
+ }
+ else {
+ compile_boolean_test(condVal, afterBB, bodyBB);
+ }
BasicBlock *old_current_loop_begin_bb = current_loop_begin_bb;
BasicBlock *old_current_loop_end_bb = current_loop_end_bb;
Value *old_current_loop_exit_val = current_loop_exit_val;
- current_loop_begin_bb = whileBB;
+ current_loop_begin_bb = loopBB;
current_loop_end_bb = afterBB;
current_loop_exit_val = NULL;
@@ -3550,7 +3556,7 @@
compile_node(node->nd_body);
bodyBB = bb;
- BranchInst::Create(whileBB, bb);
+ BranchInst::Create(loopBB, bb);
bb = afterBB;
Modified: MacRuby/branches/experimental/test_roxor.rb
===================================================================
--- MacRuby/branches/experimental/test_roxor.rb 2009-03-17 22:46:33 UTC (rev 961)
+++ MacRuby/branches/experimental/test_roxor.rb 2009-03-17 22:57:07 UTC (rev 962)
@@ -415,6 +415,10 @@
p x
}
+ assert 'nil', "x = until 123; 42; end; p x"
+ assert '42', 'x = nil; until x; x = 42; end; p x'
+ assert '42', "x = until nil; break 42; end; p x"
+ assert "nil", "x = until nil; break; end; p x"
assert "42", %q{
foo = [42]
@@ -813,7 +817,7 @@
assert ":ok", %q{
begin
- self.foo
+ foo
rescue => e
p :ok if e.is_a?(NameError)
end
@@ -1095,4 +1099,4 @@
test "symbol" do
assert ":ok", 'p :"#{:ok}"'
-end
\ No newline at end of file
+end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090317/6a92bcd5/attachment.html>
More information about the macruby-changes
mailing list