ObjectFileHandle.st
author Claus Gittinger <cg@exept.de>
Tue, 05 Dec 1995 20:17:25 +0100
changeset 152 d7c2314f393e
parent 151 7f46f760ba45
child 154 04716b86ad29
permissions -rw-r--r--
selective unloading - thats better

"
 COPYRIGHT (c) 1995 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"

Object subclass:#ObjectFileHandle
	 instanceVariableNames:'sysHandle1 sysHandle2 pathName moduleID handleType weakMethodRef
		weakClassRefs'
	 classVariableNames:''
	 poolDictionaries:''
	 category:'System-Compiler'
!

!ObjectFileHandle class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1995 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
!

documentation
"
    not for public use - used by ObjectFileLoader to keep track of loaded modules,
    associating objectFile names and moduleIDs to classes/methods.
"

    "Created: 14.9.1995 / 21:10:55 / claus"
!

history

    "Created: 14.9.1995 / 21:10:55 / claus"
    "Modified: 14.9.1995 / 21:10:55 / claus"
! !

!ObjectFileHandle methodsFor:'change & update'!

update:something with:aParameter from:changedObject
    "my method/class object was collected - unload the underlying objectfile"

    self isObsolete ifTrue:[
	('OBJFLOADER: unloading ' , pathName , '  (method/classes were garbageCollected)') infoPrintNL.
	ObjectFileLoader unloadObjectFile:pathName
    ].

    "Created: 5.12.1995 / 18:05:08 / cg"
! !

!ObjectFileHandle methodsFor:'accessing'!

classes
    "return the classes"

    weakClassRefs isNil ifTrue:[^nil].
    ^ weakClassRefs asArray 

    "Created: 14.9.1995 / 21:13:13 / claus"
!

classes:aCollectionOfClasses 
    "set the classes collection"

    weakClassRefs := WeakArray withAll:aCollectionOfClasses.
    weakClassRefs addDependent:self.
    handleType := #classLibraryObject 

    "Created: 14.9.1995 / 21:13:13 / claus"
!

method
    "return method"

    ^ weakMethodRef at:1 

    "Created: 14.9.1995 / 21:13:13 / claus"
!

method:something
    "set method"

    weakMethodRef := WeakArray with:something.
    weakMethodRef addDependent:self.
    handleType := #methodObject.

    "Created: 14.9.1995 / 21:13:13 / claus"
!

moduleID
    "return moduleID"

    ^ moduleID

    "Created: 14.9.1995 / 21:13:12 / claus"
!

moduleID:something
    "set moduleID"

    moduleID := something.

    "Created: 14.9.1995 / 21:13:12 / claus"
!

pathName
    "return pathName"

    ^ pathName

    "Created: 14.9.1995 / 21:13:12 / claus"
!

pathName:something
    "set pathName"

    pathName := something.

    "Created: 14.9.1995 / 21:13:12 / claus"
!

sysHandle1
    "return sysHandle1"

    ^ sysHandle1

    "Created: 14.9.1995 / 21:13:12 / claus"
!

sysHandle1:something
    "set sysHandle1"

    sysHandle1 := something.

    "Created: 14.9.1995 / 21:13:12 / claus"
!

sysHandle2
    "return sysHandle2"

    ^ sysHandle2

    "Created: 14.9.1995 / 21:13:12 / claus"
!

sysHandle2:something
    "set sysHandle2"

    sysHandle2 := something.

    "Created: 14.9.1995 / 21:13:12 / claus"
! !

!ObjectFileHandle methodsFor:'queries'!

isClassLibHandle
    "return true, if I am a handle for a class library"

    ^ handleType == #classLibraryObject 
!

isMethodHandle
    "return true, if I am a handle for a single compiled method"

    ^ handleType == #methodObject
!

isObsolete
    "return true, if my clases/method has already been removed from
     the image. I.e. if the object file can be unloaded without danger."

    handleType == #classLibraryObject ifTrue:[
	^ (weakClassRefs findFirst:[:x | x notNil]) == 0
    ].
    handleType == #methodObject ifTrue:[
	^ (weakMethodRef at:1) isNil
    ].
    ^ false
! !

!ObjectFileHandle class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileHandle.st,v 1.10 1995-12-05 19:17:25 cg Exp $'
! !