SnapShotImageMemory.st
changeset 1440 f3eda2f72399
parent 1423 5bb61f51152d
child 1448 42ec8770d09f
--- a/SnapShotImageMemory.st	Wed Nov 22 13:20:24 2000 +0100
+++ b/SnapShotImageMemory.st	Thu Nov 23 14:20:39 2000 +0100
@@ -15,13 +15,6 @@
 	privateIn:SnapShotImageMemory
 !
 
-Object subclass:#SpaceInfo
-	instanceVariableNames:'start end size flags imageBase'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:SnapShotImageMemory
-!
-
 SnapShotImageMemory::ImageHeader variableSubclass:#ImageObject
 	instanceVariableNames:'cachedContents'
 	classVariableNames:''
@@ -36,6 +29,13 @@
 	privateIn:SnapShotImageMemory
 !
 
+Object subclass:#SpaceInfo
+	instanceVariableNames:'start end size flags imageBase'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:SnapShotImageMemory
+!
+
 SnapShotImageMemory::ImageHeader variableByteSubclass:#ImageByteObject
 	instanceVariableNames:''
 	classVariableNames:''
@@ -69,12 +69,14 @@
 globalEntries
     "return the value of the instance variable 'globalEntries' (automatically generated)"
 
-    ^ globalEntries!
+    ^ globalEntries
+!
 
 globalEntries:something
     "set the value of the instance variable 'globalEntries' (automatically generated)"
 
-    globalEntries := something.!
+    globalEntries := something.
+!
 
 image
 
@@ -89,12 +91,14 @@
 ptrSize
     "return the value of the instance variable 'ptrSize' (automatically generated)"
 
-    ^ ptrSize!
+    ^ ptrSize
+!
 
 ptrSize:something
     "set the value of the instance variable 'ptrSize' (automatically generated)"
 
-    ptrSize := something.! !
+    ptrSize := something.
+! !
 
 !SnapShotImageMemory methodsFor:'object access'!
 
@@ -287,7 +291,8 @@
     (aByteArrayRef isImageBytes) ifFalse:[self halt].
 
     nBytes := aByteArrayRef byteSize - (intSize * 3).
-    ^ ((ByteArray new:nBytes) replaceFrom:1 to:nBytes-1 with:aByteArrayRef startingAt:1).!
+    ^ ((ByteArray new:nBytes) replaceFrom:1 to:nBytes-1 with:aByteArrayRef startingAt:1).
+!
 
 fetchStringFor:aStringRef
     |nBytes|
@@ -681,12 +686,14 @@
 bits
     "return the value of the instance variable 'bits' (automatically generated)"
 
-    ^ bits!
+    ^ bits
+!
 
 bits:something
     "set the value of the instance variable 'bits' (automatically generated)"
 
-    bits := something.!
+    bits := something.
+!
 
 byteSize
     "return the value of the instance variable 'size' (automatically generated)"
@@ -704,22 +711,26 @@
 classRef
     "return the value of the instance variable 'classRef' (automatically generated)"
 
-    ^ classRef!
+    ^ classRef
+!
 
 classRef:something
     "set the value of the instance variable 'classRef' (automatically generated)"
 
-    classRef := something.!
+    classRef := something.
+!
 
 memory
     "return the value of the instance variable 'memory' (automatically generated)"
 
-    ^ memory!
+    ^ memory
+!
 
 memory:something
     "set the value of the instance variable 'memory' (automatically generated)"
 
-    memory := something.! !
+    memory := something.
+! !
 
 !SnapShotImageMemory::ImageHeader methodsFor:'queries'!
 
@@ -736,7 +747,8 @@
 !
 
 isBehavior
-    ^ self isImageBehavior!
+    ^ self isImageBehavior
+!
 
 isImageBehavior
     |flags|
@@ -777,7 +789,8 @@
 !
 
 isLazyMethod                               
-    ^ classRef name = 'LazyMethod'!
+    ^ classRef name = 'LazyMethod'
+!
 
 isMeta
     ^ false
