Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2859.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2859
Author: eem
Time: 28 October 2020, 5:16:02.046216 pm
UUID: cf8dc817-56ad-44b6-a593-7ec5a163df5f
Ancestors: VMMaker.oscog-eem.2858
Allow processor predefined macros to include expressions (i.e. __ARM_ARCH >= 8).
=============== Diff against VMMaker.oscog-eem.2858 ===============
Item was changed:
----- Method: Cogit class>>generateCodeStringForCogitDotC (in category 'translation') -----
generateCodeStringForCogitDotC
"Generate a skeletal cogit.c that includes the relevant cogitFOO.c
for the appropriate subclasses of CogAbstractInstruction.
self generateCodeStringForCogitDotC"
| string insertPosition abis defaultDef |
abis := OrderedCollection new.
string := String streamContents:
[:s|
s nextPutAll: '/* Automatically generated by\ ' withCRs.
s nextPutAll: (CCodeGenerator monticelloDescriptionFor: self).
s cr; nextPutAll: ' */'.
s cr; cr; nextPut: $#.
insertPosition := s position.
self translateableInstructionSubclassesAndInstalledOptionsDo:
[:class | | abi |
s nextPutAll: 'if '.
(abi := InitializationOptions at: #ABI ifAbsent: []) ifNotNil:
[s nextPutAll: (abis addLast: abi); nextPutAll: ' && ('].
class identifyingPredefinedMacros
+ do: [:predefinedMacro|
+ (predefinedMacro includes: Character space) "not a macr name but an expression"
+ ifTrue: [s nextPut: $(; nextPutAll: predefinedMacro]
+ ifFalse: [s nextPutAll: 'defined('; nextPutAll: predefinedMacro].
+ s nextPut: $)]
- do: [:predefinedMacro| s nextPutAll: 'defined('; nextPutAll: predefinedMacro; nextPut: $)]
separatedBy: [s nextPutAll: ' || '].
abi ifNotNil: [s nextPut: $)].
s cr; cr; nextPutAll: '# include "'; nextPutAll: class moduleName; nextPutAll: '.c"'.
s cr; cr; nextPutAll: '#el'].
s nextPutAll: 'se'.
#( 'As yet no Cogit implementation appears to exist for your platform.'
'Consider implementing it, starting by adding a subclass of CogAbstractInstruction.') do:
[:msg| s cr; nextPutAll: '# error '; nextPutAll: msg].
s cr; nextPutAll: '#endif'; cr].
abis isEmpty ifTrue:
[^string].
defaultDef := String streamContents:
[:s|
s nextPutAll: '#if !!'.
abis do: [:abi| s nextPutAll: abi] separatedBy: [s nextPutAll: ' && !!'].
s cr; nextPutAll: '# define '; nextPutAll: abis first; nextPutAll: ' 1'; cr.
s nextPutAll: '#endif'; cr; cr].
^string copyReplaceFrom: insertPosition to: insertPosition - 1 with: defaultDef!