summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-02 14:42:08 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-02 14:42:08 +0000
commit2156870525be05f0bd769af141c3f6cff9fff8c4 (patch)
tree3e6db7f9ecee480edff058e18bc7211a53296f64 /gc.c
parent8581164ea67a13fad5e7d56aa4aa75a87f9eafb3 (diff)
* ruby.h (struct RArray): embed small arrays.
(RARRAY_LEN): defined for accessing array members. (RARRAY_PTR): ditto. * array.c: use RARRAY_LEN and RARRAY_PTR. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/gc.c b/gc.c
index 9bd44f30cb..0ae9bb62a0 100644
--- a/gc.c
+++ b/gc.c
@@ -926,12 +926,12 @@ gc_mark_children(VALUE ptr, int lev)
case T_ARRAY:
if (FL_TEST(obj, ELTS_SHARED)) {
- ptr = obj->as.array.aux.shared;
+ ptr = obj->as.array.as.heap.aux.shared;
goto again;
}
else {
- long i, len = obj->as.array.len;
- VALUE *ptr = obj->as.array.ptr;
+ long i, len = RARRAY_LEN(obj);
+ VALUE *ptr = RARRAY_PTR(obj);
for (i=0; i < len; i++) {
gc_mark(*ptr++, lev);
@@ -945,9 +945,8 @@ gc_mark_children(VALUE ptr, int lev)
goto again;
case T_STRING:
-#define STR_NOEMBED FL_USER1 /* copied from string.c */
#define STR_ASSOC FL_USER3 /* copied from string.c */
- if (FL_TEST(obj, STR_NOEMBED) && FL_ANY(obj, ELTS_SHARED|STR_ASSOC)) {
+ if (FL_TEST(obj, RSTRING_NOEMBED) && FL_ANY(obj, ELTS_SHARED|STR_ASSOC)) {
ptr = obj->as.string.as.heap.aux.shared;
goto again;
}
@@ -1175,14 +1174,15 @@ obj_free(VALUE obj)
}
break;
case T_STRING:
- if (FL_TEST(obj, STR_NOEMBED) &&
+ if (FL_TEST(obj, RSTRING_NOEMBED) &&
RANY(obj)->as.string.as.heap.ptr && !FL_TEST(obj, ELTS_SHARED)) {
RUBY_CRITICAL(free(RANY(obj)->as.string.as.heap.ptr));
}
break;
case T_ARRAY:
- if (RANY(obj)->as.array.ptr && !FL_TEST(obj, ELTS_SHARED)) {
- RUBY_CRITICAL(free(RANY(obj)->as.array.ptr));
+ if (FL_TEST(obj, RARRAY_NOEMBED) &&
+ RANY(obj)->as.array.as.heap.ptr && !FL_TEST(obj, ELTS_SHARED)) {
+ RUBY_CRITICAL(free(RANY(obj)->as.array.as.heap.ptr));
}
break;
case T_HASH:
@@ -1833,17 +1833,17 @@ run_final(VALUE obj)
rb_thread_critical = Qtrue;
args[1] = 0;
args[2] = (VALUE)ruby_safe_level;
- for (i=0; i<RARRAY(finalizers)->len; i++) {
- args[0] = RARRAY(finalizers)->ptr[i];
+ for (i=0; i<RARRAY_LEN(finalizers); i++) {
+ args[0] = RARRAY_PTR(finalizers)[i];
if (!args[1]) args[1] = rb_ary_new3(1, objid);
rb_protect((VALUE(*)(VALUE))run_single_final, (VALUE)args, &status);
}
if (finalizer_table && st_delete(finalizer_table, (st_data_t*)&obj, &table)) {
- for (i=0; i<RARRAY(table)->len; i++) {
- VALUE final = RARRAY(table)->ptr[i];
- args[0] = RARRAY(final)->ptr[1];
+ for (i=0; i<RARRAY_LEN(table); i++) {
+ VALUE final = RARRAY_PTR(table)[i];
+ args[0] = RARRAY_PTR(final)[1];
if (!args[1]) args[1] = rb_ary_new3(1, objid);
- args[2] = FIX2INT(RARRAY(final)->ptr[0]);
+ args[2] = FIX2INT(RARRAY_PTR(final)[0]);
rb_protect((VALUE(*)(VALUE))run_single_final, (VALUE)args, &status);
}
}