[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