fixed the keep-last-file-open mechanism (I hope)
this might need testing.
--- a/Method.st Sat Nov 27 18:32:39 1999 +0100
+++ b/Method.st Mon Nov 29 14:38:02 1999 +0100
@@ -415,26 +415,6 @@
]
].
- "/ keep the last source file open, because open/close
- "/ operations maybe slow on NFS-mounted file systems.
- "/ Since the reference to the file is weak, it will be closed
- "/ automatically if the file is not referenced for a while.
- "/ Neat trick.
-
- LastFileLock critical:[
- aStream := LastFileReference at:1.
- LastFileReference at:1 put:0.
-
- aStream == 0 ifTrue:[
- aStream := nil.
- ] ifFalse:[
- LastSourceFileName = source ifFalse:[
- aStream close.
- aStream := nil.
- ].
- ].
- ].
-
aStream := self sourceStream.
aStream notNil ifTrue:[
Stream positionErrorSignal handle:[:ex |
@@ -449,18 +429,10 @@
kludge for now - somehow this does not work under win32 (sigh)
"
aStream close.
- ] ifFalse:[
- "
- keep a weak reference - it may be needed again soon ...
- "
- LastFileLock critical:[
- (LastFileReference at:1) == 0 ifTrue:[
- LastFileReference at:1 put:aStream.
- LastSourceFileName := source.
- ] ifFalse:[
- aStream close.
- ].
- ].
+ (LastFileReference at:1) == aStream ifTrue:[
+ LastFileReference at:1 put:0.
+ LastSourceFileName := nil.
+ ]
].
]
].
@@ -530,7 +502,7 @@
Otherwise, source is the real source
"
source isNil ifTrue:[^ nil].
- sourcePosition isNil ifTrue:[^ nil].
+ sourcePosition isNil ifTrue:[^ source readStream].
"/ keep the last source file open, because open/close
"/ operations maybe slow on NFS-mounted file systems.
@@ -548,8 +520,15 @@
LastSourceFileName = source ifFalse:[
aStream close.
aStream := nil.
- ].
+ ]
].
+ LastSourceFileName := nil.
+ ].
+
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
].
"/ a negative sourcePosition indicates
@@ -561,12 +540,20 @@
sourcePosition < 0 ifTrue:[
aStream := source asFilename readStream.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
fileName := Smalltalk getSourceFileName:source.
fileName notNil ifTrue:[
aStream := fileName asFilename readStream.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
].
@@ -575,7 +562,11 @@
"/
(mgr := Smalltalk at:#SourceCodeManager) isNil ifTrue:[
aStream := self localSourceStream.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
"/
@@ -593,13 +584,21 @@
mod := package copyTo:sep - 1.
dir := package copyFrom:sep + 1.
aStream := mgr streamForClass:nil fileName:source revision:nil directory:dir module:mod cache:true.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
].
].
aStream := myClass sourceStreamFor:source.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
"/
@@ -608,7 +607,11 @@
"/
mgr notNil ifTrue:[
aStream := self localSourceStream.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
"/
@@ -616,7 +619,11 @@
"/
aStream isNil ifTrue:[
aStream := source asFilename readStream.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
].
(who isNil and:[source notNil]) ifTrue:[
@@ -632,7 +639,11 @@
myClass := Smalltalk at:className asSymbol ifAbsent:nil.
myClass notNil ifTrue:[
aStream := myClass sourceStreamFor:source.
- aStream notNil ifTrue:[^ aStream].
+ aStream notNil ifTrue:[
+ LastSourceFileName := source.
+ LastFileReference at:1 put:aStream.
+ ^ aStream
+ ].
]
]
].
@@ -2452,6 +2463,6 @@
!Method class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.178 1999-09-25 21:32:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.179 1999-11-29 13:38:02 cg Exp $'
! !
Method initialize!