@@ -807,58 +820,6 @@
     ^ classRef name = 'String'
 ! !
 
-!SnapShotImageMemory::SpaceInfo methodsFor:'accessing'!
-
-end
-    "return the value of the instance variable 'end' (automatically generated)"
-
-    ^ end!
-
-end:something
-    "set the value of the instance variable 'end' (automatically generated)"
-
-    end := something.!
-
-flags
-    "return the value of the instance variable 'flags' (automatically generated)"
-
-    ^ flags!
-
-flags:something
-    "set the value of the instance variable 'flags' (automatically generated)"
-
-    flags := something.!
-
-imageBase
-    "return the value of the instance variable 'imageBase' (automatically generated)"
-
-    ^ imageBase!
-
-imageBase:something
-    "set the value of the instance variable 'imageBase' (automatically generated)"
-
-    imageBase := something.!
-
-size
-    "return the value of the instance variable 'size' (automatically generated)"
-
-    ^ size!
-
-size:something
-    "set the value of the instance variable 'size' (automatically generated)"
-
-    size := something.!
-
-start
-    "return the value of the instance variable 'start' (automatically generated)"
-
-    ^ start!
-
-start:something
-    "set the value of the instance variable 'start' (automatically generated)"
-
-    start := something.! !
-
 !SnapShotImageMemory::ImageObject methodsFor:'method protocol'!
 
 byteCode
@@ -913,46 +874,59 @@
     self isMethodOrLazyMethod ifTrue:[
         ^ self mclass
     ].
-    self halt.!
+    self halt.
+!
 
 hasCode
-    ^ false!
+    ^ false
+!
 
 isBreakpointed
-    ^ false!
+    ^ false
+!
 
 isCounting
-    ^ false!
+    ^ false
+!
 
 isCountingMemoryUsage
-    ^ false!
+    ^ false
+!
 
 isDynamic
-    ^ false!
+    ^ false
+!
 
 isExecutable
     self isMethod ifTrue:[
         ^ false
     ].
-    self halt.!
+    self halt.
+!
 
 isIgnored
-    ^ false!
+    ^ false
+!
 
 isPrivate
-    ^ false!
+    ^ false
+!
 
 isProtected
-    ^ false!
+    ^ false
+!
 
 isPublic
-    ^ true!
+    ^ true
+!
 
 isTimed
-    ^ false!
+    ^ false
+!
 
 isTraced
-    ^ false!
+    ^ false
+!
 
 isWrapped
     ^ false
@@ -1060,14 +1034,16 @@
 !
 
 previousVersion
-    ^ nil!
+    ^ nil
+!
 
 printStringForBrowserWithSelector:selector
     ^ selector
 !
 
 privacy
-    ^ #public!
+    ^ #public
+!
 
 resources
     ^ nil
@@ -1112,7 +1088,8 @@
         self sourcePosition notNil ifTrue:[^ self source].
         ^ nil
     ].
-    self halt.!
+    self halt.
+!
 
 sourceLineNumber
     self isMethodOrLazyMethod ifTrue:[
@@ -1129,7 +1106,8 @@
         sourcePosition isNil ifTrue:[^ sourcePosition].
         ^ sourcePosition abs
     ].
-    self halt.!
+    self halt.
+!
 
 sourcePositionValue
     |sourcePosition sourcePositionPtr|
@@ -1139,7 +1117,8 @@
         sourcePosition := memory fetchObjectAt:sourcePositionPtr.
         ^ sourcePosition 
     ].
-    self halt.!
+    self halt.
+!
 
 sourceStream
     |sourcePosition source aStream fileName junk who 
@@ -1265,7 +1244,8 @@
         ].
         ^ cachedContents at:aSelector ifAbsent:exceptionValue
     ].
-    self halt.!
+    self halt.
+!
 
 cacheMethodDictionary
     |symPtr symRef mthdPtr mthdRef s|
@@ -1282,7 +1262,8 @@
             mthdRef := memory fetchObjectAt:mthdPtr.
             cachedContents at:s asSymbol put:mthdRef.
         ].
