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

source_changes at macosforge.org source_changes at macosforge.org
Fri Jul 3 22:46:59 PDT 2009


Revision: 1979
          http://trac.macosforge.org/projects/ruby/changeset/1979
Author:   lsansonetti at apple.com
Date:     2009-07-03 22:46:57 -0700 (Fri, 03 Jul 2009)
Log Message:
-----------
implemented END{} block! very important feature!

Modified Paths:
--------------
    MacRuby/branches/experimental/compiler.cpp
    MacRuby/branches/experimental/test_vm/block.rb

Modified: MacRuby/branches/experimental/compiler.cpp
===================================================================
--- MacRuby/branches/experimental/compiler.cpp	2009-07-04 00:38:03 UTC (rev 1978)
+++ MacRuby/branches/experimental/compiler.cpp	2009-07-04 05:46:57 UTC (rev 1979)
@@ -4486,6 +4486,34 @@
 	    }
 	    break;
 
+	case NODE_POSTEXE:
+	    {
+		assert(node->nd_body != NULL);
+
+		Value *body = compile_node(node->nd_body);
+		assert(Function::classof(body));
+
+		Function *old_current_block_func = current_block_func;
+		NODE *old_current_block_node = current_block_node;
+		current_block_func = cast<Function>(body);
+		current_block_node = node->nd_body;
+
+		std::vector<Value *> params;
+		SEL sel = sel_registerName("at_exit");
+		params.push_back(compile_mcache(sel, false));
+		params.push_back(compile_nsobject());
+		params.push_back(compile_sel(sel));
+		params.push_back(compile_block_create(NULL));
+		params.push_back(ConstantInt::get(Type::Int8Ty, 0));
+		params.push_back(ConstantInt::get(Type::Int32Ty, 0));
+
+		current_block_func = old_current_block_func;
+		current_block_node = old_current_block_node;
+
+		return compile_dispatch_call(params);
+	    }
+	    break;
+
 	default:
 	    compile_node_error("not implemented", node);
     }

Modified: MacRuby/branches/experimental/test_vm/block.rb
===================================================================
--- MacRuby/branches/experimental/test_vm/block.rb	2009-07-04 00:38:03 UTC (rev 1978)
+++ MacRuby/branches/experimental/test_vm/block.rb	2009-07-04 05:46:57 UTC (rev 1979)
@@ -567,3 +567,13 @@
   b.call
   a.call
 }
+
+assert '42', %{
+  END { p 42 }
+}
+
+assert '42', %{
+  $x = 42
+  END { $x += 1 }
+  END { p $x }
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090703/b0df3b90/attachment-0001.html>


More information about the macruby-changes mailing list