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

commits at source.squeak.org commits at source.squeak.org
Tue Aug 31 23:07:41 UTC 2021


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

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

Name: Cog-eem.440
Author: eem
Time: 31 August 2021, 4:07:39.96008 pm
UUID: 2ff9d1ed-5be6-46a7-a1f9-f0bfb9bf51ab
Ancestors: Cog-eem.439

Fix simulation for x86.
Commit an unfinished script for refactoring marking in the spur collector for a potential attempt at implementing incremental global collection.

=============== Diff against Cog-eem.439 ===============

Item was added:
+ ----- Method: BochsIA32Alien>>cResultRegisterHigh (in category 'accessing-abstract') -----
+ cResultRegisterHigh
+ 	^self edx!

Item was added:
+ ----- Method: CogScripts class>>changedMethodsForExtractingSpurMarkSweepCollector (in category 'separate vm scripts') -----
+ changedMethodsForExtractingSpurMarkSweepCollector
+ 	"Answer the methods in SpurMemoryManager and subclasses that change if scan mark collector methods are extracted to a separate instance in scanMarkCollector"
+ 	"CogScripts changedMethodsForExtractingSpurMarkSweepCollector"
+ 	"FileDirectory default
+ 		newFileNamed: 'SpurScanMarkCollector.cs'
+ 		do: [:s|
+ 			s timeStamp.
+ 			CogScripts changedMethodsForExtractingSpurMarkSweepCollector do:
+ 				[:rbMethodChange| s cr; print: rbMethodChange]]"
+ 	| selectors scanMarkCollectorVars rules model environment sortedChanges |
+ 	selectors := ((SpurMemoryManager methodsInCategory: #'gc - global') select: [:s| s beginsWith: 'mark'])
+ 					copyWithoutAll: #(markAndTrace: markAndTraceHiddenRoots).
+ 	scanMarkCollectorVars := SpurScanMarkCollector instVarNames copyWithout: 'coInterpreter'.
+ 	rules := RBParseTreeRewriter new.
+ 	rules
+ 		replace: 'self `@method: ``@args'
+ 		with: 'scanMarkCollector `@method: ``@args'
+ 		when: [:node| "is a SpurMemoryManager method"
+ 			(selectors includes: node methodNode selector) not
+ 			and: [selectors includes: node selector]].
+ 	rules
+ 		replace: 'self `@method: ``@args'
+ 		with: 'manager `@method: ``@args'
+ 		when: [:node| "is a SpurScanMarkCollector method"
+ 			(selectors includes: node methodNode selector)
+ 			and: [(selectors includes: node selector) not]].
+ 	(SpurMemoryManager instVarNames reject: [:iv| scanMarkCollectorVars includes: iv]) do:
+ 		[:instVar|
+ 		 rules
+ 			replace: instVar, ' := ``@args'
+ 			with: 'manager ', instVar, ': ``@args'
+ 			when: [:node| selectors includes: node methodNode selector];
+ 			replace: instVar
+ 			with: 'manager ', instVar
+ 			when: [:node| selectors includes: node methodNode selector]].
+ 	(SpurMemoryManager instVarNames select: [:iv| scanMarkCollectorVars includes: iv]) do:
+ 		[:instVar|
+ 		 rules
+ 			replace: instVar, ' := ``@args'
+ 			with: 'scanMarkCollector ', instVar, ': ``@args'
+ 			when: [:node| (selectors includes: node methodNode selector) not];
+ 			replace: instVar
+ 			with: 'scanMarkCollector ', instVar
+ 			when: [:node| (selectors includes: node methodNode selector) not]].
+ 	#(	'nilObj' 'trueObj' 'falseObj')
+ 		do: [:instVar|
+ 			rules
+ 				replace: instVar, ' := ``@args'
+ 				with: 'manager ', instVar, 'ect: ``@args'
+ 				when: [:node| (selectors includes: node methodNode selector) and: [self halt. true]];
+ 				replace: instVar
+ 				with: 'manager ', instVar, 'ect'
+ 				when: [:node| (selectors includes: node methodNode selector) and: [self halt. true]]].
+ 	model := RBNamespace new.
+ 	environment := RBBrowserEnvironment new forClasses: SpurMemoryManager withAllSubclasses.
+ 	environment classesAndSelectorsDo:
+ 		[ :class :selector | | tree |
+ 		tree := class parseTreeFor: selector.
+ 		(rules executeTree: tree) ifTrue:
+ 			[model
+ 				compile: rules tree newSource
+ 				in: ((selectors includes: selector)
+ 						ifTrue: [SpurScanMarkCollector]
+ 						ifFalse: [class]) classified: (class whichCategoryIncludesSelector: selector)]].
+ 
+ 	sortedChanges := model changes changes asSortedCollection:
+ 						[:c1 :c2|
+ 						c1 changeClass == c2 changeClass
+ 							ifTrue: [c1 selector <= c2 selector]
+ 							ifFalse: [c2 changeClass inheritsFrom: c1 changeClass]].
+ 
+ 	^sortedChanges!



More information about the Vm-dev mailing list