[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