--- a/ObjFHandle.st Thu Jan 09 12:39:58 1997 +0100
+++ b/ObjFHandle.st Fri Jan 10 15:49:54 1997 +0100
@@ -170,19 +170,20 @@
"my method/class object was collected - unload the underlying objectfile"
something == weakMethodRef ifTrue:[
- weakMethodRef nilAllCorpsesAndDo:[:idx |].
+ weakMethodRef nilAllCorpsesAndDo:[:idx |].
].
something == weakClassRefs ifTrue:[
- weakClassRefs nilAllCorpsesAndDo:[:idx |].
+ weakClassRefs nilAllCorpsesAndDo:[:idx |].
].
self isObsolete ifTrue:[
- ('OBJFLOADER: unloading ' , pathName , ' (method/classes were garbageCollected)') infoPrintNL.
- ObjectFileLoader unloadObjectFile:pathName
+ ('ObjectFileHandle [info]: unloading ' , pathName , ' (method/classes were garbageCollected)') infoPrintCR.
+ ObjectFileLoader unloadObjectFile:pathName
].
"Created: 5.12.1995 / 18:05:08 / cg"
+ "Modified: 10.1.1997 / 14:58:36 / cg"
! !
!ObjectFileHandle methodsFor:'copying'!
@@ -349,5 +350,5 @@
!ObjectFileHandle class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFHandle.st,v 1.20 1996-10-22 19:34:16 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFHandle.st,v 1.21 1997-01-10 14:49:25 cg Exp $'
! !
--- a/ObjFLoader.st Thu Jan 09 12:39:58 1997 +0100
+++ b/ObjFLoader.st Fri Jan 10 15:49:54 1997 +0100
@@ -741,7 +741,7 @@
"/
handle := self loadDynamicObject:aFileName.
handle isNil ifTrue:[
- ^ nil
+ ^ nil
].
"/
@@ -751,40 +751,40 @@
initAddr := self getFunction:'__' , initName , '_Init' from:handle.
initAddr isNil ifTrue:[
- initAddr := ObjectFileLoader getFunction:'_' , initName , '_Init' from:handle.
- initAddr isNil ifTrue:[
- (self getListOfUndefinedSymbolsFrom:handle) size > 0 ifTrue:[
- self listUndefinedSymbolsIn:handle.
- 'LOADER: undefined symbols in primitive code' infoPrintNL.
- ] ifFalse:[
- ('LOADER: ' , initName , '_Init() lookup failed') errorPrintNL
- ].
-
- "/
- "/ not found - unload
- "/
- self unloadDynamicObject:handle.
- ^ nil
- ]
+ initAddr := ObjectFileLoader getFunction:'_' , initName , '_Init' from:handle.
+ initAddr isNil ifTrue:[
+ (self getListOfUndefinedSymbolsFrom:handle) size > 0 ifTrue:[
+ self listUndefinedSymbolsIn:handle.
+ 'ObjectFileLoader [info]: undefined symbols in primitive code' infoPrintNL.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: ' , initName , '_Init() lookup failed') errorPrintNL
+ ].
+
+ "/
+ "/ not found - unload
+ "/
+ self unloadDynamicObject:handle.
+ ^ nil
+ ]
].
"/
"/ call it - it returns the new method object
"/
m := self
- callInitFunctionAt:initAddr
- specialInit:true
- forceOld:true
- interruptable:false
- argument:2
- identifyAs:handle
- returnsObject:true.
+ callInitFunctionAt:initAddr
+ specialInit:true
+ forceOld:true
+ interruptable:false
+ argument:2
+ identifyAs:handle
+ returnsObject:true.
handle method:m.
^ handle
"Created: 5.12.1995 / 20:59:46 / cg"
- "Modified: 12.7.1996 / 13:26:41 / cg"
+ "Modified: 10.1.1997 / 14:59:55 / cg"
!
loadObjectFile:aFileName
@@ -1519,46 +1519,46 @@
|p l s addr segment name entry|
OperatingSystem getSystemType = 'aix' ifTrue:[
- ^ nil
+ ^ nil
].
l := OrderedCollection new.
p := PipeStream readingFrom:(self nm:aFileName).
p isNil ifTrue:[
- ('LOADER: cannot read names from ' , aFileName) infoPrintNL.
- ^ nil
+ ('ObjectFileLoader [info]: cannot read names from ' , aFileName) infoPrintNL.
+ ^ nil
].
[p atEnd] whileFalse:[
- entry := p nextLine.
- Verbose ifTrue:[
- entry infoPrintNL.
- ].
- entry notNil ifTrue:[
- s := ReadStream on:entry.
- addr := s nextAlphaNumericWord.
- segment := s nextAlphaNumericWord.
- name := s upToEnd withoutSeparators.
- (addr notNil and:[segment notNil and:[name notNil]]) ifTrue:[
- (aPattern match:name) ifTrue:[
- (segmentPattern isNil or:[segmentPattern match:segment]) ifTrue:[
- l add:name.
- Verbose ifTrue:[
- ('found name: ' , name) infoPrintNL.
- ]
- ] ifFalse:[
- Verbose ifTrue:[
- name infoPrint. ' segment mismatch ' infoPrint.
- segmentPattern infoPrint. ' ' infoPrint. segment infoPrintNL.
- ]
- ]
- ]
- ]
- ]
+ entry := p nextLine.
+ Verbose ifTrue:[
+ entry infoPrintNL.
+ ].
+ entry notNil ifTrue:[
+ s := ReadStream on:entry.
+ addr := s nextAlphaNumericWord.
+ segment := s nextAlphaNumericWord.
+ name := s upToEnd withoutSeparators.
+ (addr notNil and:[segment notNil and:[name notNil]]) ifTrue:[
+ (aPattern match:name) ifTrue:[
+ (segmentPattern isNil or:[segmentPattern match:segment]) ifTrue:[
+ l add:name.
+ Verbose ifTrue:[
+ ('found name: ' , name) infoPrintNL.
+ ]
+ ] ifFalse:[
+ Verbose ifTrue:[
+ name infoPrint. ' segment mismatch ' infoPrint.
+ segmentPattern infoPrint. ' ' infoPrint. segment infoPrintNL.
+ ]
+ ]
+ ]
+ ]
+ ]
].
p close.
^ l
- "Modified: 7.3.1996 / 19:20:01 / cg"
+ "Modified: 10.1.1997 / 15:00:27 / cg"
!
releaseSymbolTable
@@ -1616,149 +1616,149 @@
functions newFunction|
PreviouslyLoadedObjects notNil ifTrue:[
- PreviouslyLoadedObjects do:[:entry |
- |fileName handle cls sel|
-
- fileName := entry key.
- handle := entry value.
- handle moduleID:nil.
-
- handle isClassLibHandle ifTrue:[
- ('OBJFLOADER: reloading classes in ' , fileName , ' ...') infoPrintNL.
-
- "/
- "/ remember all byteCode methods (as added in the session)
- "/
- savedByteCodeMethods := IdentityDictionary new.
- savedOldClasses := IdentitySet new.
-
- handle classes do:[:aClass |
- savedMethods := IdentityDictionary new.
- savedOldClasses add:aClass.
- aClass methodDictionary keysAndValuesDo:[:sel :m |
- m byteCode notNil ifTrue:[
- "/ an interpreted method - must be preserved
- savedMethods at:sel put:m
- ]
- ].
- savedMethods notEmpty ifTrue:[
- savedByteCodeMethods at:(aClass name) put:savedMethods
- ].
- ].
- "/
- "/ load the class binary
- "/
- self loadObjectFile:fileName.
-
- "/
- "/ reinstall the byteCode methods
- "/
- savedByteCodeMethods keysAndValuesDo:[:nm :savedMethods |
- |cls|
-
- cls := Smalltalk classNamed:nm.
- savedMethods keysAndValuesDo:[:sel :m |
- cls primAddSelector:sel withMethod:m.
-"/ ('preserved ' , cls name , '>>' , sel) printNL.
- ]
- ].
-
- "/
- "/ validate old-classes vs. new classes.
- "/ and if things look ok, get rid of old stuff
- "/ and make instances become instances of the new class
- "/
- savedOldClasses do:[:oldClass |
- |newClass|
-
- newClass := Smalltalk classNamed:(oldClass name).
- newClass == oldClass ifTrue:[
-"/ ('OBJFLOADER: class ' , oldClass name , ' reloaded.') errorPrintCR.
- ] ifFalse:[
- (newClass isNil or:[newClass == oldClass]) ifTrue:[
- ('OBJFLOADER: reload of ' , oldClass name , ' seemed to fail.') errorPrintCR.
- ] ifFalse:[
+ PreviouslyLoadedObjects do:[:entry |
+ |fileName handle cls sel|
+
+ fileName := entry key.
+ handle := entry value.
+ handle moduleID:nil.
+
+ handle isClassLibHandle ifTrue:[
+ ('ObjectFileLoader [info]: reloading classes in ' , fileName , ' ...') infoPrintCR.
+
+ "/
+ "/ remember all byteCode methods (as added in the session)
+ "/
+ savedByteCodeMethods := IdentityDictionary new.
+ savedOldClasses := IdentitySet new.
+
+ handle classes do:[:aClass |
+ savedMethods := IdentityDictionary new.
+ savedOldClasses add:aClass.
+ aClass methodDictionary keysAndValuesDo:[:sel :m |
+ m byteCode notNil ifTrue:[
+ "/ an interpreted method - must be preserved
+ savedMethods at:sel put:m
+ ]
+ ].
+ savedMethods notEmpty ifTrue:[
+ savedByteCodeMethods at:(aClass name) put:savedMethods
+ ].
+ ].
+ "/
+ "/ load the class binary
+ "/
+ self loadObjectFile:fileName.
+
+ "/
+ "/ reinstall the byteCode methods
+ "/
+ savedByteCodeMethods keysAndValuesDo:[:nm :savedMethods |
+ |cls|
+
+ cls := Smalltalk classNamed:nm.
+ savedMethods keysAndValuesDo:[:sel :m |
+ cls primAddSelector:sel withMethod:m.
+"/ ('preserved ' , cls name , '>>' , sel) printCR.
+ ]
+ ].
+
+ "/
+ "/ validate old-classes vs. new classes.
+ "/ and if things look ok, get rid of old stuff
+ "/ and make instances become instances of the new class
+ "/
+ savedOldClasses do:[:oldClass |
+ |newClass|
+
+ newClass := Smalltalk classNamed:(oldClass name).
+ newClass == oldClass ifTrue:[
+"/ ('ObjectFileLoader [info]: class ' , oldClass name , ' reloaded.') infoPrintCR.
+ ] ifFalse:[
+ (newClass isNil or:[newClass == oldClass]) ifTrue:[
+ ('ObjectFileLoader [warning]: reload of ' , oldClass name , ' seemed to fail.') errorPrintCR.
+ ] ifFalse:[
"/'oldSize: ' print. oldClass instSize print. ' (' print. oldClass instSize class name print. ') ' print.
"/'newSize: ' print. newClass instSize print. ' (' print. oldClass instSize class name print. ') ' printCR.
- oldClass instSize ~~ newClass instSize ifTrue:[
- ('OBJFLOADER: ' , oldClass name , ' has changed its size.') errorPrintCR.
- ] ifFalse:[
- oldClass class instSize ~~ newClass class instSize ifTrue:[
- ('OBJFLOADER: ' , oldClass name , ' class has changed its size.') errorPrintCR.
- ] ifFalse:[
- ('OBJFLOADER: migrating ' , oldClass name) errorPrintCR.
- oldClass becomeSameAs:newClass
- ]
- ]
- ]
- ]
- ]
-
- ] ifFalse:[
- handle isMethodHandle ifTrue:[
- oldDummyMethod := handle method.
- (oldDummyMethod isKindOf:Method) ifFalse:[
- ('OBJFLOADER: ignore obsolete (already collected) method in ' , fileName) infoPrintNL
- ] ifTrue:[
- ('OBJFLOADER: reloading method in ' , fileName , ' ...') infoPrintNL.
- who := oldDummyMethod who.
- newHandle := self loadMethodObjectFile:fileName.
- newHandle isNil ifTrue:[
- ('OBJFLOADER: failed to reload method in ' , fileName , ' ...') errorPrintNL.
- handle moduleID:nil.
- ] ifFalse:[
- m := newHandle method.
- m source:(oldDummyMethod source).
- m package:(oldDummyMethod package).
- who notNil ifTrue:[
- cls := who methodClass.
- sel := who methodSelector.
- m == (cls compiledMethodAt:sel) ifFalse:[
- 'LOADER: oops - loaded method installed wrong' errorPrintNL.
- ] ifTrue:[
+ oldClass instSize ~~ newClass instSize ifTrue:[
+ ('ObjectFileLoader [warning]: ' , oldClass name , ' has changed its size.') errorPrintCR.
+ ] ifFalse:[
+ oldClass class instSize ~~ newClass class instSize ifTrue:[
+ ('ObjectFileLoader [warning]: ' , oldClass name , ' class has changed its size.') errorPrintCR.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: migrating ' , oldClass name) infoPrintCR.
+ oldClass becomeSameAs:newClass
+ ]
+ ]
+ ]
+ ]
+ ]
+
+ ] ifFalse:[
+ handle isMethodHandle ifTrue:[
+ oldDummyMethod := handle method.
+ (oldDummyMethod isKindOf:Method) ifFalse:[
+ ('ObjectFileLoader [info]: ignore obsolete (already collected) method in ' , fileName) infoPrintCR
+ ] ifTrue:[
+ ('ObjectFileLoader [info]: reloading method in ' , fileName , ' ...') infoPrintCR.
+ who := oldDummyMethod who.
+ newHandle := self loadMethodObjectFile:fileName.
+ newHandle isNil ifTrue:[
+ ('ObjectFileLoader [warning]: failed to reload method in ' , fileName , ' ...') errorPrintCR.
+ handle moduleID:nil.
+ ] ifFalse:[
+ m := newHandle method.
+ m source:(oldDummyMethod source).
+ m package:(oldDummyMethod package).
+ who notNil ifTrue:[
+ cls := who methodClass.
+ sel := who methodSelector.
+ m == (cls compiledMethodAt:sel) ifFalse:[
+ 'ObjectFileLoader [warning]: oops - loaded method installed wrong' errorPrintCR.
+ ] ifTrue:[
"/ cls changed:#methodDictionary with:(Array with:sel with:oldDummyMethod).
- ]
- ].
- ]
- ]
- ] ifFalse:[
- handle isFunctionObjectHandle ifTrue:[
- functions := handle functions.
- functions isEmpty ifTrue:[
- ('OBJFLOADER: ignore obsolete (unreferenced) functions in ' , fileName) infoPrintNL
- ] ifFalse:[
- newHandle := self loadDynamicObject:fileName.
- newHandle isNil ifTrue:[
- ('OBJFLOADER: failed to reload ' , fileName , ' ...') errorPrintNL.
- handle moduleID:nil.
- ] ifFalse:[
- ('OBJFLOADER: reloading ' , fileName , ' ...') infoPrintNL.
- functions do:[:oldFunction |
- newFunction := newHandle getFunction:(oldFunction name).
- newFunction isNil ifTrue:[
- ('OBJFLOADER: function: ''' , oldFunction name , ''' no longer present.') errorPrintNL.
- oldFunction code:nil.
- oldFunction setName:oldFunction name moduleHandle:nil.
- ] ifFalse:[
- oldFunction code:(newFunction code).
- oldFunction setName:oldFunction name moduleHandle:newHandle.
- ('OBJFLOADER: rebound function: ''' , oldFunction name , '''.') infoPrintNL.
- ]
- ].
- handle becomeSameAs:newHandle. "/ the old handle is now void
- ]
- ]
- ] ifFalse:[
- ('OBJFLOADER: ignored invalid (obsolete) objectFile handle: ' , handle printString) infoPrintNL.
- ]
- ]
- ]
- ].
- PreviouslyLoadedObjects := nil
+ ]
+ ].
+ ]
+ ]
+ ] ifFalse:[
+ handle isFunctionObjectHandle ifTrue:[
+ functions := handle functions.
+ functions isEmpty ifTrue:[
+ ('ObjectFileLoader [info]: ignore obsolete (unreferenced) functions in ' , fileName) infoPrintCR
+ ] ifFalse:[
+ newHandle := self loadDynamicObject:fileName.
+ newHandle isNil ifTrue:[
+ ('ObjectFileLoader [warning]: failed to reload ' , fileName , ' ...') errorPrintCR.
+ handle moduleID:nil.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: reloading ' , fileName , ' ...') infoPrintCR.
+ functions do:[:oldFunction |
+ newFunction := newHandle getFunction:(oldFunction name).
+ newFunction isNil ifTrue:[
+ ('ObjectFileLoader [info]: function: ''' , oldFunction name , ''' no longer present.') errorPrintCR.
+ oldFunction code:nil.
+ oldFunction setName:oldFunction name moduleHandle:nil.
+ ] ifFalse:[
+ oldFunction code:(newFunction code).
+ oldFunction setName:oldFunction name moduleHandle:newHandle.
+ ('ObjectFileLoader [info]: rebound function: ''' , oldFunction name , '''.') infoPrintCR.
+ ]
+ ].
+ handle becomeSameAs:newHandle. "/ the old handle is now void
+ ]
+ ]
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: ignored invalid (obsolete) objectFile handle: ' , handle printString) infoPrintCR.
+ ]
+ ]
+ ]
+ ].
+ PreviouslyLoadedObjects := nil
]
- "Modified: 1.11.1996 / 16:28:50 / cg"
+ "Modified: 10.1.1997 / 15:06:07 / cg"
!
rememberAllObjectFiles
@@ -1768,19 +1768,19 @@
were loaded in the previous life"
LoadedObjects notNil ifTrue:[
- PreviouslyLoadedObjects := OrderedCollection new.
- LoadedObjects keysAndValuesDo:[:name :handle |
- handle isForCollectedObject ifTrue:[
- ('OBJFLOADER: ignore object for already collected objects in ' , name) infoPrintNL
- ] ifFalse:[
- PreviouslyLoadedObjects add:(name -> handle)
- ]
- ].
- PreviouslyLoadedObjects sort:[:a :b | a value moduleID < b value moduleID].
+ PreviouslyLoadedObjects := OrderedCollection new.
+ LoadedObjects keysAndValuesDo:[:name :handle |
+ handle isForCollectedObject ifTrue:[
+ ('ObjectFileLoader [info]: ignore object for already collected objects in ' , name) infoPrintCR
+ ] ifFalse:[
+ PreviouslyLoadedObjects add:(name -> handle)
+ ]
+ ].
+ PreviouslyLoadedObjects sort:[:a :b | a value moduleID < b value moduleID].
]
"Created: 5.12.1995 / 20:51:07 / cg"
- "Modified: 25.4.1996 / 09:46:08 / cg"
+ "Modified: 10.1.1997 / 15:06:25 / cg"
!
revalidateAllObjectFiles
@@ -2035,36 +2035,36 @@
inits := list select:[:symbol | symbol notNil and:[symbol endsWith:'_Init']].
inits notNil ifTrue:[
- classNames := inits collect:[:symbol |
- (symbol startsWith:'___') ifTrue:[
- symbol copyFrom:4 to:(symbol size - 5)
- ] ifFalse:[
- (symbol startsWith:'__') ifTrue:[
- symbol copyFrom:3 to:(symbol size - 5)
- ] ifFalse:[
- (symbol startsWith:'_') ifTrue:[
- symbol copyFrom:2 to:(symbol size - 5)
- ] ifFalse:[
- symbol
- ]
- ]
- ]
- ].
- "
- autoload those classes
- "
- classNames do:[:aClassName |
- |cls|
-
- (cls := Smalltalk classNamed:aClassName) notNil ifTrue:[
- 'autoloading ' infoPrint. aClassName infoPrintNL.
- cls autoload
- ]
- ]
+ classNames := inits collect:[:symbol |
+ (symbol startsWith:'___') ifTrue:[
+ symbol copyFrom:4 to:(symbol size - 5)
+ ] ifFalse:[
+ (symbol startsWith:'__') ifTrue:[
+ symbol copyFrom:3 to:(symbol size - 5)
+ ] ifFalse:[
+ (symbol startsWith:'_') ifTrue:[
+ symbol copyFrom:2 to:(symbol size - 5)
+ ] ifFalse:[
+ symbol
+ ]
+ ]
+ ]
+ ].
+ "
+ autoload those classes
+ "
+ classNames do:[:aClassName |
+ |cls|
+
+ (cls := Smalltalk classNamed:aClassName) notNil ifTrue:[
+ 'ObjectFileLoader [info]: autoloading ' infoPrint. aClassName infoPrintNL.
+ cls autoload
+ ]
+ ]
].
^ nil
- "Modified: 17.12.1995 / 16:00:27 / cg"
+ "Modified: 10.1.1997 / 15:00:11 / cg"
!
primLoadDynamicObject:pathName into:anInfoBuffer
@@ -2419,7 +2419,7 @@
|key fileName functionName deInitAddr m|
Verbose ifTrue:[
- 'unload module name=' infoPrint. handle pathName infoPrintNL.
+ 'unload module name=' infoPrint. handle pathName infoPrintCR.
].
"/
@@ -2427,48 +2427,48 @@
"/
handle isFunctionObjectHandle ifTrue:[
- handle functions do:[:f |
- f notNil ifTrue:[
- f code:0
- ]
- ].
+ handle functions do:[:f |
+ f notNil ifTrue:[
+ f code:0
+ ]
+ ].
].
(handle isClassLibHandle
or:[handle isMethodHandle]) ifTrue:[
- self deinitializeClassesFromModule:handle.
- self unregisterModule:handle.
+ self deinitializeClassesFromModule:handle.
+ self unregisterModule:handle.
] ifFalse:[
- fileName := handle pathName asFilename baseName.
- functionName := self initFunctionBasenameForFile:fileName.
-
- deInitAddr := self findFunction:functionName suffix:'__deInit' in:handle.
- deInitAddr notNil ifTrue:[
- self callInitFunctionAt:deInitAddr
- specialInit:false
- forceOld:true
- interruptable:false
- argument:0
- identifyAs:handle
- returnsObject:false.
- ]
+ fileName := handle pathName asFilename baseName.
+ functionName := self initFunctionBasenameForFile:fileName.
+
+ deInitAddr := self findFunction:functionName suffix:'__deInit' in:handle.
+ deInitAddr notNil ifTrue:[
+ self callInitFunctionAt:deInitAddr
+ specialInit:false
+ forceOld:true
+ interruptable:false
+ argument:0
+ identifyAs:handle
+ returnsObject:false.
+ ]
].
"/
"/ now, really unload
"/
(self primUnloadDynamicObject:handle) ifFalse:[
- ^ self error:'unloadDynamic failed'
+ ^ self error:'unloadDynamic failed'
].
"/
"/ remove from loaded objects
"/
LoadedObjects notNil ifTrue:[
- key := LoadedObjects keyAtEqualValue:handle.
- key notNil ifTrue:[
- LoadedObjects removeKey:key
- ]
+ key := LoadedObjects keyAtEqualValue:handle.
+ key notNil ifTrue:[
+ LoadedObjects removeKey:key
+ ]
].
Smalltalk flushCachedClasses.
@@ -2477,14 +2477,14 @@
but make it unexecutable. Its still visible in the browser.
"
handle isMethodHandle ifTrue:[
- ((m := handle method) notNil
- and:[m ~~ 0]) ifTrue:[
- m makeUnloaded.
- ObjectMemory flushCaches.
- ]
+ ((m := handle method) notNil
+ and:[m ~~ 0]) ifTrue:[
+ m makeUnloaded.
+ ObjectMemory flushCaches.
+ ]
]
- "Modified: 4.11.1996 / 23:05:20 / cg"
+ "Modified: 10.1.1997 / 15:08:26 / cg"
! !
!ObjectFileLoader class methodsFor:'queries'!
@@ -2800,10 +2800,10 @@
"
need 4 passes to init: 0: let module register itself & create its pools/globals
- 0b check if modules superclasses are all loaded
- 1: let it get var-refs to other pools/globals
- 2: let it install install class, methods and literals
- 3: let it send #initialize to its class object
+ 0b check if modules superclasses are all loaded
+ 1: let it get var-refs to other pools/globals
+ 2: let it install install class, methods and literals
+ 3: let it send #initialize to its class object
"
"/
@@ -2811,15 +2811,15 @@
"/ and define its globals
"/
Verbose ifTrue:[
- 'phase 0 ...' infoPrintNL
+ 'phase 0 ...' infoPrintNL
].
self callInitFunctionAt:initAddr
- specialInit:true
- forceOld:true
- interruptable:false
- argument:0
- identifyAs:handle
- returnsObject:false.
+ specialInit:true
+ forceOld:true
+ interruptable:false
+ argument:0
+ identifyAs:handle
+ returnsObject:false.
"/
"/ check if superclasses are present
@@ -2829,41 +2829,41 @@
badClassName := info at:2.
Verbose ifTrue:[
- '... status is ' infoPrint. info infoPrintNL
+ '... status is ' infoPrint. info infoPrintNL
].
(status ~~ #ok) ifTrue:[
- (status == #missingClass) ifTrue:[
- Transcript showCR:'load failed - missing class: ' , badClassName.
- ^ info
- ].
- (status == #versionMismatch) ifTrue:[
- Transcript showCR:'load failed - version mismatch: ' , badClassName.
- ^ info
- ].
- (status == #unregisteredSuperclass) ifTrue:[
- Transcript showCR:'load failed - unregistered: ' , badClassName.
- ^ info
- ].
- Transcript showCR:'load failed'.
- ^ Array with:#loadFailed with:nil
+ (status == #missingClass) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - missing class: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ (status == #versionMismatch) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - version mismatch: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ (status == #unregisteredSuperclass) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - unregistered: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ ('ObjectFileLoader [error]: load failed') infoPrintCR.
+ ^ Array with:#loadFailed with:nil
].
"/
"/ remaining initialization
"/
Verbose ifTrue:[
- 'phase 1 ...' infoPrintNL
+ 'phase 1 ...' infoPrintNL
].
self moduleInit:1 forceOld:true interruptable:false.
Verbose ifTrue:[
- 'phase 2 ...' infoPrintNL
+ 'phase 2 ...' infoPrintNL
].
self moduleInit:2 forceOld:true interruptable:false.
Verbose ifTrue:[
- 'phase 3 ...' infoPrintNL
+ 'phase 3 ...' infoPrintNL
].
ObjectMemory flushCaches.
self moduleInit:3 forceOld:false interruptable:true.
@@ -2874,23 +2874,24 @@
infoCollection := ObjectMemory binaryModuleInfo.
info := infoCollection at:handle moduleID ifAbsent:nil.
info isNil ifTrue:[
- "/ mhmh registration failed -
- ^ Array with:#registrationFailed with:nil
+ "/ mhmh registration failed -
+ ('ObjectFileLoader [error]: registration failed') infoPrintCR.
+ ^ Array with:#registrationFailed with:nil
].
classNames := info classNames.
classNames size > 0 ifTrue:[
- classes := classNames collect:[:nm | Smalltalk classNamed:nm].
+ classes := classNames collect:[:nm | Smalltalk classNamed:nm].
].
classes size > 0 ifTrue:[
- classes := classes asArray.
- classes := classes , (classes collect:[:aClass | aClass class]).
+ classes := classes asArray.
+ classes := classes , (classes collect:[:aClass | aClass class]).
].
handle classes:classes.
^ Array with:#ok with:nil
- "Modified: 31.10.1996 / 14:02:35 / cg"
+ "Modified: 10.1.1997 / 15:02:42 / cg"
!
revalidateModule:handle
@@ -2915,27 +2916,29 @@
(req'd if a subclass of an autoloaded class has been loaded)"
Verbose ifTrue:[
- 'checkCall for:' infoPrint. aClass name infoPrint. ' -> ' infoPrint.
+ 'checkCall for:' infoPrint. aClass name infoPrint. ' -> ' infoPrint.
].
aClass isBehavior ifFalse:[
- Verbose ifTrue:[
- 'false' infoPrintNL.
- ].
- 'LOADER: check failed - no behavior' infoPrintNL.
- ^ false
+ Verbose ifTrue:[
+ 'false' infoPrintNL.
+ ].
+ 'ObjectFileLoader [warning]: check failed - no behavior' errorPrintCR.
+ ^ false
].
Verbose ifTrue:[
- 'true' infoPrintNL.
+ 'true' infoPrintCR.
].
- ('LOADER: check for ' , aClass name , ' being loaded') infoPrintNL.
+ ('ObjectFileLoader [info]: check for ' , aClass name , ' being loaded') infoPrintCR.
aClass autoload.
(aClass isBehavior and:[aClass isLoaded]) ifTrue:[
- ('LOADER: ok, loaded. continue registration of actual class') infoPrintNL.
- aClass signature. "/ req'd in VM for validation
- ^ true
+ ('ObjectFileLoader [info]: ok, loaded. continue registration of actual class') infoPrintCR.
+ aClass signature. "/ req'd in VM for validation
+ ^ true
].
- ('LOADER: nope - not loaded. fail registration of actual class') infoPrintNL.
+ ('ObjectFileLoader [warning]: superclass not loaded; registration of ' , aClass name , ' fails') errorPrintCR.
^ false
+
+ "Modified: 10.1.1997 / 15:08:15 / cg"
!
unregisterModule:handle
@@ -2945,8 +2948,8 @@
|id|
Verbose ifTrue:[
- 'unregister module; name=' infoPrint. handle pathName infoPrint.
- ' id=' infoPrint. handle moduleID infoPrintNL.
+ 'unregister module; name=' infoPrint. handle pathName infoPrint.
+ ' id=' infoPrint. handle moduleID infoPrintCR.
].
id := handle moduleID.
@@ -2958,6 +2961,6 @@
!ObjectFileLoader class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFLoader.st,v 1.127 1997-01-08 17:29:47 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFLoader.st,v 1.128 1997-01-10 14:49:54 cg Exp $'
! !
ObjectFileLoader initialize!
--- a/ObjectFileHandle.st Thu Jan 09 12:39:58 1997 +0100
+++ b/ObjectFileHandle.st Fri Jan 10 15:49:54 1997 +0100
@@ -170,19 +170,20 @@
"my method/class object was collected - unload the underlying objectfile"
something == weakMethodRef ifTrue:[
- weakMethodRef nilAllCorpsesAndDo:[:idx |].
+ weakMethodRef nilAllCorpsesAndDo:[:idx |].
].
something == weakClassRefs ifTrue:[
- weakClassRefs nilAllCorpsesAndDo:[:idx |].
+ weakClassRefs nilAllCorpsesAndDo:[:idx |].
].
self isObsolete ifTrue:[
- ('OBJFLOADER: unloading ' , pathName , ' (method/classes were garbageCollected)') infoPrintNL.
- ObjectFileLoader unloadObjectFile:pathName
+ ('ObjectFileHandle [info]: unloading ' , pathName , ' (method/classes were garbageCollected)') infoPrintCR.
+ ObjectFileLoader unloadObjectFile:pathName
].
"Created: 5.12.1995 / 18:05:08 / cg"
+ "Modified: 10.1.1997 / 14:58:36 / cg"
! !
!ObjectFileHandle methodsFor:'copying'!
@@ -349,5 +350,5 @@
!ObjectFileHandle class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileHandle.st,v 1.20 1996-10-22 19:34:16 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileHandle.st,v 1.21 1997-01-10 14:49:25 cg Exp $'
! !
--- a/ObjectFileLoader.st Thu Jan 09 12:39:58 1997 +0100
+++ b/ObjectFileLoader.st Fri Jan 10 15:49:54 1997 +0100
@@ -741,7 +741,7 @@
"/
handle := self loadDynamicObject:aFileName.
handle isNil ifTrue:[
- ^ nil
+ ^ nil
].
"/
@@ -751,40 +751,40 @@
initAddr := self getFunction:'__' , initName , '_Init' from:handle.
initAddr isNil ifTrue:[
- initAddr := ObjectFileLoader getFunction:'_' , initName , '_Init' from:handle.
- initAddr isNil ifTrue:[
- (self getListOfUndefinedSymbolsFrom:handle) size > 0 ifTrue:[
- self listUndefinedSymbolsIn:handle.
- 'LOADER: undefined symbols in primitive code' infoPrintNL.
- ] ifFalse:[
- ('LOADER: ' , initName , '_Init() lookup failed') errorPrintNL
- ].
-
- "/
- "/ not found - unload
- "/
- self unloadDynamicObject:handle.
- ^ nil
- ]
+ initAddr := ObjectFileLoader getFunction:'_' , initName , '_Init' from:handle.
+ initAddr isNil ifTrue:[
+ (self getListOfUndefinedSymbolsFrom:handle) size > 0 ifTrue:[
+ self listUndefinedSymbolsIn:handle.
+ 'ObjectFileLoader [info]: undefined symbols in primitive code' infoPrintNL.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: ' , initName , '_Init() lookup failed') errorPrintNL
+ ].
+
+ "/
+ "/ not found - unload
+ "/
+ self unloadDynamicObject:handle.
+ ^ nil
+ ]
].
"/
"/ call it - it returns the new method object
"/
m := self
- callInitFunctionAt:initAddr
- specialInit:true
- forceOld:true
- interruptable:false
- argument:2
- identifyAs:handle
- returnsObject:true.
+ callInitFunctionAt:initAddr
+ specialInit:true
+ forceOld:true
+ interruptable:false
+ argument:2
+ identifyAs:handle
+ returnsObject:true.
handle method:m.
^ handle
"Created: 5.12.1995 / 20:59:46 / cg"
- "Modified: 12.7.1996 / 13:26:41 / cg"
+ "Modified: 10.1.1997 / 14:59:55 / cg"
!
loadObjectFile:aFileName
@@ -1519,46 +1519,46 @@
|p l s addr segment name entry|
OperatingSystem getSystemType = 'aix' ifTrue:[
- ^ nil
+ ^ nil
].
l := OrderedCollection new.
p := PipeStream readingFrom:(self nm:aFileName).
p isNil ifTrue:[
- ('LOADER: cannot read names from ' , aFileName) infoPrintNL.
- ^ nil
+ ('ObjectFileLoader [info]: cannot read names from ' , aFileName) infoPrintNL.
+ ^ nil
].
[p atEnd] whileFalse:[
- entry := p nextLine.
- Verbose ifTrue:[
- entry infoPrintNL.
- ].
- entry notNil ifTrue:[
- s := ReadStream on:entry.
- addr := s nextAlphaNumericWord.
- segment := s nextAlphaNumericWord.
- name := s upToEnd withoutSeparators.
- (addr notNil and:[segment notNil and:[name notNil]]) ifTrue:[
- (aPattern match:name) ifTrue:[
- (segmentPattern isNil or:[segmentPattern match:segment]) ifTrue:[
- l add:name.
- Verbose ifTrue:[
- ('found name: ' , name) infoPrintNL.
- ]
- ] ifFalse:[
- Verbose ifTrue:[
- name infoPrint. ' segment mismatch ' infoPrint.
- segmentPattern infoPrint. ' ' infoPrint. segment infoPrintNL.
- ]
- ]
- ]
- ]
- ]
+ entry := p nextLine.
+ Verbose ifTrue:[
+ entry infoPrintNL.
+ ].
+ entry notNil ifTrue:[
+ s := ReadStream on:entry.
+ addr := s nextAlphaNumericWord.
+ segment := s nextAlphaNumericWord.
+ name := s upToEnd withoutSeparators.
+ (addr notNil and:[segment notNil and:[name notNil]]) ifTrue:[
+ (aPattern match:name) ifTrue:[
+ (segmentPattern isNil or:[segmentPattern match:segment]) ifTrue:[
+ l add:name.
+ Verbose ifTrue:[
+ ('found name: ' , name) infoPrintNL.
+ ]
+ ] ifFalse:[
+ Verbose ifTrue:[
+ name infoPrint. ' segment mismatch ' infoPrint.
+ segmentPattern infoPrint. ' ' infoPrint. segment infoPrintNL.
+ ]
+ ]
+ ]
+ ]
+ ]
].
p close.
^ l
- "Modified: 7.3.1996 / 19:20:01 / cg"
+ "Modified: 10.1.1997 / 15:00:27 / cg"
!
releaseSymbolTable
@@ -1616,149 +1616,149 @@
functions newFunction|
PreviouslyLoadedObjects notNil ifTrue:[
- PreviouslyLoadedObjects do:[:entry |
- |fileName handle cls sel|
-
- fileName := entry key.
- handle := entry value.
- handle moduleID:nil.
-
- handle isClassLibHandle ifTrue:[
- ('OBJFLOADER: reloading classes in ' , fileName , ' ...') infoPrintNL.
-
- "/
- "/ remember all byteCode methods (as added in the session)
- "/
- savedByteCodeMethods := IdentityDictionary new.
- savedOldClasses := IdentitySet new.
-
- handle classes do:[:aClass |
- savedMethods := IdentityDictionary new.
- savedOldClasses add:aClass.
- aClass methodDictionary keysAndValuesDo:[:sel :m |
- m byteCode notNil ifTrue:[
- "/ an interpreted method - must be preserved
- savedMethods at:sel put:m
- ]
- ].
- savedMethods notEmpty ifTrue:[
- savedByteCodeMethods at:(aClass name) put:savedMethods
- ].
- ].
- "/
- "/ load the class binary
- "/
- self loadObjectFile:fileName.
-
- "/
- "/ reinstall the byteCode methods
- "/
- savedByteCodeMethods keysAndValuesDo:[:nm :savedMethods |
- |cls|
-
- cls := Smalltalk classNamed:nm.
- savedMethods keysAndValuesDo:[:sel :m |
- cls primAddSelector:sel withMethod:m.
-"/ ('preserved ' , cls name , '>>' , sel) printNL.
- ]
- ].
-
- "/
- "/ validate old-classes vs. new classes.
- "/ and if things look ok, get rid of old stuff
- "/ and make instances become instances of the new class
- "/
- savedOldClasses do:[:oldClass |
- |newClass|
-
- newClass := Smalltalk classNamed:(oldClass name).
- newClass == oldClass ifTrue:[
-"/ ('OBJFLOADER: class ' , oldClass name , ' reloaded.') errorPrintCR.
- ] ifFalse:[
- (newClass isNil or:[newClass == oldClass]) ifTrue:[
- ('OBJFLOADER: reload of ' , oldClass name , ' seemed to fail.') errorPrintCR.
- ] ifFalse:[
+ PreviouslyLoadedObjects do:[:entry |
+ |fileName handle cls sel|
+
+ fileName := entry key.
+ handle := entry value.
+ handle moduleID:nil.
+
+ handle isClassLibHandle ifTrue:[
+ ('ObjectFileLoader [info]: reloading classes in ' , fileName , ' ...') infoPrintCR.
+
+ "/
+ "/ remember all byteCode methods (as added in the session)
+ "/
+ savedByteCodeMethods := IdentityDictionary new.
+ savedOldClasses := IdentitySet new.
+
+ handle classes do:[:aClass |
+ savedMethods := IdentityDictionary new.
+ savedOldClasses add:aClass.
+ aClass methodDictionary keysAndValuesDo:[:sel :m |
+ m byteCode notNil ifTrue:[
+ "/ an interpreted method - must be preserved
+ savedMethods at:sel put:m
+ ]
+ ].
+ savedMethods notEmpty ifTrue:[
+ savedByteCodeMethods at:(aClass name) put:savedMethods
+ ].
+ ].
+ "/
+ "/ load the class binary
+ "/
+ self loadObjectFile:fileName.
+
+ "/
+ "/ reinstall the byteCode methods
+ "/
+ savedByteCodeMethods keysAndValuesDo:[:nm :savedMethods |
+ |cls|
+
+ cls := Smalltalk classNamed:nm.
+ savedMethods keysAndValuesDo:[:sel :m |
+ cls primAddSelector:sel withMethod:m.
+"/ ('preserved ' , cls name , '>>' , sel) printCR.
+ ]
+ ].
+
+ "/
+ "/ validate old-classes vs. new classes.
+ "/ and if things look ok, get rid of old stuff
+ "/ and make instances become instances of the new class
+ "/
+ savedOldClasses do:[:oldClass |
+ |newClass|
+
+ newClass := Smalltalk classNamed:(oldClass name).
+ newClass == oldClass ifTrue:[
+"/ ('ObjectFileLoader [info]: class ' , oldClass name , ' reloaded.') infoPrintCR.
+ ] ifFalse:[
+ (newClass isNil or:[newClass == oldClass]) ifTrue:[
+ ('ObjectFileLoader [warning]: reload of ' , oldClass name , ' seemed to fail.') errorPrintCR.
+ ] ifFalse:[
"/'oldSize: ' print. oldClass instSize print. ' (' print. oldClass instSize class name print. ') ' print.
"/'newSize: ' print. newClass instSize print. ' (' print. oldClass instSize class name print. ') ' printCR.
- oldClass instSize ~~ newClass instSize ifTrue:[
- ('OBJFLOADER: ' , oldClass name , ' has changed its size.') errorPrintCR.
- ] ifFalse:[
- oldClass class instSize ~~ newClass class instSize ifTrue:[
- ('OBJFLOADER: ' , oldClass name , ' class has changed its size.') errorPrintCR.
- ] ifFalse:[
- ('OBJFLOADER: migrating ' , oldClass name) errorPrintCR.
- oldClass becomeSameAs:newClass
- ]
- ]
- ]
- ]
- ]
-
- ] ifFalse:[
- handle isMethodHandle ifTrue:[
- oldDummyMethod := handle method.
- (oldDummyMethod isKindOf:Method) ifFalse:[
- ('OBJFLOADER: ignore obsolete (already collected) method in ' , fileName) infoPrintNL
- ] ifTrue:[
- ('OBJFLOADER: reloading method in ' , fileName , ' ...') infoPrintNL.
- who := oldDummyMethod who.
- newHandle := self loadMethodObjectFile:fileName.
- newHandle isNil ifTrue:[
- ('OBJFLOADER: failed to reload method in ' , fileName , ' ...') errorPrintNL.
- handle moduleID:nil.
- ] ifFalse:[
- m := newHandle method.
- m source:(oldDummyMethod source).
- m package:(oldDummyMethod package).
- who notNil ifTrue:[
- cls := who methodClass.
- sel := who methodSelector.
- m == (cls compiledMethodAt:sel) ifFalse:[
- 'LOADER: oops - loaded method installed wrong' errorPrintNL.
- ] ifTrue:[
+ oldClass instSize ~~ newClass instSize ifTrue:[
+ ('ObjectFileLoader [warning]: ' , oldClass name , ' has changed its size.') errorPrintCR.
+ ] ifFalse:[
+ oldClass class instSize ~~ newClass class instSize ifTrue:[
+ ('ObjectFileLoader [warning]: ' , oldClass name , ' class has changed its size.') errorPrintCR.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: migrating ' , oldClass name) infoPrintCR.
+ oldClass becomeSameAs:newClass
+ ]
+ ]
+ ]
+ ]
+ ]
+
+ ] ifFalse:[
+ handle isMethodHandle ifTrue:[
+ oldDummyMethod := handle method.
+ (oldDummyMethod isKindOf:Method) ifFalse:[
+ ('ObjectFileLoader [info]: ignore obsolete (already collected) method in ' , fileName) infoPrintCR
+ ] ifTrue:[
+ ('ObjectFileLoader [info]: reloading method in ' , fileName , ' ...') infoPrintCR.
+ who := oldDummyMethod who.
+ newHandle := self loadMethodObjectFile:fileName.
+ newHandle isNil ifTrue:[
+ ('ObjectFileLoader [warning]: failed to reload method in ' , fileName , ' ...') errorPrintCR.
+ handle moduleID:nil.
+ ] ifFalse:[
+ m := newHandle method.
+ m source:(oldDummyMethod source).
+ m package:(oldDummyMethod package).
+ who notNil ifTrue:[
+ cls := who methodClass.
+ sel := who methodSelector.
+ m == (cls compiledMethodAt:sel) ifFalse:[
+ 'ObjectFileLoader [warning]: oops - loaded method installed wrong' errorPrintCR.
+ ] ifTrue:[
"/ cls changed:#methodDictionary with:(Array with:sel with:oldDummyMethod).
- ]
- ].
- ]
- ]
- ] ifFalse:[
- handle isFunctionObjectHandle ifTrue:[
- functions := handle functions.
- functions isEmpty ifTrue:[
- ('OBJFLOADER: ignore obsolete (unreferenced) functions in ' , fileName) infoPrintNL
- ] ifFalse:[
- newHandle := self loadDynamicObject:fileName.
- newHandle isNil ifTrue:[
- ('OBJFLOADER: failed to reload ' , fileName , ' ...') errorPrintNL.
- handle moduleID:nil.
- ] ifFalse:[
- ('OBJFLOADER: reloading ' , fileName , ' ...') infoPrintNL.
- functions do:[:oldFunction |
- newFunction := newHandle getFunction:(oldFunction name).
- newFunction isNil ifTrue:[
- ('OBJFLOADER: function: ''' , oldFunction name , ''' no longer present.') errorPrintNL.
- oldFunction code:nil.
- oldFunction setName:oldFunction name moduleHandle:nil.
- ] ifFalse:[
- oldFunction code:(newFunction code).
- oldFunction setName:oldFunction name moduleHandle:newHandle.
- ('OBJFLOADER: rebound function: ''' , oldFunction name , '''.') infoPrintNL.
- ]
- ].
- handle becomeSameAs:newHandle. "/ the old handle is now void
- ]
- ]
- ] ifFalse:[
- ('OBJFLOADER: ignored invalid (obsolete) objectFile handle: ' , handle printString) infoPrintNL.
- ]
- ]
- ]
- ].
- PreviouslyLoadedObjects := nil
+ ]
+ ].
+ ]
+ ]
+ ] ifFalse:[
+ handle isFunctionObjectHandle ifTrue:[
+ functions := handle functions.
+ functions isEmpty ifTrue:[
+ ('ObjectFileLoader [info]: ignore obsolete (unreferenced) functions in ' , fileName) infoPrintCR
+ ] ifFalse:[
+ newHandle := self loadDynamicObject:fileName.
+ newHandle isNil ifTrue:[
+ ('ObjectFileLoader [warning]: failed to reload ' , fileName , ' ...') errorPrintCR.
+ handle moduleID:nil.
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: reloading ' , fileName , ' ...') infoPrintCR.
+ functions do:[:oldFunction |
+ newFunction := newHandle getFunction:(oldFunction name).
+ newFunction isNil ifTrue:[
+ ('ObjectFileLoader [info]: function: ''' , oldFunction name , ''' no longer present.') errorPrintCR.
+ oldFunction code:nil.
+ oldFunction setName:oldFunction name moduleHandle:nil.
+ ] ifFalse:[
+ oldFunction code:(newFunction code).
+ oldFunction setName:oldFunction name moduleHandle:newHandle.
+ ('ObjectFileLoader [info]: rebound function: ''' , oldFunction name , '''.') infoPrintCR.
+ ]
+ ].
+ handle becomeSameAs:newHandle. "/ the old handle is now void
+ ]
+ ]
+ ] ifFalse:[
+ ('ObjectFileLoader [info]: ignored invalid (obsolete) objectFile handle: ' , handle printString) infoPrintCR.
+ ]
+ ]
+ ]
+ ].
+ PreviouslyLoadedObjects := nil
]
- "Modified: 1.11.1996 / 16:28:50 / cg"
+ "Modified: 10.1.1997 / 15:06:07 / cg"
!
rememberAllObjectFiles
@@ -1768,19 +1768,19 @@
were loaded in the previous life"
LoadedObjects notNil ifTrue:[
- PreviouslyLoadedObjects := OrderedCollection new.
- LoadedObjects keysAndValuesDo:[:name :handle |
- handle isForCollectedObject ifTrue:[
- ('OBJFLOADER: ignore object for already collected objects in ' , name) infoPrintNL
- ] ifFalse:[
- PreviouslyLoadedObjects add:(name -> handle)
- ]
- ].
- PreviouslyLoadedObjects sort:[:a :b | a value moduleID < b value moduleID].
+ PreviouslyLoadedObjects := OrderedCollection new.
+ LoadedObjects keysAndValuesDo:[:name :handle |
+ handle isForCollectedObject ifTrue:[
+ ('ObjectFileLoader [info]: ignore object for already collected objects in ' , name) infoPrintCR
+ ] ifFalse:[
+ PreviouslyLoadedObjects add:(name -> handle)
+ ]
+ ].
+ PreviouslyLoadedObjects sort:[:a :b | a value moduleID < b value moduleID].
]
"Created: 5.12.1995 / 20:51:07 / cg"
- "Modified: 25.4.1996 / 09:46:08 / cg"
+ "Modified: 10.1.1997 / 15:06:25 / cg"
!
revalidateAllObjectFiles
@@ -2035,36 +2035,36 @@
inits := list select:[:symbol | symbol notNil and:[symbol endsWith:'_Init']].
inits notNil ifTrue:[
- classNames := inits collect:[:symbol |
- (symbol startsWith:'___') ifTrue:[
- symbol copyFrom:4 to:(symbol size - 5)
- ] ifFalse:[
- (symbol startsWith:'__') ifTrue:[
- symbol copyFrom:3 to:(symbol size - 5)
- ] ifFalse:[
- (symbol startsWith:'_') ifTrue:[
- symbol copyFrom:2 to:(symbol size - 5)
- ] ifFalse:[
- symbol
- ]
- ]
- ]
- ].
- "
- autoload those classes
- "
- classNames do:[:aClassName |
- |cls|
-
- (cls := Smalltalk classNamed:aClassName) notNil ifTrue:[
- 'autoloading ' infoPrint. aClassName infoPrintNL.
- cls autoload
- ]
- ]
+ classNames := inits collect:[:symbol |
+ (symbol startsWith:'___') ifTrue:[
+ symbol copyFrom:4 to:(symbol size - 5)
+ ] ifFalse:[
+ (symbol startsWith:'__') ifTrue:[
+ symbol copyFrom:3 to:(symbol size - 5)
+ ] ifFalse:[
+ (symbol startsWith:'_') ifTrue:[
+ symbol copyFrom:2 to:(symbol size - 5)
+ ] ifFalse:[
+ symbol
+ ]
+ ]
+ ]
+ ].
+ "
+ autoload those classes
+ "
+ classNames do:[:aClassName |
+ |cls|
+
+ (cls := Smalltalk classNamed:aClassName) notNil ifTrue:[
+ 'ObjectFileLoader [info]: autoloading ' infoPrint. aClassName infoPrintNL.
+ cls autoload
+ ]
+ ]
].
^ nil
- "Modified: 17.12.1995 / 16:00:27 / cg"
+ "Modified: 10.1.1997 / 15:00:11 / cg"
!
primLoadDynamicObject:pathName into:anInfoBuffer
@@ -2419,7 +2419,7 @@
|key fileName functionName deInitAddr m|
Verbose ifTrue:[
- 'unload module name=' infoPrint. handle pathName infoPrintNL.
+ 'unload module name=' infoPrint. handle pathName infoPrintCR.
].
"/
@@ -2427,48 +2427,48 @@
"/
handle isFunctionObjectHandle ifTrue:[
- handle functions do:[:f |
- f notNil ifTrue:[
- f code:0
- ]
- ].
+ handle functions do:[:f |
+ f notNil ifTrue:[
+ f code:0
+ ]
+ ].
].
(handle isClassLibHandle
or:[handle isMethodHandle]) ifTrue:[
- self deinitializeClassesFromModule:handle.
- self unregisterModule:handle.
+ self deinitializeClassesFromModule:handle.
+ self unregisterModule:handle.
] ifFalse:[
- fileName := handle pathName asFilename baseName.
- functionName := self initFunctionBasenameForFile:fileName.
-
- deInitAddr := self findFunction:functionName suffix:'__deInit' in:handle.
- deInitAddr notNil ifTrue:[
- self callInitFunctionAt:deInitAddr
- specialInit:false
- forceOld:true
- interruptable:false
- argument:0
- identifyAs:handle
- returnsObject:false.
- ]
+ fileName := handle pathName asFilename baseName.
+ functionName := self initFunctionBasenameForFile:fileName.
+
+ deInitAddr := self findFunction:functionName suffix:'__deInit' in:handle.
+ deInitAddr notNil ifTrue:[
+ self callInitFunctionAt:deInitAddr
+ specialInit:false
+ forceOld:true
+ interruptable:false
+ argument:0
+ identifyAs:handle
+ returnsObject:false.
+ ]
].
"/
"/ now, really unload
"/
(self primUnloadDynamicObject:handle) ifFalse:[
- ^ self error:'unloadDynamic failed'
+ ^ self error:'unloadDynamic failed'
].
"/
"/ remove from loaded objects
"/
LoadedObjects notNil ifTrue:[
- key := LoadedObjects keyAtEqualValue:handle.
- key notNil ifTrue:[
- LoadedObjects removeKey:key
- ]
+ key := LoadedObjects keyAtEqualValue:handle.
+ key notNil ifTrue:[
+ LoadedObjects removeKey:key
+ ]
].
Smalltalk flushCachedClasses.
@@ -2477,14 +2477,14 @@
but make it unexecutable. Its still visible in the browser.
"
handle isMethodHandle ifTrue:[
- ((m := handle method) notNil
- and:[m ~~ 0]) ifTrue:[
- m makeUnloaded.
- ObjectMemory flushCaches.
- ]
+ ((m := handle method) notNil
+ and:[m ~~ 0]) ifTrue:[
+ m makeUnloaded.
+ ObjectMemory flushCaches.
+ ]
]
- "Modified: 4.11.1996 / 23:05:20 / cg"
+ "Modified: 10.1.1997 / 15:08:26 / cg"
! !
!ObjectFileLoader class methodsFor:'queries'!
@@ -2800,10 +2800,10 @@
"
need 4 passes to init: 0: let module register itself & create its pools/globals
- 0b check if modules superclasses are all loaded
- 1: let it get var-refs to other pools/globals
- 2: let it install install class, methods and literals
- 3: let it send #initialize to its class object
+ 0b check if modules superclasses are all loaded
+ 1: let it get var-refs to other pools/globals
+ 2: let it install install class, methods and literals
+ 3: let it send #initialize to its class object
"
"/
@@ -2811,15 +2811,15 @@
"/ and define its globals
"/
Verbose ifTrue:[
- 'phase 0 ...' infoPrintNL
+ 'phase 0 ...' infoPrintNL
].
self callInitFunctionAt:initAddr
- specialInit:true
- forceOld:true
- interruptable:false
- argument:0
- identifyAs:handle
- returnsObject:false.
+ specialInit:true
+ forceOld:true
+ interruptable:false
+ argument:0
+ identifyAs:handle
+ returnsObject:false.
"/
"/ check if superclasses are present
@@ -2829,41 +2829,41 @@
badClassName := info at:2.
Verbose ifTrue:[
- '... status is ' infoPrint. info infoPrintNL
+ '... status is ' infoPrint. info infoPrintNL
].
(status ~~ #ok) ifTrue:[
- (status == #missingClass) ifTrue:[
- Transcript showCR:'load failed - missing class: ' , badClassName.
- ^ info
- ].
- (status == #versionMismatch) ifTrue:[
- Transcript showCR:'load failed - version mismatch: ' , badClassName.
- ^ info
- ].
- (status == #unregisteredSuperclass) ifTrue:[
- Transcript showCR:'load failed - unregistered: ' , badClassName.
- ^ info
- ].
- Transcript showCR:'load failed'.
- ^ Array with:#loadFailed with:nil
+ (status == #missingClass) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - missing class: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ (status == #versionMismatch) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - version mismatch: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ (status == #unregisteredSuperclass) ifTrue:[
+ ('ObjectFileLoader [error]: load failed - unregistered: ' , badClassName) infoPrintCR.
+ ^ info
+ ].
+ ('ObjectFileLoader [error]: load failed') infoPrintCR.
+ ^ Array with:#loadFailed with:nil
].
"/
"/ remaining initialization
"/
Verbose ifTrue:[
- 'phase 1 ...' infoPrintNL
+ 'phase 1 ...' infoPrintNL
].
self moduleInit:1 forceOld:true interruptable:false.
Verbose ifTrue:[
- 'phase 2 ...' infoPrintNL
+ 'phase 2 ...' infoPrintNL
].
self moduleInit:2 forceOld:true interruptable:false.
Verbose ifTrue:[
- 'phase 3 ...' infoPrintNL
+ 'phase 3 ...' infoPrintNL
].
ObjectMemory flushCaches.
self moduleInit:3 forceOld:false interruptable:true.
@@ -2874,23 +2874,24 @@
infoCollection := ObjectMemory binaryModuleInfo.
info := infoCollection at:handle moduleID ifAbsent:nil.
info isNil ifTrue:[
- "/ mhmh registration failed -
- ^ Array with:#registrationFailed with:nil
+ "/ mhmh registration failed -
+ ('ObjectFileLoader [error]: registration failed') infoPrintCR.
+ ^ Array with:#registrationFailed with:nil
].
classNames := info classNames.
classNames size > 0 ifTrue:[
- classes := classNames collect:[:nm | Smalltalk classNamed:nm].
+ classes := classNames collect:[:nm | Smalltalk classNamed:nm].
].
classes size > 0 ifTrue:[
- classes := classes asArray.
- classes := classes , (classes collect:[:aClass | aClass class]).
+ classes := classes asArray.
+ classes := classes , (classes collect:[:aClass | aClass class]).
].
handle classes:classes.
^ Array with:#ok with:nil
- "Modified: 31.10.1996 / 14:02:35 / cg"
+ "Modified: 10.1.1997 / 15:02:42 / cg"
!
revalidateModule:handle
@@ -2915,27 +2916,29 @@
(req'd if a subclass of an autoloaded class has been loaded)"
Verbose ifTrue:[
- 'checkCall for:' infoPrint. aClass name infoPrint. ' -> ' infoPrint.
+ 'checkCall for:' infoPrint. aClass name infoPrint. ' -> ' infoPrint.
].
aClass isBehavior ifFalse:[
- Verbose ifTrue:[
- 'false' infoPrintNL.
- ].
- 'LOADER: check failed - no behavior' infoPrintNL.
- ^ false
+ Verbose ifTrue:[
+ 'false' infoPrintNL.
+ ].
+ 'ObjectFileLoader [warning]: check failed - no behavior' errorPrintCR.
+ ^ false
].
Verbose ifTrue:[
- 'true' infoPrintNL.
+ 'true' infoPrintCR.
].
- ('LOADER: check for ' , aClass name , ' being loaded') infoPrintNL.
+ ('ObjectFileLoader [info]: check for ' , aClass name , ' being loaded') infoPrintCR.
aClass autoload.
(aClass isBehavior and:[aClass isLoaded]) ifTrue:[
- ('LOADER: ok, loaded. continue registration of actual class') infoPrintNL.
- aClass signature. "/ req'd in VM for validation
- ^ true
+ ('ObjectFileLoader [info]: ok, loaded. continue registration of actual class') infoPrintCR.
+ aClass signature. "/ req'd in VM for validation
+ ^ true
].
- ('LOADER: nope - not loaded. fail registration of actual class') infoPrintNL.
+ ('ObjectFileLoader [warning]: superclass not loaded; registration of ' , aClass name , ' fails') errorPrintCR.
^ false
+
+ "Modified: 10.1.1997 / 15:08:15 / cg"
!
unregisterModule:handle
@@ -2945,8 +2948,8 @@
|id|
Verbose ifTrue:[
- 'unregister module; name=' infoPrint. handle pathName infoPrint.
- ' id=' infoPrint. handle moduleID infoPrintNL.
+ 'unregister module; name=' infoPrint. handle pathName infoPrint.
+ ' id=' infoPrint. handle moduleID infoPrintCR.
].
id := handle moduleID.
@@ -2958,6 +2961,6 @@
!ObjectFileLoader class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileLoader.st,v 1.127 1997-01-08 17:29:47 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileLoader.st,v 1.128 1997-01-10 14:49:54 cg Exp $'
! !
ObjectFileLoader initialize!