[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