-    ].!
+    ].
+!
 
 do:aBlock
     self isMethodDictionary ifTrue:[
@@ -1302,7 +1283,8 @@
         ].
         ^ cachedContents includesKey:aSelector
     ].
-    self halt.!
+    self halt.
+!
 
 keyAtValue:aMethod ifAbsent:exceptionValue
     self isMethodDictionary ifTrue:[
@@ -1311,7 +1293,8 @@
         ].
         ^ cachedContents keyAtValue:aMethod ifAbsent:exceptionValue
     ].
-    self halt.!
+    self halt.
+!
 
 keysAndValuesDo:aBlock
     self isMethodDictionary ifTrue:[
@@ -1343,7 +1326,8 @@
 !
 
 categorySlot
-    ^ self at:(Class instVarOffsetOf:'category')!
+    ^ self at:(Class instVarOffsetOf:'category')
+!
 
 classFilename
     |classFilenameRef classFilename|
@@ -1355,10 +1339,12 @@
     classFilenameRef notNil ifTrue:[
         classFilename := memory fetchStringFor:classFilenameRef.
     ].
-    ^ classFilename!
+    ^ classFilename
+!
 
 classFilenameSlot
-    ^ self at:(Class instVarOffsetOf:'classFilename')!
+    ^ self at:(Class instVarOffsetOf:'classFilename')
+!
 
 classVarNames
     |classVarNamesRef classVarNames s|
@@ -1417,7 +1403,8 @@
 !
 
 commentSlot
-    ^ self at:(Class instVarOffsetOf:'comment')!
+    ^ self at:(Class instVarOffsetOf:'comment')
+!
 
 flags
     |flags amount|
@@ -1432,16 +1419,19 @@
 !
 
 flagsSlot
-    ^ self at:(Class instVarOffsetOf:'flags')!
+    ^ self at:(Class instVarOffsetOf:'flags')
+!
 
 instSize
     |instSizeRef|
 
     instSizeRef := self instSizeSlot.
-    ^ memory fetchObjectAt:instSizeRef.!
+    ^ memory fetchObjectAt:instSizeRef.
+!
 
 instSizeSlot
-    ^ self at:(Class instVarOffsetOf:'instSize')!
+    ^ self at:(Class instVarOffsetOf:'instSize')
+!
 
 instVarNames
     |instVarNamesRef instVarNames s|
@@ -1466,7 +1456,8 @@
             ].
         ].
     ].
-    ^ instVarNames ? #()!
+    ^ instVarNames ? #()
+!
 
 instVarsSlot
     ^ self at:6
@@ -1484,7 +1475,8 @@
 !
 
 methodDictionarySlot
-    ^ self at:(Class instVarOffsetOf:'methodDictionary')!
+    ^ self at:(Class instVarOffsetOf:'methodDictionary')
+!
 
 name
     |nameRef name|
@@ -1507,10 +1499,12 @@
 !
 
 nameSlot
-    ^ self at:(Class instVarOffsetOf:'name')!
+    ^ self at:(Class instVarOffsetOf:'name')
+!
 
 packageSlot
-    ^ self at:(Class instVarOffsetOf:'package')!
+    ^ self at:(Class instVarOffsetOf:'package')
+!
 
 primitiveSpec
     |primitiveSpecRef primitiveSpec|
@@ -1526,7 +1520,8 @@
 !
 
 primitiveSpecSlot
-    ^ self at:(Class instVarOffsetOf:'primitiveSpec')!
+    ^ self at:(Class instVarOffsetOf:'primitiveSpec')
+!
 
 revision
     |revisionRef revision|
@@ -1538,7 +1533,8 @@
     revisionRef notNil ifTrue:[
         revision := memory fetchStringFor:revisionRef.
     ].
-    ^ revision!
+    ^ revision
+!
 
 revisionSlot
     ^ self at:14
@@ -1572,7 +1568,8 @@
     (classvars := self classVariableString) notNil ifTrue:[
         aCollection addAll:(classvars asCollectionOfWords).
     ].
