Revision: 2869 http://trac.macosforge.org/projects/ruby/changeset/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: -------------- MacRuby/trunk/object.c MacRuby/trunk/vm.h Modified: MacRuby/trunk/object.c =================================================================== --- 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 =================================================================== --- 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;
participants (1)
-
source_changes@macosforge.org