[Vm-dev] VM Maker: Cog-eem.333.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Dec 17 00:42:18 UTC 2016


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!



More information about the Vm-dev mailing list