[macruby-changes] [1114] MacRuby/branches/experimental/roxor.cpp

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 23 14:59:46 PDT 2009


Revision: 1114
          http://trac.macosforge.org/projects/ruby/changeset/1114
Author:   lsansonetti at apple.com
Date:     2009-03-23 14:59:46 -0700 (Mon, 23 Mar 2009)
Log Message:
-----------
fixed attribute assignment that uses splat arguments

Modified Paths:
--------------
    MacRuby/branches/experimental/roxor.cpp

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-03-23 21:42:31 UTC (rev 1113)
+++ MacRuby/branches/experimental/roxor.cpp	2009-03-23 21:59:46 UTC (rev 1114)
@@ -2,6 +2,7 @@
 
 #define ROXOR_COMPILER_DEBUG	0
 #define ROXOR_VM_DEBUG		0
+#define ROXOR_DUMP_IR		0
 
 #include <llvm/Module.h>
 #include <llvm/DerivedTypes.h>
@@ -858,30 +859,29 @@
 
     std::vector<Value *> args;
     NODE *n = node->nd_args;
+    int argc = 0;
     if (n != NULL) {
-	assert(nd_type(n) == NODE_ARRAY);
-	for (; n != NULL; n = n->nd_next) {
-	    args.push_back(compile_node(n->nd_head));
-	}
+	compile_dispatch_arguments(n, args, &argc);
     }
     if (extra_val != NULL) {
 	args.push_back(extra_val);
+	argc++;
     }
 
     if (mid != idASET) {
 	// A regular attribute assignment (obj.foo = 42)
-	assert(args.size() == 1);
+	assert(argc == 1);
     }
 
     std::vector<Value *> params;
-    const SEL sel = mid_to_sel(mid, args.size());
+    const SEL sel = mid_to_sel(mid, argc);
     void *cache = GET_VM()->method_cache_get(sel, false);
     params.push_back(compile_const_pointer(cache));
     params.push_back(recv);
     params.push_back(compile_const_pointer((void *)sel));
     params.push_back(compile_const_pointer(NULL));
     params.push_back(ConstantInt::get(Type::Int8Ty, 0));
-    params.push_back(ConstantInt::get(Type::Int32Ty, args.size()));
+    params.push_back(ConstantInt::get(Type::Int32Ty, argc));
     for (std::vector<Value *>::iterator i = args.begin();
 	 i != args.end();
 	 ++i) {
@@ -5586,6 +5586,9 @@
     uint64_t elapsedNano = elapsed * sTimebaseInfo.numer / sTimebaseInfo.denom;
 
     printf("compilation/optimization done, took %lld ns\n",  elapsedNano);
+#endif
+
+#if ROXOR_DUMP_IR
     printf("IR dump ----------------------------------------------\n");
     RoxorCompiler::module->dump();
     printf("------------------------------------------------------\n");
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090323/b13810bb/attachment.html>


More information about the macruby-changes mailing list