-    ^ aCollection!
+    ^ aCollection
+!
 
 addAllInstVarNamesTo:aCollection
     |superInsts instvars superclass|
@@ -1581,19 +1578,23 @@
         self superclass addAllInstVarNamesTo:aCollection
     ].
     aCollection addAll:self instVarNames.
-    ^ aCollection!
-
-addChangeRecordForClassFileOut:aClass!
+    ^ aCollection
+!
+
+addChangeRecordForClassFileOut:aClass
+!
 
 allClassVarNames
     "return a collection of all the class variable name-strings
      this includes all superclass-class variables"
 
-    ^ self addAllClassVarNamesTo:(OrderedCollection new)!
+    ^ self addAllClassVarNamesTo:(OrderedCollection new)
+!
 
 allInstVarNames
     self superclass isNil ifTrue:[^ self instVarNames].
-    ^ self addAllInstVarNamesTo:(OrderedCollection new)!
+    ^ self addAllInstVarNamesTo:(OrderedCollection new)
+!
 
 allSubclassesDo:aBlock
     "evaluate aBlock for all of my subclasses.
@@ -1642,7 +1643,8 @@
 
     "
      String allSuperclasses 
-    "!
+    "
+!
 
 allSuperclassesDo:aBlock
     "evaluate aBlock for all of my superclasses"
@@ -1666,7 +1668,8 @@
     self
         basicFileOutDefinitionOn:aStream 
         withNameSpace:forceNameSpace 
-        withPackage:true!
+        withPackage:true
+!
 
 basicFileOutDefinitionOn:aStream withNameSpace:forceNameSpace withPackage:showPackage
     "append an expression on aStream, which defines myself."
@@ -1837,7 +1840,8 @@
 
     "Created: / 4.1.1997 / 20:38:16 / cg"
     "Modified: / 8.8.1997 / 10:59:50 / cg"
-    "Modified: / 18.3.1999 / 18:15:46 / stefan"!
+    "Modified: / 18.3.1999 / 18:15:46 / stefan"
+!
 
 basicFileOutInstvarTypeKeywordOn:aStream
     "a helper for fileOutDefinition"
@@ -1899,7 +1903,8 @@
 
     "Created: 7.12.1995 / 10:58:47 / cg"
     "Modified: 1.4.1997 / 23:33:01 / stefan"
-    "Modified: 9.9.1997 / 12:05:41 / cg"!
+    "Modified: 9.9.1997 / 12:05:41 / cg"
+!
 
 compiledMethodAt:aSelector
 
@@ -1950,7 +1955,8 @@
 "/    self addChangeRecordForClassFileOut:self
 
     "Modified: / 7.6.1996 / 09:14:43 / stefan"
-    "Modified: / 27.8.1998 / 02:02:57 / cg"!
+    "Modified: / 27.8.1998 / 02:02:57 / cg"
+!
 
 fileOutAllDefinitionsOn:aStream
     "append expressions on aStream, which defines myself and all of my private classes."
@@ -1979,7 +1985,8 @@
     ].
 
     "Created: 15.10.1996 / 11:15:19 / cg"
-    "Modified: 22.3.1997 / 16:11:56 / cg"!
+    "Modified: 22.3.1997 / 16:11:56 / cg"
+!
 
 fileOutAs:fileNameString
     "create a file consisting of all methods in myself in
@@ -2129,7 +2136,8 @@
 
     "Modified: / 7.6.1996 / 09:14:43 / stefan"
     "Created: / 16.4.1997 / 20:44:05 / cg"
-    "Modified: / 12.8.1998 / 11:14:56 / cg"!
+    "Modified: / 12.8.1998 / 11:14:56 / cg"
+!
 
 fileOutCategory:aCategory
     "create a file 'class-category.st' consisting of all methods in aCategory.
@@ -2166,7 +2174,8 @@
 
     "Modified: / 1.4.1997 / 16:00:24 / stefan"
     "Created: / 1.4.1997 / 16:04:18 / stefan"
