diff options
-rw-r--r-- | gc.c | 10 | ||||
-rw-r--r-- | lib/weakref.rb | 2 |
2 files changed, 11 insertions, 1 deletions
@@ -5305,6 +5305,13 @@ wmap_aref(VALUE self, VALUE wmap) return obj; } +/* Returns +true+ if +key+ is registered */ +static VALUE +wmap_has_key(VALUE self, VALUE key) +{ + return NIL_P(wmap_aref(self, key)) ? Qfalse : Qtrue; +} + /* ------------------------------ GC profiler ------------------------------ @@ -6081,6 +6088,9 @@ Init_GC(void) rb_define_alloc_func(rb_cWeakMap, wmap_allocate); rb_define_method(rb_cWeakMap, "[]=", wmap_aset, 2); rb_define_method(rb_cWeakMap, "[]", wmap_aref, 1); + rb_define_method(rb_cWeakMap, "include?", wmap_has_key, 1); + rb_define_method(rb_cWeakMap, "member?", wmap_has_key, 1); + rb_define_method(rb_cWeakMap, "key?", wmap_has_key, 0); rb_define_private_method(rb_cWeakMap, "finalize", wmap_finalize, 1); } diff --git a/lib/weakref.rb b/lib/weakref.rb index dd2cee16aa..36cbe3f10f 100644 --- a/lib/weakref.rb +++ b/lib/weakref.rb @@ -101,7 +101,7 @@ class WeakRef < Delegator # Returns true if the referenced object is still alive. def weakref_alive? - !!(@@__map[self] or defined?(@delegate_sd_obj)) + @@__map.key?(self) or defined?(@delegate_sd_obj) end end |