[macruby-changes] [222] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon May 26 20:23:05 PDT 2008


Revision: 222
          http://trac.macosforge.org/projects/ruby/changeset/222
Author:   lsansonetti at apple.com
Date:     2008-05-26 20:23:04 -0700 (Mon, 26 May 2008)

Log Message:
-----------
adding more missing write barriers

Modified Paths:
--------------
    MacRuby/trunk/class.c
    MacRuby/trunk/gc.c
    MacRuby/trunk/variable.c

Modified: MacRuby/trunk/class.c
===================================================================
--- MacRuby/trunk/class.c	2008-05-26 06:33:11 UTC (rev 221)
+++ MacRuby/trunk/class.c	2008-05-27 03:23:04 UTC (rev 222)
@@ -23,7 +23,7 @@
 static VALUE
 class_init(VALUE obj)
 {
-    RCLASS(obj)->ptr = ALLOC(rb_classext_t);
+    GC_WB(&RCLASS(obj)->ptr, ALLOC(rb_classext_t));
     RCLASS_IV_TBL(obj) = 0;
     RCLASS_M_TBL(obj) = 0;
     RCLASS_SUPER(obj) = 0;
@@ -348,7 +348,7 @@
     if (RCLASS_IV_TBL(orig)) {
 	ID id;
 
-	RCLASS_IV_TBL(clone) = st_copy(RCLASS_IV_TBL(orig));
+	GC_WB(&RCLASS_IV_TBL(clone), st_copy(RCLASS_IV_TBL(orig)));
 	id = rb_intern("__classpath__");
 	st_delete(RCLASS_IV_TBL(clone), (st_data_t*)&id, 0);
 	id = rb_intern("__classid__");
@@ -356,7 +356,8 @@
     }
     if (RCLASS_M_TBL(orig)) {
 	struct clone_method_data data;
-	data.tbl = RCLASS_M_TBL(clone) = st_init_numtable();
+	GC_WB(&RCLASS_M_TBL(clone), st_init_numtable());
+	data.tbl = RCLASS_M_TBL(clone);
 	data.klass = clone;
 	st_foreach(RCLASS_M_TBL(orig), clone_method,
 	  (st_data_t)&data);
@@ -424,7 +425,7 @@
 {
     if (FL_TEST(klass, FL_SINGLETON)) {
 	if (!RCLASS_IV_TBL(klass)) {
-	    RCLASS_IV_TBL(klass) = st_init_numtable();
+	    GC_WB(&RCLASS_IV_TBL(klass), st_init_numtable());
 	}
 	st_insert(RCLASS_IV_TBL(klass), rb_intern("__attached__"), obj);
     }

Modified: MacRuby/trunk/gc.c
===================================================================
--- MacRuby/trunk/gc.c	2008-05-26 06:33:11 UTC (rev 221)
+++ MacRuby/trunk/gc.c	2008-05-27 03:23:04 UTC (rev 222)
@@ -3057,6 +3057,7 @@
 static void
 __rb_objc_finalize(void *obj, void *data)
 {
+    //printf("finalize %p <%s>\n",obj, class_getName(*(Class *)obj));
     if (rb_objc_is_non_native((VALUE)obj)) {
 	static SEL sel = NULL;
 	long flag;

Modified: MacRuby/trunk/variable.c
===================================================================
--- MacRuby/trunk/variable.c	2008-05-26 06:33:11 UTC (rev 221)
+++ MacRuby/trunk/variable.c	2008-05-27 03:23:04 UTC (rev 222)
@@ -1188,7 +1188,7 @@
                     newptr = ALLOC_N(VALUE, newsize);
                     MEMCPY(newptr, ptr, VALUE, len);
                     RBASIC(obj)->flags &= ~ROBJECT_EMBED;
-                    ROBJECT(obj)->as.heap.ivptr = newptr;
+                    GC_WB(&ROBJECT(obj)->as.heap.ivptr, newptr);
                 }
                 else {
                     REALLOC_N(ROBJECT(obj)->as.heap.ivptr, VALUE, newsize);
@@ -1200,7 +1200,7 @@
                 ROBJECT(obj)->as.heap.iv_index_tbl = iv_index_tbl;
             }
         }
-        ROBJECT_IVPTR(obj)[index] = val;
+        GC_WB(&ROBJECT_IVPTR(obj)[index], val);
 	break;
       case T_CLASS:
       case T_MODULE:
@@ -1301,6 +1301,8 @@
 	}
 	return;
     }
+    if (!FL_TEST(obj, FL_EXIVAR) && !rb_special_const_p(obj))
+	return;
 generic:
 #if WITH_OBJC
     if (generic_iv_dict != NULL) {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080526/f8a2c2be/attachment-0001.htm 


More information about the macruby-changes mailing list