[macruby-changes] [2869] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Oct 20 16:34:03 PDT 2009


Revision: 2869
          http://trac.macosforge.org/projects/ruby/changeset/2869
Author:   lsansonetti at 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;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091020/96c04621/attachment.html>


More information about the macruby-changes mailing list