Skip to content

Commit

Permalink
Refactor: Extract logic from big method
Browse files Browse the repository at this point in the history
  • Loading branch information
PalumboN committed Jan 20, 2022
1 parent bc94553 commit 244b3c9
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 38 deletions.
16 changes: 8 additions & 8 deletions smalltalksrc/VMMaker/AbstractComposedImageAccess.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,11 @@ AbstractComposedImageAccess >> imageFile: imageFileName [
^ imageFile
]

{ #category : #'file operations' }
AbstractComposedImageAccess >> isSegmentMetadata: file [

^ file extension = 'ston' and: [ file basename beginsWith: 'seg' ]
]

{ #category : #'file operations' }
AbstractComposedImageAccess >> segmentDataFile: segmentIndex fromFile: imageFile [

| segmentDataFileName |
segmentDataFileName := 'seg' , segmentIndex asString , '.data'.
segmentDataFileName := (self segmentFileNameWithoutExtension: segmentIndex) , '.data'.

^ imageFile / segmentDataFileName
]
Expand All @@ -47,11 +41,17 @@ AbstractComposedImageAccess >> segmentDataFile: segmentIndex inImage: imageFileN
^ self segmentDataFile: segmentIndex fromFile: imageFile
]

{ #category : #'file operations' }
AbstractComposedImageAccess >> segmentFileNameWithoutExtension: segmentIndex [

^ 'seg' , segmentIndex asString
]

{ #category : #'file operations' }
AbstractComposedImageAccess >> segmentMetadataFile: segmentIndex fromFile: imageFile [

| segmentDataFileName |
segmentDataFileName := 'seg' , segmentIndex asString , '.ston'.
segmentDataFileName := (self segmentFileNameWithoutExtension: segmentIndex) , '.ston'.

^ imageFile / segmentDataFileName
]
Expand Down
7 changes: 7 additions & 0 deletions smalltalksrc/VMMaker/AbstractFileReference.extension.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Extension { #name : #AbstractFileReference }

{ #category : #'*VMMaker' }
AbstractFileReference >> hasChildrenMatching: patterns [

^ (self childrenMatching: patterns) isNotEmpty
]
24 changes: 23 additions & 1 deletion smalltalksrc/VMMaker/AbstractImageAccess.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,21 @@ AbstractImageAccess >> extractImageVersionFrom: fileVersion into: header [

]

{ #category : #segments }
AbstractImageAccess >> finalizeSegmentsRead: totalBytesRead newBase: newBase [

"newBase should point just past the last bridge. all others should have been eliminated."
self assert: newBase - objectMemory getMemoryMap oldSpaceStart = (totalBytesRead
- (segmentManager numSegments * objectMemory bridgeSize)).

"Segments has correct swizzle values, so it can be used to swizzle objects"
segmentManager setCanSwizzle: true.

"set freeOldSpaceStart now for adjustAllOopsBy:"
objectMemory setFreeOldSpaceStart: newBase.

]

{ #category : #reading }
AbstractImageAccess >> imageFormatCompatibilityVersion [
"This VM is backward-compatible with the immediately preceding version."
Expand Down Expand Up @@ -163,7 +178,14 @@ AbstractImageAccess >> objectMemory: memory [
objectMemory := memory
]

{ #category : #reading }
{ #category : #segments }
AbstractImageAccess >> prepareSegmentsToRead [

segmentManager clearSegments.
segmentManager allocateOrExtendSegmentInfos
]

{ #category : #segments }
AbstractImageAccess >> readSegmentsFromImageFile: imageFile header: header [

self subclassResponsibility
Expand Down
26 changes: 8 additions & 18 deletions smalltalksrc/VMMaker/ComposedImageReader.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ ComposedImageReader >> readSegmentMetadata: segmentIndex fromFile: imageFile [
readStreamDo: [ :f | self readSTONFrom: f ]
]

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

"Compare with SpurImageReader >> readSegmentsFromImageFile:header:"
Expand All @@ -55,10 +55,9 @@ ComposedImageReader >> readSegmentsFromImageFile: imageFile header: aHeader [
<inline: false>
<var: 'segInfo' type: #'SpurSegmentInfo *'>
<var: 'aHeader' type: #SpurImageHeaderStruct>
| bytesRead totalBytesRead bridgehead bridge segmentSize oldBase newBase segmentIndex existNextSegment |
| bytesRead totalBytesRead segmentSize oldBase newBase segmentIndex existsNextSegment |

segmentManager clearSegments.
segmentManager allocateOrExtendSegmentInfos.
self prepareSegmentsToRead.

"segment sizes include the two-header-word bridge at the end of each segment."
segmentIndex := 0.
Expand Down Expand Up @@ -90,32 +89,23 @@ ComposedImageReader >> readSegmentsFromImageFile: imageFile header: aHeader [

"Check if exist next segment"
segmentIndex := segmentIndex + 1.
existNextSegment := (imageFile childrenMatching: 'seg' , segmentIndex asString , '*' ) isNotEmpty.
existsNextSegment := imageFile hasChildrenMatching: (self segmentFileNameWithoutExtension: segmentIndex) , '*'.

existNextSegment ifTrue: [ | nextSegmentMetadata |
existsNextSegment ifTrue: [ | nextSegmentMetadata |
nextSegmentMetadata := self readSegmentMetadata: segmentIndex fromFile: imageFile.
oldBase := nextSegmentMetadata segStart.
segmentSize := nextSegmentMetadata segSize.
].

existNextSegment
existsNextSegment
] whileTrue.

"newBase should point just past the last bridge. all others should have been eliminated."
self assert:
newBase - objectMemory getMemoryMap oldSpaceStart = (totalBytesRead
- (segmentManager numSegments * objectMemory bridgeSize)).

"Segments has correct swizzle values, so it can be used to swizzle objects"
segmentManager setCanSwizzle: true.

"set freeOldSpaceStart now for adjustAllOopsBy:"
objectMemory setFreeOldSpaceStart: newBase.
self finalizeSegmentsRead: totalBytesRead newBase: newBase.

^ totalBytesRead
]

{ #category : #reading }
{ #category : #segments }
ComposedImageReader >> sq: startingAddress readSegment: segmentIndex File: bytesToRead Read: imageFile [

<doNotGenerate>
Expand Down
14 changes: 3 additions & 11 deletions smalltalksrc/VMMaker/SpurImageReader.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ SpurImageReader >> readSegmentsFromImageFile: f header: aHeader [
<var: 'segInfo' type: #'SpurSegmentInfo *'>
<var: 'aHeader' type: #SpurImageHeaderStruct>
| bytesRead totalBytesRead bridgehead bridge nextSegmentSize oldBase newBase bridgeSpan |
segmentManager clearSegments.
segmentManager allocateOrExtendSegmentInfos.

self prepareSegmentsToRead.

"segment sizes include the two-header-word bridge at the end of each segment."
totalBytesRead := 0.
Expand Down Expand Up @@ -222,15 +222,7 @@ SpurImageReader >> readSegmentsFromImageFile: f header: aHeader [
nextSegmentSize ~= 0 ] whileTrue: [
bridgehead := bridgehead - objectMemory bridgeSize + nextSegmentSize ].

"newBase should point just past the last bridge. all others should have been eliminated."
self assert: newBase - objectMemory getMemoryMap oldSpaceStart = (totalBytesRead
- (segmentManager numSegments * objectMemory bridgeSize)).

"Segments has correct swizzle values, so it can be used to swizzle objects"
segmentManager setCanSwizzle: true.

"set freeOldSpaceStart now for adjustAllOopsBy:"
objectMemory setFreeOldSpaceStart: newBase.
self finalizeSegmentsRead: totalBytesRead newBase: newBase.

^ totalBytesRead
]
Expand Down

0 comments on commit 244b3c9

Please sign in to comment.