care for pools
authorClaus Gittinger <cg@exept.de>
Tue, 14 Feb 2006 18:58:59 +0100
changeset 9114 51f597570dda
parent 9113 7637b5e86692
child 9115 65f7004dae93
care for pools
ClassBuilder.st
--- a/ClassBuilder.st	Tue Feb 14 17:23:16 2006 +0100
+++ b/ClassBuilder.st	Tue Feb 14 18:58:59 2006 +0100
@@ -16,10 +16,11 @@
 	instanceVariableNames:'metaclass className environment superClass instanceVariableNames
 		variable words pointers classVariableNames poolDictionaries
 		category comment changed classInstanceVariableNames oldMetaClass
-		oldClass realNewName buildPrivateClass buildingPrivateClass
-		nameKey oldSuperClass newSuperClass superClassChange oldClassVars
-		newClassVars oldInstVars newInstVars classVarChange instVarChange
-		recompileGlobalAccessTo oldClassToBecomeNew'
+		oldClass oldPoolDictionaries oldSuperClass oldClassVars
+		oldInstVars realNewName buildPrivateClass buildingPrivateClass
+		nameKey newSuperClass superClassChange newClassVars newInstVars
+		classVarChange instVarChange recompileGlobalAccessTo
+		oldClassToBecomeNew'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Kernel-Support'
@@ -534,13 +535,17 @@
     newSuperClass := newClass superclass.
     superClassChange := (oldSuperClass ~~ newSuperClass).
 
+    oldPoolDictionaries := oldClass sharedPools.
+
     superClassChange ifFalse:[
         (oldClass instSize == newClass instSize) ifTrue:[
             (oldClass flags == newClass flags) ifTrue:[
                 (oldClass name = newClass name) ifTrue:[
                     (oldInstVars = newInstVars) ifTrue:[
-                        self handleEasyNewClass:newClass.
-                        ^ oldClass
+                        (oldPoolDictionaries = newClass sharedPools) ifTrue:[
+                            self handleEasyNewClass:newClass.
+                            ^ oldClass
+                        ]
                     ]
                 ]
             ]
@@ -1736,7 +1741,7 @@
 !
 
 setupNewClass:newClass fromOld:oldClass
-    |newFlags superFlags nInstVars spec|
+    |newFlags superFlags nInstVars|
 
     (instanceVariableNames size > 0) ifTrue:[
         nInstVars := instanceVariableNames countWords.
@@ -1787,9 +1792,9 @@
         "/ setting first will make new class clear obsolete classvars
         newClass setClassVariableString:(oldClass classVariableString).
         newClass setClassFilename:(oldClass classFilename).
-        (spec := oldClass classAttributes) notNil ifTrue:[
-            newClass classAttributes:spec.
-        ].        
+        newClass setPrimitiveDefinitions:(oldClass primitiveDefinitionsString).
+        newClass setPrimitiveFunctions:(oldClass primitiveFunctionsString).
+        newClass setPrimitiveVariables:(oldClass primitiveVariablesString).
     ].
     newClass setClassVariableString:classVariableNames.
 ! !
@@ -1979,7 +1984,11 @@
         poolDictionaries asCollectionOfWords do:[:eachPoolName |
             |pool|
 
-            pool := environment classNamed:eachPoolName.
+            environment isNamespace ifTrue:[
+                pool := environment classNamed:eachPoolName.
+            ] ifFalse:[
+                pool := environment nameSpace classNamed:eachPoolName.
+            ].
             pool isNil ifTrue:[
                 pool := Smalltalk classNamed:eachPoolName.
             ].
@@ -2040,5 +2049,5 @@
 !ClassBuilder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ClassBuilder.st,v 1.46 2006-02-08 15:32:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ClassBuilder.st,v 1.47 2006-02-14 17:58:59 cg Exp $'
 ! !