--- 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!