-    "Modified: / 28.10.1997 / 14:40:28 / cg"!
+    "Modified: / 28.10.1997 / 14:40:28 / cg"
+!
 
 fileOutCategory:aCategory except:skippedMethods only:savedMethods methodFilter:methodFilter on:aStream
     |dict source sortedSelectors first privacy interestingMethods cat|
@@ -2247,17 +2256,20 @@
     "Modified: 28.8.1995 / 14:30:41 / claus"
     "Modified: 12.6.1996 / 11:37:33 / stefan"
     "Modified: 15.11.1996 / 11:32:21 / cg"
-    "Created: 1.4.1997 / 16:04:33 / stefan"!
+    "Created: 1.4.1997 / 16:04:33 / stefan"
+!
 
 fileOutCategory:aCategory methodFilter:methodFilter on:aStream
     "file out all methods belonging to aCategory, aString onto aStream"
 
-    self fileOutCategory:aCategory except:nil only:nil methodFilter:methodFilter on:aStream!
+    self fileOutCategory:aCategory except:nil only:nil methodFilter:methodFilter on:aStream
+!
 
 fileOutCategory:aCategory on:aStream
     Class fileOutNameSpaceQuerySignal answer:true do:[
         self fileOutCategory:aCategory except:nil only:nil methodFilter:nil on:aStream
-    ]!
+    ]
+!
 
 fileOutClassInstVarDefinitionOn:aStream withNameSpace:withNameSpace
     "append an expression to define my classInstanceVariables on aStream"
@@ -2308,7 +2320,8 @@
 fileOutDefinitionOn:aStream
     "append an expression on aStream, which defines myself."
 
-    ^ self basicFileOutDefinitionOn:aStream withNameSpace:false!
+    ^ self basicFileOutDefinitionOn:aStream withNameSpace:false
+!
 
 fileOutMethod:aMethod
     |aStream fileName selector|
@@ -2346,7 +2359,8 @@
 
     "Modified: / 1.4.1997 / 16:00:57 / stefan"
     "Created: / 2.4.1997 / 00:24:28 / stefan"
-    "Modified: / 28.10.1997 / 14:40:34 / cg"!
+    "Modified: / 28.10.1997 / 14:40:34 / cg"
+!
 
 fileOutMethod:aMethod on:aStream
     |dict cat source privacy|
@@ -2386,17 +2400,20 @@
     "Modified: 27.8.1995 / 01:23:19 / claus"
     "Modified: 12.6.1996 / 11:44:41 / stefan"
     "Modified: 15.11.1996 / 11:32:43 / cg"
-    "Created: 2.4.1997 / 00:24:33 / stefan"!
+    "Created: 2.4.1997 / 00:24:33 / stefan"
+!
 
 fileOutOn:aStream
 
-    ^ self fileOutOn:aStream withTimeStamp:true!
+    ^ self fileOutOn:aStream withTimeStamp:true
+!
 
 fileOutOn:aStream withTimeStamp:stampIt
     "file out my definition and all methods onto aStream.
      If stampIt is true, a timeStamp comment is prepended."
 
-    self fileOutOn:aStream withTimeStamp:stampIt withInitialize:true!
+    self fileOutOn:aStream withTimeStamp:stampIt withInitialize:true
+!
 
 fileOutOn:aStream withTimeStamp:stampIt withInitialize:initIt
     "file out my definition and all methods onto aStream.
@@ -2409,7 +2426,8 @@
         withTimeStamp:stampIt 
         withInitialize:initIt 
         withDefinition:true
-        methodFilter:nil!
+        methodFilter:nil
+!
 
 fileOutOn:aStream withTimeStamp:stampIt withInitialize:initIt withDefinition:withDefinition methodFilter:methodFilter
     "file out my definition and all methods onto aStream.
@@ -2574,7 +2592,8 @@
 
     "Created: / 15.11.1995 / 12:53:06 / cg"
     "Modified: / 1.4.1997 / 16:01:05 / stefan"
