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;