Marcel Taeumel uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-mt.3260.mcz
==================== Summary ====================
Name: VMMaker.oscog-mt.3260 Author: mt Time: 1 November 2022, 11:52:51.509196 am UUID: 44ed8e4a-a0d1-dd40-a840-d438405c51af Ancestors: VMMaker.oscog-mt.3259
Fixes generation of cmacros for one-arg quick-returns.
This fixes a regression from VMMaker.oscog-eem.3240 VMMaker.oscog-eem.3237 VMMaker.oscog-eem.3236 VMMaker.oscog-eem.3234
:-)
=============== Diff against VMMaker.oscog-mt.3259 ===============
Item was changed: ----- Method: CCodeGenerator>>addMethodFor:selector: (in category 'utilities') ----- addMethodFor: aClass selector: selector "Add the given method to the code base and answer its translation or nil if it shouldn't be translated."
| method tmethod | method := aClass compiledMethodAt: selector. (method pragmaAt: #doNotGenerate) ifNotNil: ["only remove a previous method if this one overrides it, i.e. this is a subclass method. If the existing method is in a different hierarchy this method must be merely a redeirect." (methods at: selector ifAbsent: []) ifNotNil: [:tm| (aClass includesBehavior: tm definingClass) ifTrue: [self removeMethodForSelector: selector]]. ^nil]. method isSubclassResponsibility ifTrue: [^nil]. (self shouldIncludeMethodFor: aClass selector: selector) ifFalse: [^nil]. tmethod := self compileToTMethodSelector: selector in: aClass. "Even though we exclude initialize methods, we must consider their global variable usage, otherwise globals may be incorrectly localized." selector == #initialize ifTrue: [self checkForGlobalUsage: (tmethod allReferencedVariablesUsing: self) in: tmethod. ^nil]. self addMethod: tmethod. "If the method has a macro then add the macro. But keep the method for analysis purposes (e.g. its variable accesses)." (method pragmaAt: #cmacro:) ifNotNil: [:pragma| self addMacro: (pragma argumentAt: 1) for: selector. (inlineList includes: selector) ifTrue: [inlineList := inlineList copyWithout: selector]]. (method pragmaAt: #cmacro) ifNotNil: [:pragma| | literal | "Method should be just foo ^const" self assert: (self isValidMacroMethod: method). literal := (method isQuick or: [method numArgs = 1]) ifTrue: [method decompile quickMethodReturnLiteral] ifFalse: [method literalAt: 1]. + self addMacro: (method numArgs = 1 "foo: arg ^const is a useful exception" + ifTrue: ['(x) '] + ifFalse: ['() ']), + (method isReturnField - self addMacro: '() ', (method isReturnField ifTrue: [literal] ifFalse: [self cLiteralFor: literal value name: method selector]) for: selector. (inlineList includes: selector) ifTrue: [inlineList := inlineList copyWithout: selector]]. ^tmethod!
vm-dev@lists.squeakfoundation.org