Revision
2869
Author
lsansonetti@apple.com
Date
2009-10-20 16:33:59 -0700 (Tue, 20 Oct 2009)

Log Message

fixed a couple of ivar slot bugs

Modified Paths

Diff

Modified: MacRuby/trunk/object.c (2868 => 2869)


--- MacRuby/trunk/object.c	2009-10-20 22:11:43 UTC (rev 2868)
+++ MacRuby/trunk/object.c	2009-10-20 23:33:59 UTC (rev 2869)
@@ -222,13 +222,16 @@
 	    else {
 		ROBJECT(dest)->tbl = NULL;
 	    }
-	    ROBJECT(dest)->num_slots = ROBJECT(obj)->num_slots;
-	    if (ROBJECT(dest)->num_slots > 0) {
-		int i;
-		for (i = 0; i < ROBJECT(obj)->num_slots; i++) {
-		    ROBJECT(dest)->slots[i] = ROBJECT(obj)->slots[i];
+	    if (ROBJECT(obj)->num_slots > 0) {
+		if (ROBJECT(dest)->num_slots < ROBJECT(obj)->num_slots) {
+		    rb_vm_regrow_robject_slots(ROBJECT(dest),
+			    ROBJECT(obj)->num_slots);
 		}
+		for (int i = 0; i < ROBJECT(obj)->num_slots; i++) {
+		    GC_WB(&ROBJECT(dest)->slots[i], ROBJECT(obj)->slots[i]);
+		}
 	    }
+	    ROBJECT(dest)->num_slots = ROBJECT(obj)->num_slots;
 	    break;
       case T_CLASS:
       case T_MODULE:

Modified: MacRuby/trunk/vm.h (2868 => 2869)


--- MacRuby/trunk/vm.h	2009-10-20 22:11:43 UTC (rev 2868)
+++ MacRuby/trunk/vm.h	2009-10-20 23:33:59 UTC (rev 2869)
@@ -314,11 +314,11 @@
 {
     unsigned int i;
     VALUE *new_slots = (VALUE *)xmalloc(sizeof(VALUE) * (new_num_slot + 1));
-    for (i = 0; i <= obj->num_slots; i++) {
+    for (i = 0; i < obj->num_slots; i++) {
 	GC_WB(&new_slots[i], obj->slots[i]);
     }
     GC_WB(&obj->slots, new_slots);
-    for (i = obj->num_slots + 1; i < new_num_slot; i++) {
+    for (i = obj->num_slots; i <= new_num_slot; i++) {
 	obj->slots[i] = Qundef;
     }
     obj->num_slots = new_num_slot + 1;