VM Maker: Cog-eem.333.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: Cog-eem.333.mcz

commits-2
 
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.333.mcz

==================== Summary ====================

Name: Cog-eem.333
Author: eem
Time: 16 December 2016, 4:42:14.563053 pm
UUID: 2df65635-9a33-4af3-90a7-dfe6de9f6480
Ancestors: Cog-eem.332

Add scripts to help extract the compaction algorithm into its own class, prior to being superceded.

=============== Diff against Cog-eem.332 ===============

Item was added:
+ ----- Method: CogScripts class>>changedSpurCompactorMethods (in category 'separate vm scripts') -----
+ changedSpurCompactorMethods
+ "Answer the methods in SpurPigCompactor and subclasses that change if sends to self for methods implemented
+ in SpurMemoryManager become sends to manager."
+ "CogScripts changedSpurCompactorMethods"
+ | selectors compactorVars spurMemoryManagerSelectors rules model environment sortedChanges |
+ selectors := (self systemNavigation allAccessesTo: 'firstFreeChunk' from: SpurMemoryManager) asSet,
+ (self systemNavigation allAccessesTo: 'lastFreeChunk' from: SpurMemoryManager)
+ collect: [:mr| mr selector].
+ selectors addAll: (SpurMemoryManager selectors select: [:s| ('*pigcompact*' match: s) or: [s endsWith: 'Pig']]).
+ compactorVars := #('numCompactionPasses' 'firstFreeChunk' 'lastFreeChunk' 'scavenger' 'coInterpreter').
+ spurMemoryManagerSelectors := SpurMemoryManager selectors.
+ rules := RBParseTreeRewriter new.
+ rules
+ replace: 'self `@method: ``@args'
+ with: 'manager `@method: ``@args'
+ when: [:node| (spurMemoryManagerSelectors includes: node selector) and: [(selectors includes: node selector) not]].
+ (SpurMemoryManager instVarNames reject: [:iv| compactorVars includes: iv]) do:
+ [:instVar|
+ rules
+ replace: instVar, ' := ``@args' with: 'manager ', instVar, ': ``@args';
+ replace: instVar with: 'manager ', instVar].
+ #( 'nilObj' 'trueObj' 'falseObj')
+ do: [:instVar|
+ rules
+ replace: instVar, ' := ``@args' with: 'manager ', instVar, 'ect: ``@args';
+ replace: instVar with: 'manager ', instVar, 'ect'].
+ model := RBNamespace new.
+ environment := RBBrowserEnvironment new forClasses: { SpurMemoryManager }.
+ environment classesAndSelectorsDo:
+ [ :class :selector | | tree |
+ ((selectors includes: selector)
+ and: [rules executeTree: (tree := class parseTreeFor: selector)]) ifTrue:
+ [model compile: rules tree newSource in: class classified: (class whichCategoryIncludesSelector: selector)]].
+ false ifTrue: [model changes inspect].
+ false ifTrue: "shortest change:"
+ [(model changes changes inject: model changes changes first into: [:c1 :c2| c1 printString size < c2 printString size ifTrue: [c1] ifFalse: [c2]]) inspect].
+
+ sortedChanges := model changes changes asSortedCollection:
+ [:c1 :c2|
+ c1 changeClass == c2 changeClass
+ ifTrue: [c1 selector <= c2 selector]
+ ifFalse: [c2 changeClass inheritsFrom: c1 changeClass]].
+ true ifTrue:
+ [MessageSetTextDifferencer
+ openMessageList: (sortedChanges collect: [:mr| { MethodReference class: mr changeClass selector: mr selector. TextReference new text: mr source class: mr changeClass selector: mr selector }])
+ name: 'self foo <-> manager foo et al'
+ autoSelect: nil].
+
+ ^sortedChanges!

Item was added:
+ ----- Method: CogScripts class>>defineSpurPigCompactor (in category 'separate vm scripts') -----
+ defineSpurPigCompactor
+ "Define SpurPigCompactor"
+ "self defineSpurPigCompactor"
+ | changes pigCompactor |
+ pigCompactor := SpurMemoryManager superclass
+ subclass: #SpurPigCompactor
+ instanceVariableNames: 'manager scavenger coInterpreter firstFreeChunk lastFreeChunk numCompactionPasses'
+ classVariableNames: 'CompactionPassesForGC CompactionPassesForSnapshot'
+ poolDictionaries: 'SpurMemoryManagementConstants VMBasicConstants VMSpurObjectRepresentationConstants'
+ category: SpurMemoryManager category.
+ changes := CogScripts changedSpurCompactorMethods.
+ changes do:
+ [:mr|
+ pigCompactor compile: mr source classified: (SpurMemoryManager whichCategoryIncludesSelector: mr selector)].
+ changes do:
+ [:mr|
+ SpurMemoryManager removeSelector: mr selector].
+ SpurMemoryManager organization removeEmptyCategories!