[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