[Vm-dev] VM Maker: Cog-eem.118.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Nov 12 23:59:33 UTC 2013
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.118.mcz
==================== Summary ====================
Name: Cog-eem.118
Author: eem
Time: 12 November 2013, 3:59:17.082 pm
UUID: 4b955d55-bab9-4826-a8a7-fc08f34ac52a
Ancestors: Cog-eem.117
Fix bootstraop after isEnumerableObject: change; classIndex assert
requires correct numClassTablePages.
=============== Diff against Cog-eem.117 ===============
Item was changed:
----- Method: SpurBootstrap>>allocateClassTable (in category 'bootstrap image') -----
allocateClassTable
"Allocate the root of the classTable plus enough pages to accomodate all classes in
the classToIndex map. Don't fill in the entries yet; the classes have yet to be cloned."
| tableRoot page maxSize numPages |
tableRoot := newHeap
allocateSlots: newHeap classTableRootSlots + newHeap hiddenRootSlots
format: newHeap arrayFormat
classIndex: newHeap arrayClassIndexPun.
self assert: (newHeap numSlotsOf: tableRoot) = (newHeap classTableRootSlots + newHeap hiddenRootSlots).
self assert: (newHeap formatOf: tableRoot) = newHeap arrayFormat.
self assert: (newHeap classIndexOf: tableRoot) = newHeap arrayClassIndexPun.
newHeap nilFieldsOf: tableRoot.
"first page is strong"
page := newHeap
allocateSlots: newHeap classTablePageSize
format: newHeap arrayFormat
classIndex: newHeap arrayClassIndexPun.
self assert: (newHeap numSlotsOf: page) = newHeap classTablePageSize.
self assert: (newHeap formatOf: tableRoot) = newHeap arrayFormat.
self assert: (newHeap classIndexOf: tableRoot) = newHeap arrayClassIndexPun.
self assert: (newHeap objectAfter: tableRoot limit: newHeap freeStart) = page.
lastClassTablePage := page.
newHeap nilFieldsOf: page.
newHeap storePointer: 0 ofObject: tableRoot withValue: page.
newHeap hiddenRootsObj: tableRoot.
maxSize := classToIndex inject: 0 into: [:a :b| a max: b].
numPages := (maxSize + newHeap classTableMinorIndexMask / newHeap classTablePageSize) truncated.
2 to: numPages do:
[:i|
page := newHeap
allocateSlots: newHeap classTablePageSize
format: newHeap arrayFormat
classIndex: newHeap arrayClassIndexPun.
self assert: (newHeap numSlotsOf: page) = newHeap classTablePageSize.
self assert: (newHeap formatOf: page) = newHeap arrayFormat.
self assert: (newHeap classIndexOf: page) = newHeap arrayClassIndexPun.
newHeap fillObj: page numSlots: newHeap classTablePageSize with: newHeap nilObject.
newHeap storePointer: i - 1 ofObject: tableRoot withValue: page.
self assert: (newHeap objectAfter: (newHeap fetchPointer: i - 2 ofObject: tableRoot) limit: newHeap freeStart) = page.
+ lastClassTablePage := page].
+ "and once again to recompute numClassTablePages post building the class table."
+ newHeap instVarNamed: 'numClassTablePages' put: nil.
+ newHeap hiddenRootsObj: tableRoot!
- lastClassTablePage := page]!
More information about the Vm-dev
mailing list