Class.st
changeset 944 841e99b1a73a
parent 942 6c1345674ffa
child 953 a3c14f2bf1e9
--- a/Class.st	Thu Feb 08 22:03:51 1996 +0100
+++ b/Class.st	Thu Feb 08 22:04:21 1996 +0100
@@ -929,7 +929,7 @@
      #storeBinaryClassOn:manager:"
 
     |superclassName name flags instvars classvars category classInstVars
-     comment package nSel sel lastCategory
+     comment package nSel sel lastCategory superclassSig sig
      newClass superClass selectors methods cselectors cmethods|
 
     "/ the following order must correlate to
@@ -937,6 +937,7 @@
 
     "/ retrieve
     "/   superclasses name,
+    "/   superclasses signature
     "/   name,
     "/   typeSymbol,
     "/   instVarNames
@@ -947,13 +948,26 @@
     "/   package
 
     superclassName := manager nextObject.
+    superclassSig := manager nextObject.
+
     superclassName notNil ifTrue:[
-	superClass := Smalltalk at:superclassName ifAbsent:nil.
-    ].
-    superClass notNil ifTrue:[
-"/ ('loading superclass: ' ,  superclassName ) printNL.
-	superClass autoload.
-	superClass := Smalltalk at:superclassName.
+        superClass := Smalltalk at:superclassName ifAbsent:nil.
+
+        superClass isNil ifTrue:[
+            BinaryIOManager nonexistingClassSignal
+                raiseRequestWith:'non existent superclass (in binaryLoad)'.
+            ^ nil
+        ].
+
+        "/ ('loading superclass: ' ,  superclassName ) printNL.
+        superClass autoload.
+        superClass := Smalltalk at:superclassName.
+
+        superclassSig ~= superClass signature ifTrue:[
+            BinaryIOManager changedInstLayoutSignal
+                raiseRequestWith:'incompatible superclass (in binaryLoad)'.
+            ^ nil
+        ]
     ].
 
     name := manager nextObject.
@@ -979,21 +993,21 @@
 "/ ('create class: ' ,  name ) printNL.
 
     (superClass notNil or:[superclassName isNil]) ifTrue:[
-	newClass := superClass class
-		name:name asSymbol
-		inEnvironment:Smalltalk
-		subclassOf:superClass
-		instanceVariableNames:instvars
-		variable:false
-		words:false 
-		pointers:true
-		classVariableNames:classvars
-		poolDictionaries:'' 
-		category:category
-		comment:comment 
-		changed:false 
-		classInstanceVariableNames:classInstVars.
-	newClass flags:flags.
+        newClass := superClass class
+                name:name asSymbol
+                inEnvironment:Smalltalk
+                subclassOf:superClass
+                instanceVariableNames:instvars
+                variable:false
+                words:false 
+                pointers:true
+                classVariableNames:classvars
+                poolDictionaries:'' 
+                category:category
+                comment:comment 
+                changed:false 
+                classInstanceVariableNames:classInstVars.
+        newClass flags:flags.
     ].
 
     "/ retrieve
@@ -1006,10 +1020,10 @@
     "/ retrieve
     "/   class methods
     1 to:nSel do:[:i |
-	|m|
-
-	m := Method binaryFullDefinitionFrom:stream manager:manager.
-	cmethods at:i put:m.
+        |m|
+
+        m := Method binaryFullDefinitionFrom:stream manager:manager.
+        cmethods at:i put:m.
     ].
 
     "/ retrieve
@@ -1022,24 +1036,23 @@
     "/ retrieve
     "/   inst methods
     1 to:nSel do:[:i |
-	|m|
-
-	m := Method binaryFullDefinitionFrom:stream manager:manager.
-	methods at:i put:m.
+        |m|
+
+        m := Method binaryFullDefinitionFrom:stream manager:manager.
+        methods at:i put:m.
     ].
 
     (superClass isNil and:[superclassName notNil]) ifTrue:[^ nil].
     newClass isNil ifTrue:[
-	^ nil
+        ^ nil
     ].
-"/    newClass class instanceVariableNames:classInstVars.
 
     newClass package:package.
     newClass selectors:selectors methods:methods.
     newClass class selectors:cselectors methods:cmethods.
     ^ newClass
 
