@@ -111,11 +111,7 @@ void* allocCon(VM* vm, int arity, int outer) {
111 Closure* cl = allocate(vm, sizeof(Closure) + sizeof(VAL)*arity,
111 Closure* cl = allocate(vm, sizeof(Closure) + sizeof(VAL)*arity,
113 SETTY(cl, CON);
113 SETTY(cl, CON);
114− if (arity == 0) {
114+
115− cl -> info.c.args = NULL;
117− cl -> info.c.args = (void*)((char*)cl + sizeof(Closure));
119 cl -> info.c.arity = arity;
115 cl -> info.c.arity = arity;
120// cl -> info.c.tag = 42424242;
116// cl -> info.c.tag = 42424242;
121// printf("%p\n", cl);
117// printf("%p\n", cl);
@@ -179,13 +175,11 @@ VAL MKCON(VM* vm, VAL cl, int tag, int arity, ...) {
179// Closure* cl = allocCon(vm, arity);
175// Closure* cl = allocCon(vm, arity);
180 cl -> info.c.tag = tag;
176 cl -> info.c.tag = tag;
181 cl -> info.c.arity = arity;
177 cl -> info.c.arity = arity;
182− VAL* argptr = (VAL*)(cl -> info.c.args);
183 // printf("... %p %p\n", cl, argptr);
178 // printf("... %p %p\n", cl, argptr);
185 for (i = 0; i < arity; ++i) {
180 for (i = 0; i < arity; ++i) {
186− VAL v = va_arg(args, VAL);
181+ VAL v = va_arg(args, VAL);
187− *argptr = v;
182+ cl->info.c.args[i] = v;
190 va_end(args);
184 va_end(args);
191 return cl;
185 return cl;
@@ -193,10 +187,8 @@ VAL MKCON(VM* vm, VAL cl, int tag, int arity, ...) {
194void PROJECT(VM* vm, VAL r, int loc, int arity) {
188void PROJECT(VM* vm, VAL r, int loc, int arity) {
196− VAL* argptr = (VAL*)(r -> info.c.args);
198 for(i = 0; i < arity; ++i) {
190 for(i = 0; i < arity; ++i) {
199− LOC(i+loc) = *argptr++;
191+ LOC(i+loc) = r->info.c.args[i];
@@ -233,8 +225,7 @@ void dumpVal(VAL v) {
233 case CON:
225 case CON:
234 printf("%d[", v->info.c.tag);
226 printf("%d[", v->info.c.tag);
235 for(i = 0; i < v->info.c.arity; ++i) {
227 for(i = 0; i < v->info.c.arity; ++i) {
236− VAL* args = (VAL*)v->info.c.args;
228+ dumpVal(v->info.c.args[i]);
239 printf("] ");
230 printf("] ");