Revision
551
Author
lsansonetti@apple.com
Date
2008-09-04 16:49:06 -0700 (Thu, 04 Sep 2008)

Log Message

fix for #122

Modified Paths

Diff

Modified: MacRuby/trunk/vm_insnhelper.c (550 => 551)


--- MacRuby/trunk/vm_insnhelper.c	2008-09-03 23:51:00 UTC (rev 550)
+++ MacRuby/trunk/vm_insnhelper.c	2008-09-04 23:49:06 UTC (rev 551)
@@ -611,12 +611,27 @@
 			new_argv[0] = argv[0];
 			new_argv[1] = h;
 
-			memcpy(cfp->sp - 2, new_argv, sizeof(void *) * 2);
-			cfp->bp -= 2 - num;
-			mn = new_mn;
+			rb_control_frame_t *reg_cfp;
+			rb_control_frame_t *_cfp;
+
+			reg_cfp = cfp;
+			_cfp = vm_push_frame(th, 0, FRAME_MAGIC_CFUNC | (flag << FRAME_MAGIC_MASK_BITS),
+				recv, (VALUE) blockptr, 0, reg_cfp->sp, 0, 1);
+
+			_cfp->method_id = id;
+			_cfp->method_class = klass;
+
+			reg_cfp->sp -= num + 1;
+
 			id = rb_intern(tmp);
-			num = 2;
-			goto rcall_dispatch;
+			val = rb_funcall2(recv, id, 2, (const VALUE *)&new_argv);
+
+			if (reg_cfp != th->cfp + 1)
+			    rb_bug("cfp consistency error - send");
+
+			vm_pop_frame(th);
+
+			return val;
 		    }
 		}
 		mcache->as.rcall.node = mn;
@@ -637,7 +652,6 @@
 
 	    reg_cfp->sp -= num + 1;
 
-
 	    val = rb_objc_call2(recv, klass, mcache->as.rcall.sel, mcache->as.ocall.imp, &mcache->as.ocall.sig, mcache->as.ocall.bs_method, num, reg_cfp->sp + 1);
 
 	    if (reg_cfp != th->cfp + 1)