[squeak-dev] Image Management
Edgar J. De Cleene
edgardec2005 at gmail.com
Sun Aug 1 10:48:58 UTC 2010
Skipped content of type multipart/alternative-------------- next part --------------
'From MinimalMorphic of 8 December 2006 [latest update: #7269] on 1 August 2010 at 7:29:56 am'!
!CompiledMethod methodsFor: 'printing' stamp: 'edc 10/6/2008 09:54'!
author
self timeStamp isEmpty ifFalse: [^self timeStamp substrings first] ifTrue:[^'unknown']
! !
!Utilities class methodsFor: 'identification' stamp: 'edc 10/6/2008 09:58'!
methodsWithInitials: targetInitials inClass: aClass
"Based on a do-it contributed to the Squeak mailing list by G¦Ã¬Âran Hultgen:
Browse methods whose initials (in the time-stamp, as logged to disk) match the given initials.
Print out the complete time-stamp table to the Transcript.
Answer a list of (initials -> count) associations.
CAUTION: It may take several minutes for this to complete."
"Time millisecondsToRun: [Utilities methodsWithInitials: 'bf']"
| methodList methodListClass |
methodList := aClass methodDict select:[:cm|
cm author = targetInitials].
methodListClass := aClass class methodDict select:[:cm| cm author = targetInitials].
^methodList,methodListClass
! !
!Utilities class methodsFor: 'identification' stamp: 'edc 4/19/2010 16:54'!
methodsWithInitials: targetInitials inPackage: aPackage
"Utilities methodsWithInitials: 'edc' inPackage: 'Monticello'"
| methodList more|
methodList := OrderedCollection new.
(PackageInfo named: aPackage) classes
do: [:ea | more := (Utilities methodsWithInitials: targetInitials inClass: ea).
more ifNotEmpty: [methodList
add: more ]].
^ methodList! !
-------------- next part --------------
'From MinimalMorphic of 8 December 2006 [latest update: #7246] on 16 February 2010 at 10:58:03 am'!
!Object methodsFor: 'error handling' stamp: 'edc 7/31/2008 06:39'!
dpsTraceUntilRoot: anObject
| reportString context count |
Transcript open.
reportString := (anObject respondsTo: #asString)
ifTrue: [anObject asString] ifFalse: [anObject printString].
(Smalltalk at: #Decompiler ifAbsent: [nil])
ifNil:
[Transcript cr; show: reportString]
ifNotNil:
[context := thisContext.
count := 1.
[Transcript cr.
Transcript show: count printString, ': '.
reportString notNil
ifTrue:
[Transcript show: context home class name
, '/' , context sender selector, ' (' , reportString , ')'.
context := context sender.
reportString := nil]
ifFalse:
[(context notNil and: [(context := context sender) notNil])
ifTrue: [Transcript show: context receiver class name , '/' , context selector.
count := count + 1]].
context sender notNil]whileTrue]! !
!Object methodsFor: 'evaluating' stamp: 'edc 7/18/2005 10:51'!
ancestors
| nonMetaClass classList |
nonMetaClass := self theNonMetaClass.
classList := OrderedCollection new.
nonMetaClass allSuperclasses reverseDo:
[:aClass |
classList add: aClass name.
].
^ classList! !
!Object methodsFor: 'evaluating' stamp: 'edc 7/18/2005 10:51'!
othersClassList
|classList metodosSospechosos |
classList := Set new.
metodosSospechosos := self methodDict .
metodosSospechosos isEmpty
ifFalse: [metodosSospechosos
collect: [:cm | cm literals
select: [:any | any isVariableBinding]
thenCollect: [:each | (Smalltalk at: each key ifAbsent:[])
ifNotNil: [ classList add: each key]]]].
metodosSospechosos := self class methodDict .
metodosSospechosos isEmpty
ifFalse: [metodosSospechosos
collect: [:cm | cm literals
select: [:any | any isVariableBinding]
thenCollect: [:each | (Smalltalk at: each key ifAbsent:[])
ifNotNil: [classList add: each key]]]].
classList remove: self name ifAbsent: [].
^classList
! !
!Object methodsFor: 'objects from disk' stamp: 'edc 9/6/2008 19:40'!
fileOutCompressed
| unzipped zipped buffer aFileName |
aFileName := self class name asFileName. "do better?"
aFileName := UIManager default
request: 'File name?' translated initialAnswer: aFileName.
aFileName size == 0 ifTrue: [^ Beeper beep].
Cursor write
showWhile: [unzipped := RWBinaryOrTextStream on: ''.
unzipped fileOutClass: nil andObject: self.
unzipped reset.
zipped := FileDirectory default newFileNamed: aFileName , 'obz'.
zipped binary.
zipped := GZipWriteStream on: zipped.
buffer := ByteArray new: 50000.
'Compressing ' , self name
displayProgressAt: Sensor cursorPoint
from: 0
to: unzipped size
during: [:bar |
[unzipped atEnd]
whileFalse: [bar value: unzipped position.
zipped
nextPutAll: (unzipped nextInto: buffer)].
zipped close.
unzipped close]]! !
!Object methodsFor: 'objects from disk' stamp: 'edc 9/5/2008 08:57'!
saveOnFileNamed: aString
"Ask the user for a filename and save myself on a
SmartReferenceStream file. Writes out the version and class structure.
The file is fileIn-able. UniClasses will be filed out.
This save objects as .obj"
| aFileName fileStream |
aString isEmpty
ifTrue: [^ Beeper beep].
aFileName := ('my {1}' translated format: {self class name}) asFileName.
"do better?"
aFileName := aString , '.obj'.
fileStream := FileStream newFileNamed: aFileName asFileName.
fileStream fileOutClass: nil andObject: self! !
!Object class methodsFor: '*services-extras' stamp: 'edc 2/14/2008 08:24'!
fileReaderServicesForFile: fullName suffix: suffix
| services |
services _ OrderedCollection new.
(fullName asLowercase endsWith: '.obj')
ifTrue: [ services add: self serviceLoadObject ].
^services! !
!Object class methodsFor: '*services-extras' stamp: 'edc 7/27/2008 08:11'!
readCompressedObject: aFileStream
self readAndInspect: (MultiByteBinaryOrTextStream with: (GZipReadStream on: aFileStream) upToEnd) reset! !
!Object class methodsFor: '*services-extras' stamp: 'edc 10/25/2006 17:45'!
registeredServices
^ {
Service new
label: 'Open saved objects';
shortLabel: 'object';
description: 'load back saved object ';
action: [:stream | self readAndInspect: (FileStream oldFileOrNoneNamed:stream name)];
shortcut: nil;
categories: Service worldServiceCat.} ! !
!Object class methodsFor: '*services-extras' stamp: 'edc 7/27/2008 07:40'!
serviceCompressedObject
"Answer a service for opening a saved Object"
^ (SimpleServiceEntry
provider: Object
label: 'gz saved Object'
selector: #readCompressedObject:
description: 'open a gz Object'
buttonLabel: 'object')
argumentGetter: [:fileList |
fileList readOnlyStream]! !
!Object class methodsFor: '*services-extras' stamp: 'edc 2/14/2008 08:26'!
serviceLoadObject
"Answer a service for opening a saved Object"
^ (SimpleServiceEntry
provider: self
label: 'saved Object'
selector: #readAndInspect:
description: 'open a Object'
buttonLabel: 'object')
argumentGetter: [:fileList | fileList readOnlyStream]! !
!Object class methodsFor: 'instance creation' stamp: 'edc 9/6/2008 08:57'!
lookForClass: aClass
| path inputStream fcb superPseudo pseudo |
path := self lookForClassIn3dot10: aClass.
inputStream := HTTPLoader default retrieveContentsFor: path.
inputStream := RWBinaryOrTextStream with: inputStream content unzipped.
fcb := FilePackage new fullName: aClass;
fileInFrom: (MultiByteBinaryOrTextStream with: inputStream contents).
pseudo := fcb classes at: aClass.
superPseudo := pseudo definition copyUpTo: Character space.
Smalltalk
at: superPseudo asSymbol
ifAbsent: [self lookForClass: superPseudo].
ChangeSorter newChangesFromStream: inputStream named: aClass asString! !
!Object class methodsFor: 'instance creation' stamp: 'edc 9/6/2008 10:54'!
lookForClassIn3dot10: aClass
| inputStream cat path |
Missing3dot10
ifNil: [inputStream := HTTPLoader default retrieveContentsFor: 'ftp.squeak.org/various_images/SqueakLight//SLupdates/Organizer3dot10.obj'.
inputStream := (MultiByteBinaryOrTextStream with: inputStream contents) reset.
inputStream setConverterForCode.
Smalltalk at: #Missing3dot10 put: inputStream fileInObjectAndCode].
cat := Missing3dot10
at: aClass
ifAbsent: [^ self lookForClassIn3dot9: aClass].
^ path := 'http://squeakros.atspace.com/3dot10/' , cat , '/' , aClass asString , '.sqz'! !
!Object class methodsFor: 'instance creation' stamp: 'edc 9/6/2008 10:52'!
lookForClassIn3dot9: aClass
| inputStream cat path |
Missing3dot9
ifNil: [inputStream := HTTPLoader default retrieveContentsFor: 'ftp.squeak.org/various_images/SqueakLight//SLupdates/Organizer3dot9.obj'.
inputStream := (MultiByteBinaryOrTextStream with: inputStream contents) reset.
inputStream setConverterForCode.
Smalltalk at: #Missing3dot9 put: inputStream fileInObjectAndCode].
cat := Missing3dot9
at: aClass
ifAbsent: [^ self error: aClass , ' is not on server '].
^path := 'http://squeakros.atspace.com/3dot9/' , cat , '/' , aClass asString , '.sqz'.
! !
!Object class methodsFor: 'objects from disk' stamp: 'edc 6/11/2008 07:37'!
readAndInspect: inputStream
inputStream setConverterForCode.
(inputStream fileInObjectAndCode ) inspect! !
!Utilities class methodsFor: 'identification' stamp: 'edc 10/6/2008 09:58'!
methodsWithInitials: targetInitials inClass: aClass
"Based on a do-it contributed to the Squeak mailing list by G¦Ã¬Âran Hultgen:
Browse methods whose initials (in the time-stamp, as logged to disk) match the given initials.
Print out the complete time-stamp table to the Transcript.
Answer a list of (initials -> count) associations.
CAUTION: It may take several minutes for this to complete."
"Time millisecondsToRun: [Utilities methodsWithInitials: 'bf']"
| methodList methodListClass |
methodList := aClass methodDict select:[:cm|
cm author = targetInitials].
methodListClass := aClass class methodDict select:[:cm| cm author = targetInitials].
^methodList,methodListClass
! !
More information about the Squeak-dev
mailing list
|