-    "Modified: / 13.3.1998 / 12:23:59 / cg"!
+    "Modified: / 13.3.1998 / 12:23:59 / cg"
+!
 
 fileOutPrimitiveDefinitionsOn:aStream
     "append primitive defs (if any) to aStream."
@@ -2603,7 +2622,8 @@
         aStream nextPutChunkSeparator; space; nextPutChunkSeparator; cr; cr
     ].
 
-    "Modified: 8.1.1997 / 17:45:40 / cg"!
+    "Modified: 8.1.1997 / 17:45:40 / cg"
+!
 
 fileOutPrimitiveSpecsOn:aStream
     "append primitive defs (if any) to aStream."
@@ -2627,7 +2647,8 @@
         aStream nextPutChunkSeparator; space; nextPutChunkSeparator; cr; cr
     ].
 
-    "Modified: 8.1.1997 / 17:45:51 / cg"!
+    "Modified: 8.1.1997 / 17:45:51 / cg"
+!
 
 firstDefinitionSelectorPart
     "return the first part of the selector with which I was (can be) defined in my superclass"
@@ -2698,18 +2719,22 @@
     ].
     ^ pos
 
-    "Modified: 15.1.1997 / 15:29:30 / stefan"!
+    "Modified: 15.1.1997 / 15:29:30 / stefan"
+!
 
 hasMethods
     "return true, if there are any (local) methods in this class"
 
-    ^ (self methodDictionary size ~~ 0)!
+    ^ (self methodDictionary size ~~ 0)
+!
 
 implements:aSelector
-    ^ self includesSelector:aSelector!
+    ^ self includesSelector:aSelector
+!
 
 includesSelector:aSelector
-    ^ self methodDictionary includesKey:aSelector!
+    ^ self methodDictionary includesKey:aSelector
+!
 
 instanceVariableString
     "return a string of the instance variable names"
@@ -2748,6 +2773,120 @@
     ^ false
 !
 
+localSourceStreamFor:sourceFile
+    "return an open stream on a local sourcefile, nil if that is not available"
+
+    |fileName info module dir fn package packageDir zar entry|
+
+    "/
+    "/ old: look in 'source/<filename>'
+    "/ this is still kept in order to find user-private
+    "/ classes in her currentDirectory.
+    "/
+    fileName := Smalltalk getSourceFileName:sourceFile.
+    fileName notNil ifTrue:[
+        ^ fileName asFilename readStream.
+    ].
+
+    (package := self package) notNil ifTrue:[
+        "/ newest sceme ...
+        packageDir := package copyReplaceAll:$: with:$/.
+        packageDir := Smalltalk getPackageFileName:packageDir.
+        packageDir notNil ifTrue:[
+            "/ present there ?
+            packageDir := packageDir asFilename.
+            (fn := packageDir construct:sourceFile) exists ifTrue:[
+                ^ fn readStream.
+            ].
+
+            "/ a source subdirectory ?
+            fn := (packageDir construct:'source') construct:sourceFile.
+            fn exists ifTrue:[
+                ^ fn readStream.
+            ].
+
+            "/ a zip-file ?
+            fn := (packageDir construct:'source.zip').
+            fn exists ifTrue:[
+                zar := ZipArchive oldFileNamed:fn.
+                zar notNil ifTrue:[
+                    entry := zar extract:sourceFile.
+                    entry notNil ifTrue:[
+                        ^ entry asString readStream
+                    ]
+                ]
+            ]
+        ].
+
+        "/ will vanish ...
+        (package includes:$:) ifTrue:[
+            package := package asString copyReplaceAll:$: with:$/
+        ] ifFalse:[
+            package := 'stx/' , package
+        ].
+        fileName := Smalltalk getSourceFileName:(package , '/' , sourceFile).
+        fileName notNil ifTrue:[
+            ^ fileName asFilename readStream.
+        ].
+        (package startsWith:'stx/') ifTrue:[
+            fileName := Smalltalk getSourceFileName:((package copyFrom:5) , '/' , sourceFile).
+            fileName notNil ifTrue:[
+                ^ fileName asFilename readStream.
+            ]
+        ]
+    ].
+
+    "/
+    "/ new: look in 'source/<module>/<package>/<filename>
+    "/ this makes the symbolic links to (or copy of) the source files
+    "/ obsolete.
+    info := self packageSourceCodeInfo.
+    info notNil ifTrue:[
+        module := info at:#module ifAbsent:nil.
+        module notNil ifTrue:[
+            dir := info at:#directory ifAbsent:nil.
+            dir notNil ifTrue:[
+                fn := (module asFilename construct:dir) construct:sourceFile.
+                fileName := Smalltalk getSourceFileName:(fn name).
+                fileName notNil ifTrue:[
+                    ^ fileName asFilename readStream.
+                ].
+
+                "/ brand new: look for source/<module>/package.zip
+                "/ containing an entry for <filename>
+
+                fn := (module asFilename construct:dir) withSuffix:'zip'.
+                fileName := Smalltalk getSourceFileName:(fn name).
+                fileName notNil ifTrue:[
+                    zar := ZipArchive oldFileNamed:fileName.
+                    zar notNil ifTrue:[
+                        entry := zar extract:sourceFile.
+                        entry notNil ifTrue:[
+                            ^ entry asString readStream
+                        ]
+                    ]
+                ].
+
+                "/ and also in source/source.zip ...
+
+                fileName := Smalltalk getSourceFileName:'source.zip'.
+                fileName notNil ifTrue:[
+                    zar := ZipArchive oldFileNamed:fileName.
+                    zar notNil ifTrue:[
+                        entry := zar extract:sourceFile.
+                        entry notNil ifTrue:[
+                            ^ entry asString readStream
+                        ]
+                    ]
+                ].
+            ]
+        ]
+    ].
+    ^ nil
+
+    "Modified: / 18.7.1998 / 22:53:19 / cg"
+!
+
 nameWithoutNameSpacePrefix
     |nm owner|
 
