ruby-changes:8025
From: yugui <ko1@a...>
Date: Thu, 25 Sep 2008 20:31:47 +0900 (JST)
Subject: [ruby-changes:8025] Ruby:r19550 (trunk): * class.c (rb_make_metaclass): [BUG] Fixed a bus error
yugui 2008-09-25 20:31:02 +0900 (Thu, 25 Sep 2008) New Revision: 19550 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19550 Log: * class.c (rb_make_metaclass): [BUG] Fixed a bus error on the case for metaclass of a class which includes a module. Modified files: trunk/ChangeLog trunk/class.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19549) +++ ChangeLog (revision 19550) @@ -1,3 +1,9 @@ +Thu Sep 25 20:27:54 2008 Yuki Sonoda (Yugui) <yugui@y...> + + * class.c (rb_make_metaclass): [BUG] Fixed a bus error + on the case for metaclass of a class which includes a + module. + Thu Sep 25 19:34:33 2008 Eric Hodel <drbrain@s...> * test/rubygems/*: Update some new tests to use build_rake_in. Index: class.c =================================================================== --- class.c (revision 19549) +++ class.c (revision 19550) @@ -190,7 +190,7 @@ rb_make_metaclass(VALUE obj, VALUE super) { if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) { - VALUE metaclass; + VALUE metaclass, meta_of_super; if (RBASIC(obj)->klass == obj) { /* for meta^(n)-class of Class */ metaclass = rb_class_boot(obj); RBASIC(metaclass)->klass = metaclass; @@ -202,7 +202,12 @@ FL_SET(metaclass, FL_SINGLETON); rb_singleton_class_attached(metaclass, obj); RBASIC(obj)->klass = metaclass; - RCLASS(metaclass)->ptr->super = rb_singleton_class(RCLASS(obj)->ptr->super); + + meta_of_super = RCLASS(obj)->ptr->super; + while (FL_TEST(meta_of_super, T_ICLASS)) { + meta_of_super = RCLASS(meta_of_super)->ptr->super; + } + RCLASS(metaclass)->ptr->super = rb_singleton_class(meta_of_super); return metaclass; } else { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/