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!
vm-dev@lists.squeakfoundation.org