From: ts Date: 2002-04-06T02:12:41+09:00 Subject: Re: remove_method bug >>>>> "C" == Christoph writes: C> the script demonstrates a remove_method bug The bug is not in #remove_method but in rb_singleton_class() Can you try this patch pigeon% diff -u class.c.old class.c --- class.c.old Fri Apr 5 18:56:44 2002 +++ class.c Fri Apr 5 19:04:49 2002 @@ -695,8 +695,8 @@ DEFER_INTS; if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) && - (BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE) && - rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj) { + ((BUILTIN_TYPE(obj) != T_CLASS && BUILTIN_TYPE(obj) != T_MODULE) || + rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj)) { klass = RBASIC(obj)->klass; } else { pigeon% C> class << a Here it create a singleton class C> def remove_me; end C> def remove_me_too; end C> remove_method :remove_me C> end C> class << a it recreate a new singleton class : this is why it don't find the method C> remove_method :remove_me_too C> rescue NameError => mes C> p mes # => # C> end Guy Decoux