diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-12-16 07:30:36 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-12-16 07:30:36 +0000 |
commit | e299d511db939232c628d6880e61c32e83937d66 (patch) | |
tree | a2083bfd64a4fb3ed7454a7e7062ff9f7fa1232e /gc.c | |
parent | ce8859c5563493a94f57d3b630e7b9c1d3cd656f (diff) |
first public release of 1.1d (pre1.2) series
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1dev@354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -392,6 +392,10 @@ rb_gc_mark(ptr) obj->as.basic.flags |= FL_MARK; + if (FL_TEST(obj, FL_EXIVAR)) { + return rb_mark_generic_ivar((VALUE)obj); + } + switch (obj->as.basic.flags & T_MASK) { case T_NIL: case T_FIXNUM: @@ -616,7 +620,7 @@ rb_gc_mark(ptr) #define MIN_FREE_OBJ 512 -static void obj_free(); +static void obj_free _((VALUE)); static void gc_sweep() @@ -693,6 +697,10 @@ obj_free(obj) if (need_call_final && FL_TEST(obj, FL_FINALIZE)) { run_final(obj); } + if (FL_TEST(obj, FL_EXIVAR)) { + rb_free_generic_ivar((VALUE)obj); + } + switch (RANY(obj)->as.basic.flags & T_MASK) { case T_OBJECT: if (RANY(obj)->as.object.iv_tbl) { @@ -871,11 +879,14 @@ rb_gc() for (list = Global_List; list; list = list->next) { rb_gc_mark(*list->varptr); } - rb_gc_mark_global_tbl(); + mark_tbl(rb_class_tbl); rb_gc_mark_trap_list(); + /* mark generic instance variables for special constants */ + rb_mark_generic_ivar_tbl(); + gc_sweep(); dont_gc--; } @@ -1070,6 +1081,7 @@ id2ref(obj, id) { unsigned long ptr = NUM2UINT(id); + rb_secure(4); if (FIXNUM_P(ptr)) return (VALUE)ptr; if (ptr == Qtrue) return Qtrue; if (ptr == Qfalse) return Qfalse; |