[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