@@ -2919,7 +3058,8 @@
     "
 
     "Created: 4.11.1995 / 20:36:53 / cg"
-    "Modified: 19.9.1997 / 10:42:25 / cg"!
+    "Modified: 19.9.1997 / 10:42:25 / cg"
+!
 
 primitiveDefinitionsString
     "{ Pragma: +optSpace }"
@@ -2931,21 +3071,24 @@
     "
      Object primitiveDefinitionsString 
      String primitiveDefinitionsString
-    "!
+    "
+!
 
 primitiveFunctionsString
     "{ Pragma: +optSpace }"
 
     "return the primitiveFunctions string or nil"
 
-    ^ self getPrimitiveSpecsAt:3!
+    ^ self getPrimitiveSpecsAt:3
+!
 
 primitiveVariablesString
     "{ Pragma: +optSpace }"
 
     "return the primitiveVariables string or nil"
 
-    ^ self getPrimitiveSpecsAt:2!
+    ^ self getPrimitiveSpecsAt:2
+!
 
 printClassNameOn:aStream
     |nm|
@@ -2956,7 +3099,8 @@
         nm := self name.
     ].
 
-    aStream nextPutAll:nm.!
+    aStream nextPutAll:nm.
+!
 
 printClassVarNamesOn:aStream indent:indent
     "print the class variable names indented and breaking at line end"
@@ -3051,7 +3195,8 @@
     "return a collection of my private classes (if any).
      The classes are in any order."
 
-    ^ self privateClassesOrAll:false!
+    ^ self privateClassesOrAll:false
+!
 
 privateClassesAt:aClassNameStringOrSymbol
     |nmSym|
@@ -3104,7 +3249,8 @@
      UILayoutTool privateClassesOrAll:false 
     "
 
-    "Modified: / 29.5.1998 / 23:23:18 / cg"!
+    "Modified: / 29.5.1998 / 23:23:18 / cg"
+!
 
 privateClassesSorted
     "{ Pragma: +optSpace }"
@@ -3125,7 +3271,8 @@
     "
 
     "Created: 22.3.1997 / 16:10:42 / cg"