-    "Modified: 22.1.1996 / 13:22:08 / cg"
+    "Modified: 8.2.1996 / 22:00:36 / cg"
 !
 
 storeBinaryClassOn:stream manager:manager
@@ -1047,7 +1060,7 @@
      However, the superclass chain is not stored - at load time, that must
      be either present or autoloadable."
 
-    |nSel s selectors|
+    |nSel s selectors sig|
 
     stream nextPut: manager codeForClass.
 
@@ -1056,6 +1069,7 @@
 
     "/ store
     "/   superclasses name,
+    "/   superclasses signature
     "/   name,
     "/   typeSymbol,
     "/   instVarNames
@@ -1066,41 +1080,47 @@
     "/   package
 
     superclass isNil ifTrue:[
-	s := nil
+        s := nil.
+        sig := 0.
     ] ifFalse:[
-	s := superclass name
+        s := superclass name.
+        sig := superclass signature.
     ].
     s storeBinaryOn:stream manager:manager.
+    sig storeBinaryOn:stream manager:manager.
+
     name storeBinaryOn:stream manager:manager.
     flags storeBinaryOn:stream manager:manager.
     (instvars notNil and:[instvars isEmpty]) ifTrue:[
-	s := nil
+        s := nil
     ] ifFalse:[
-	s := instvars
+        s := instvars
     ].
     s storeBinaryOn:stream manager:manager.
 
     (classvars notNil and:[classvars isEmpty]) ifTrue:[
-	s := nil
+        s := nil
     ] ifFalse:[
-	s := classvars
+        s := classvars
     ].
     s storeBinaryOn:stream manager:manager.
 
     category storeBinaryOn:stream manager:manager.
     s := self class instanceVariableString.
     (s notNil and:[s isEmpty]) ifTrue:[
-	s := nil
+        s := nil
     ].
     s storeBinaryOn:stream manager:manager.
 
     s := comment.
     manager sourceMode == #discard ifTrue:[
-	s := nil
+        s := nil
     ].
     s storeBinaryOn:stream manager:manager.
     package storeBinaryOn:stream manager:manager.
 
+
+    "/
     "/ store
     "/   number of class methods
     selectors := self class selectorArray copy.
@@ -1109,19 +1129,19 @@
     "/ store
     "/   class methods
     selectors do:[:sel |
-	|m m2|
-
-	m := self class compiledMethodAt:sel.
-	m isLazyMethod ifTrue:[
-	    m2 := m makeRealMethod.
-	    m2 notNil ifTrue:[
-		m := m2
-	    ] ifFalse:[
-		('failed to compile: ' , m displayString) errorPrintNL
-	    ]
-	].
-
-	m storeFullBinaryDefinitionOn:stream manager:manager
+        |m m2|
+
+        m := self class compiledMethodAt:sel.
+        m isLazyMethod ifTrue:[
+            m2 := m makeRealMethod.
+            m2 notNil ifTrue:[
+                m := m2
+            ] ifFalse:[
+                ('failed to compile: ' , m displayString) errorPrintNL
+            ]
+        ].
+
+        m storeFullBinaryDefinitionOn:stream manager:manager
     ].
 
     "/ store
@@ -1133,14 +1153,14 @@
     "/ store
     "/   inst methods
     selectors do:[:sel |
-	|m|
-
-	m := self compiledMethodAt:sel.
-	m isLazyMethod ifTrue:[
-	    m := m makeRealMethod
-	].
-
-	m storeFullBinaryDefinitionOn:stream manager:manager
+        |m|
+
+        m := self compiledMethodAt:sel.
+        m isLazyMethod ifTrue:[
+            m := m makeRealMethod
+        ].
+
+        m storeFullBinaryDefinitionOn:stream manager:manager
     ].
 
     "
@@ -1159,7 +1179,7 @@
      cls open.
     "
 
-    "Modified: 16.1.1996 / 17:01:05 / cg"
+    "Modified: 7.2.1996 / 20:03:31 / cg"
 !
 
 storeBinaryDefinitionOf: anAssociation on: stream manager: manager
@@ -3811,6 +3831,6 @@
 !Class class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.134 1996-02-08 19:24:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.135 1996-02-08 21:04:21 cg Exp $'
 ! !
 Class initialize!