ClassBuilder.st
branchjv
changeset 17965 a8a04402986c
parent 17942 fcc608457255
child 17966 8b5df02e171f
--- a/ClassBuilder.st	Fri Sep 07 11:49:18 2012 +0100
+++ b/ClassBuilder.st	Fri Sep 07 13:46:06 2012 +0100
@@ -2026,7 +2026,20 @@
     superClass isNil ifTrue:[
         superFlags := 0
     ] ifFalse:[
-        superFlags := superClass flags bitAnd:(Behavior maskIndexType bitInvert). "preserve other bits"
+        | flags |
+
+        "JV@2012-09-07: Certain classes define class method #flags which
+         returns something different than behavior's flag bits.
+         Obtaing superclass's flags by
+
+            superClass flags
+
+          won't then work as expected. Ask JV for details
+
+          Hence this hack :-(
+         "
+        flags := (Behavior compiledMethodAt: #flags) valueWithReceiver: superClass arguments: #().
+        superFlags := flags bitAnd:(Behavior maskIndexType bitInvert). "preserve other bits"
     ].
 
     oldClass notNil ifTrue:[
@@ -2056,7 +2069,7 @@
     newClass setClassVariableString:classVariableNames.
 
     "Modified: / 18-01-2011 / 20:44:04 / cg"
-    "Modified: / 13-05-2012 / 17:49:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2012 / 13:44:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ClassBuilder methodsFor:'checks'!
@@ -2364,7 +2377,7 @@
 !ClassBuilder class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ClassBuilder.st 10810 2012-05-13 17:32:24Z vranyj1 $'
+    ^ '$Id: ClassBuilder.st 10843 2012-09-07 12:46:06Z vranyj1 $'
 !
 
 version_CVS
@@ -2372,7 +2385,7 @@
 !
 
 version_SVN
-    ^ '$Id: ClassBuilder.st 10810 2012-05-13 17:32:24Z vranyj1 $'
+    ^ '$Id: ClassBuilder.st 10843 2012-09-07 12:46:06Z vranyj1 $'
 ! !
 
 ClassBuilder initialize!