-    "Modified: 22.3.1997 / 16:11:20 / cg"!
+    "Modified: 22.3.1997 / 16:11:20 / cg"
+!
 
 revisionInfo
     "return a dictionary filled with revision info.
@@ -3155,7 +3302,8 @@
             info at:#binaryRevision put:self binaryRevision.
         ]
     ].
-    ^ info!
+    ^ info
+!
 
 revisionString
     "{ Pragma: +optSpace }"
@@ -3216,10 +3364,12 @@
 
     "Created: 29.10.1995 / 19:28:03 / cg"
     "Modified: 23.10.1996 / 18:23:56 / cg"
-    "Modified: 1.4.1997 / 23:37:25 / stefan"!
+    "Modified: 1.4.1997 / 23:37:25 / stefan"
+!
 
 selectorAtMethod:aMethod
-    ^ self selectorAtMethod:aMethod ifAbsent:[nil]!
+    ^ self selectorAtMethod:aMethod ifAbsent:[nil]
+!
 
 selectorAtMethod:aMethod ifAbsent:failBlock
     |md|
@@ -3229,7 +3379,8 @@
         'OOPS - nil methodDictionary' errorPrintCR.
         ^ nil
     ].
-    ^ md keyAtValue:aMethod ifAbsent:failBlock.!
+    ^ md keyAtValue:aMethod ifAbsent:failBlock.
+!
 
 soleInstance
     self isMeta ifFalse:[self halt].
@@ -3450,7 +3601,8 @@
 
 theMetaclass
     self isMeta ifTrue:[^ self].
-    ^ self classRef.!
+    ^ self classRef.
+!
 
 theNonMetaclass
     |instSlotOffs clsPtr|
@@ -3466,7 +3618,8 @@
      This is done by checking the version methods return value
      against the version string as contained in the version method"
 
-    ^ true!
+    ^ true
+!
 
 withAllSuperclasses
     "return a collection containing the receiver and all
@@ -3484,7 +3637,8 @@
 
     "
      String withAllSuperclasses 
-    "!
+    "
+!
 
 withAllSuperclassesDo:aBlock
     |sc|
@@ -3544,7 +3698,8 @@
 
 isMeta
     ^ self size == (Metaclass instSize).
-"/    ^ classRef classRef name = 'Metaclass'!
+"/    ^ classRef classRef name = 'Metaclass'
+!
 
 isPrivate
     ^ classRef isPrivateMeta 
@@ -3571,7 +3726,8 @@
 !
 
 isVisualStartable
-    ^ false!
+    ^ false
+!
 
 isWords
     ^ (self flags bitAnd:Behavior maskIndexType) == Behavior flagWords.
@@ -3625,6 +3781,68 @@
     ^ false 
 ! !
 
+!SnapShotImageMemory::SpaceInfo methodsFor:'accessing'!
+
+end
+    "return the value of the instance variable 'end' (automatically generated)"
+
+    ^ end
+!
+
+end:something
+    "set the value of the instance variable 'end' (automatically generated)"
+
+    end := something.
+!
+
+flags
+    "return the value of the instance variable 'flags' (automatically generated)"
+
+    ^ flags
+!
+
+flags:something
+    "set the value of the instance variable 'flags' (automatically generated)"
+
+    flags := something.
+!
+
+imageBase
+    "return the value of the instance variable 'imageBase' (automatically generated)"
+
+    ^ imageBase
+!
+
+imageBase:something
+    "set the value of the instance variable 'imageBase' (automatically generated)"
+
+    imageBase := something.
+!
+
+size
+    "return the value of the instance variable 'size' (automatically generated)"
+
+    ^ size
+!
+
+size:something
+    "set the value of the instance variable 'size' (automatically generated)"
+
+    size := something.
+!
+
+start
+    "return the value of the instance variable 'start' (automatically generated)"
+
+    ^ start
+!
+
+start:something
+    "set the value of the instance variable 'start' (automatically generated)"
+
+    start := something.
+! !
+
 !SnapShotImageMemory::ImageByteObject methodsFor:'queries'!
 
 size