Modified: MacRuby/trunk/string.c (2700 => 2701)
--- MacRuby/trunk/string.c 2009-10-01 20:36:45 UTC (rev 2700)
+++ MacRuby/trunk/string.c 2009-10-01 21:14:49 UTC (rev 2701)
@@ -34,6 +34,11 @@
VALUE rb_cSymbol;
VALUE rb_cByteString;
+typedef struct {
+ struct RBasic basic;
+ CFMutableDataRef data;
+} rb_bstr_t;
+
VALUE
rb_str_freeze(VALUE str)
{
@@ -785,13 +790,17 @@
}
else {
// Promoting as bytestring!
- CFDataRef data = CFStringCreateExternalRepresentation(NULL, (CFStringRef)str,
- kCFStringEncodingUTF8, 0);
+ CFDataRef data = CFStringCreateExternalRepresentation(NULL,
+ (CFStringRef)str, kCFStringEncodingUTF8, 0);
assert(data != NULL);
CFMutableDataRef mdata = CFDataCreateMutableCopy(NULL, 0, data);
CFRelease(data);
- *(VALUE *)str = rb_cByteString;
- *(void **)((char *)str + sizeof(void *)) = (void *)mdata;
+
+ rb_bstr_t *bstr = (rb_bstr_t *)str;
+ bstr->basic.klass = rb_cByteString;
+ bstr->basic.flags = 0;
+ GC_WB(&bstr->data, mdata);
+
CFMakeCollectable(mdata);
}
}
@@ -5379,11 +5388,6 @@
#undef INSTALL_METHOD
-typedef struct {
- struct RBasic basic;
- CFMutableDataRef data;
-} rb_bstr_t;
-
CFMutableDataRef
rb_bytestring_wrapped_data(VALUE bstr)
{