[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]