Skip to content

Commit

Permalink
Refactoring duplicated code
Browse files Browse the repository at this point in the history
  • Loading branch information
PalumboN committed Apr 6, 2022
1 parent 1f62b7a commit 7d7a277
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 165 deletions.
38 changes: 31 additions & 7 deletions smalltalksrc/VMMaker/AbstractComposedImageAccess.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -100,18 +100,42 @@ AbstractComposedImageAccess >> initialize [
]

{ #category : #'perm - space' }
AbstractComposedImageAccess >> permSpaceMetadataFileNameInImage: imageFileName into: aBuffer bufferSize: aSize [
AbstractComposedImageAccess >> permSpaceDataFileInImage: imageFileName [

^ imageFileName , '/permSpace.ston'
<inline: true>
<var: #buffer declareC: 'char buffer[255]'>

| buffer |

self simulationOnly: [ buffer := nil ].

^ self permSpaceFileName: 'permSpace.data' inImage: imageFileName into: buffer bufferSize: 255
]

{ #category : #'perm - space' }
AbstractComposedImageAccess >> permanentDataFileinImage: imageFileName [
AbstractComposedImageAccess >> permSpaceFileName: fileName inImage: imageFileName into: buffer bufferSize: bufferSize [

^ imageFileName , '/permSpace.data'
^ self
cCode: [
self snprintf: buffer _: bufferSize _: '%s/%s' _: imageFileName _: fileName.
buffer ]
inSmalltalk: [ imageFileName , '/', fileName ].
]

{ #category : #'file operations' }
{ #category : #'perm - space' }
AbstractComposedImageAccess >> permSpaceMetadataFileNameInImage: imageFileName [

<inline: true>
<var: #buffer declareC: 'char buffer[255]'>

| buffer |

self simulationOnly: [ buffer := nil ].

^ self permSpaceFileName: 'permSpace.ston' inImage: imageFileName into: buffer bufferSize: 255
]

{ #category : #segments }
AbstractComposedImageAccess >> segmentDataFile: segmentIndex inImage: imageFileName [

<inline: true>
Expand All @@ -125,7 +149,7 @@ AbstractComposedImageAccess >> segmentDataFile: segmentIndex inImage: imageFileN

]

{ #category : #'file operations' }
{ #category : #segments }
AbstractComposedImageAccess >> segmentFileName: segmentIndex withExtension: extension inImage: imageFileName into: buffer bufferSize: bufferSize [

^ self
Expand All @@ -135,7 +159,7 @@ AbstractComposedImageAccess >> segmentFileName: segmentIndex withExtension: exte
inSmalltalk: [ imageFileName , '/seg', segmentIndex asString , extension ]
]

{ #category : #'file operations' }
{ #category : #segments }
AbstractComposedImageAccess >> segmentMetadataFile: segmentIndex inImage: imageFileName [

<inline: true>
Expand Down
8 changes: 4 additions & 4 deletions smalltalksrc/VMMaker/AbstractImageAccess.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ AbstractImageAccess >> loadImageFromFile: imageFile withHeader: header [

oldSpaceBytesRead := self readSegmentsFromImageFile: imageFile header: header.

permSpaceBytesRead := self readPermSpaceFromImageFile: imageFile header: header.
permSpaceBytesRead := self readPermanentSpaceFromImageFile: imageFile header: header.

bytesRead := oldSpaceBytesRead + permSpaceBytesRead.

Expand Down Expand Up @@ -232,16 +232,16 @@ AbstractImageAccess >> sq: startingAddress Image: byteSize File: bytesToRead Rea
]

{ #category : #'accessing - files' }
AbstractImageAccess >> sq: segStart Image: n File: segSize Write: file [
AbstractImageAccess >> sq: start Image: n File: segSize Write: file [

<doNotGenerate>
| region |
region := objectMemory memoryManager regionForAddress: segStart.
region := objectMemory memoryManager regionForAddress: start.

file
next: segSize
putAll: region memory
startingAt: segStart - region start + 1.
startingAt: start - region start + 1.

^ segSize
]
Expand Down
144 changes: 59 additions & 85 deletions smalltalksrc/VMMaker/ComposedImageReader.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@ ComposedImageReader >> endOfSTON: file [
^ (charLeft = self endOfLine) and: [ charRight = $} ]
]

{ #category : #reading }
ComposedImageReader >> readDataFromFileName: fullFileName startingAt: startingAddress bytes: bytesToRead [

<inline: true>
<var: #file type: #sqImageFile>
| file bytes |

file := self
sqImageFile: fullFileName
Open: 'rb'.

bytes := self
sq: startingAddress
Image: (self sizeof: #char)
File: bytesToRead
Read: file.

self sqImageFileClose: file.

^ bytes
]

{ #category : #reading }
ComposedImageReader >> readFieldsSTONFrom: file into: aStruct [

Expand Down Expand Up @@ -106,37 +128,49 @@ ComposedImageReader >> readImageNamed: imageName [
^ 0 "Must return sqInt"
]

{ #category : #'perm - space' }
ComposedImageReader >> readPermSpaceDataFromImage: imageFileName startingAt: startingAddress bytes: bytesToRead [
{ #category : #reading }
ComposedImageReader >> readMetadataFromFileName: fullFileName [

<inline: true>
<var: #file type: #sqImageFile>
<var: #buffer declareC: 'char buffer[255]'>
| buffer file bytes |
self simulationOnly: [ buffer := nil ].
<var: #metadata type: #ComposedMetadataStruct>

| metadata file |

self simulationOnly: [ metadata := ComposedMetadataStruct new ].

file := self
sqImageFile: (self permanentDataFileinImage: imageFileName)
Open: 'rb'.
sqImageFile: fullFileName
Open: 'r'.

bytes := self
sq: startingAddress
Image: (self sizeof: #char)
File: bytesToRead
Read: file.
self readSTONFrom: file into: (self addressOf: metadata).

self sqImageFileClose: file.

^ bytes
^ metadata
]

{ #category : #'perm - space' }
ComposedImageReader >> readPermanentSpaceDataFromImage: imageFileName startingAt: startingAddress bytes: bytesToRead [

^ self
readDataFromFileName: (self permSpaceDataFileInImage: imageFileName)
startingAt: startingAddress
bytes: bytesToRead
]

{ #category : #'perm - space' }
ComposedImageReader >> readPermSpaceFromImageFile: imageFileName header: aHeader [
ComposedImageReader >> readPermanentSpaceFromImageFile: imageFileName header: aHeader [

<inline: false>
<var: #imageFile type: #sqImageFile>
<var: 'aHeader' type: #SpurImageHeaderStruct>
<var: #permSpaceMetadata type: #ComposedMetadataStruct>

| newBase permSpaceMetadata oldBase dataSize bytesRead |

newBase := objectMemory getMemoryMap permSpaceStart.
permSpaceMetadata := self readPermSpaceMetadataFromImage:
imageFileName.
permSpaceMetadata := self readPermanentSpaceMetadataFromImage: imageFileName.
oldBase := permSpaceMetadata startAddress.
dataSize := permSpaceMetadata dataSize.

Expand All @@ -145,42 +179,20 @@ ComposedImageReader >> readPermSpaceFromImageFile: imageFileName header: aHeader
"check if permsSpace is allocated"

bytesRead := self
readPermSpaceDataFromImage: imageFileName
readPermanentSpaceDataFromImage: imageFileName
startingAt: (self pointerForOop: newBase)
bytes: dataSize.

"Check segment bytes read"
"Check bytes read"
bytesRead ~= dataSize ifTrue: [ interpreter unableToReadImageError ].

^ bytesRead
]

{ #category : #'perm - space' }
ComposedImageReader >> readPermSpaceMetadataFromImage: imageFileName [

"self >> readSegmentMetadata: segmentIndex fromImage: imageFileName"

<inline: true>
<var: #file type: #sqImageFile>
<var: #buffer declareC: 'char buffer[255]'>
<var: #segmentMetadata type: #ComposedMetadataStruct>
| metadata buffer file |
self simulationOnly: [
buffer := nil.
metadata := ComposedMetadataStruct new ].
ComposedImageReader >> readPermanentSpaceMetadataFromImage: imageFileName [

file := self
sqImageFile: (self
permSpaceMetadataFileNameInImage: imageFileName
into: buffer
bufferSize: 255)
Open: 'r'.

self readSTONFrom: file into: (self addressOf: metadata).

self sqImageFileClose: file.

^ metadata
^ self readMetadataFromFileName: (self permSpaceMetadataFileNameInImage: imageFileName)
]

{ #category : #reading }
Expand All @@ -194,60 +206,22 @@ ComposedImageReader >> readSTONFrom: file into: aStruct [
{ #category : #segments }
ComposedImageReader >> readSegmentData: segmentIndex fromImage: imageFileName startingAt: startingAddress bytes: bytesToRead [

<inline: true>
<var: #file type: #sqImageFile>
<var: #buffer declareC: 'char buffer[255]'>
| buffer file bytes |
self simulationOnly: [ buffer := nil ].

file := self sqImageFile: (self
segmentFileName: segmentIndex
withExtension: '.data'
inImage: imageFileName
into: buffer
bufferSize: 255)
Open: 'rb'.

bytes := self sq: startingAddress Image: (self sizeof: #char) File: bytesToRead Read: file.

self sqImageFileClose: file.

^ bytes
^ self
readDataFromFileName: (self segmentDataFile: segmentIndex inImage: imageFileName)
startingAt: startingAddress
bytes: bytesToRead
]

{ #category : #segments }
ComposedImageReader >> readSegmentMetadata: segmentIndex fromImage: imageFileName [

<inline: true>
<var: #file type: #sqImageFile>
<var: #buffer declareC: 'char buffer[255]'>
<var: #segmentMetadata type: #ComposedMetadataStruct>
| segmentMetadata buffer file |
self simulationOnly: [
buffer := nil.
segmentMetadata := ComposedMetadataStruct new ].

file := self
sqImageFile: (self
segmentFileName: segmentIndex
withExtension: '.ston'
inImage: imageFileName
into: buffer
bufferSize: 255)
Open: 'r'.

self readSTONFrom: file into: (self addressOf: segmentMetadata).

self sqImageFileClose: file.

^ segmentMetadata
^ self readMetadataFromFileName: (self segmentMetadataFile: segmentIndex inImage: imageFileName)
]

{ #category : #segments }
ComposedImageReader >> readSegmentsFromImageFile: imageFileName header: aHeader [

<inline: false>
<var: #imageFile type: #sqImageFile>
<var: 'segInfo' type: #'SpurSegmentInfo *'>
<var: 'aHeader' type: #SpurImageHeaderStruct>
<var: #segmentMetadata type: #ComposedMetadataStruct>
Expand Down

0 comments on commit 7d7a277

Please sign in to comment.