[Vm-dev] VM Maker Inbox: VMMaker.oscog-dtl.2710.mcz
David T. Lewis
lewis at mail.msen.com
Sun Feb 9 22:56:37 UTC 2020
This is a hack, but it is documented in the method comment and is sufficient
to resolve some long-standing annoyances. It allows the OSProcess unit tests
to pass except for one unresolved FilePlugin concern.
Dave
On Sun, Feb 09, 2020 at 10:31:13PM +0000, commits at source.squeak.org wrote:
>
> David T. Lewis uploaded a new version of VMMaker to project VM Maker Inbox:
> http://source.squeak.org/VMMakerInbox/VMMaker.oscog-dtl.2710.mcz
>
> ==================== Summary ====================
>
> Name: VMMaker.oscog-dtl.2710
> Author: dtl
> Time: 9 February 2020, 5:31:03.769268 pm
> UUID: ca813d93-5269-4ffb-a6ee-299e08c8ef81
> Ancestors: VMMaker.oscog-nice.2709
>
> Translate isDefined:inSmalltalk:comment:ifTrue:ifFalse: as if it was cppIf:ifTrue:ifFalse: by ignoring the comment node and the Smalltalk expression node. Compatibility for externally maintained plugins such as OSPP. With this change, VMConstruction-Plugins-OSProcessPlugin-dtl.50 can be used in VMMaker.oscog, with all OSProcesses tests green except for one FilePlugin issue not directly related to OSPP.
> ===
> Ancestors: VMMaker.oscog-nice.2709
>
> VMMaker.oscog-nice.2709:
> Try and restore the lowcode capability to return int64 result on various 32bits ABI.
>
> The ABIResultRegHigh needs to be defined.
>
>
> A CCodeGenerator>>generateInlineLegacyCppIfDefElse:on:indent:
> M CCodeGenerator>>initializeCTranslationDictionary
>
> =============== Diff against VMMaker.oscog-nice.2709 ===============
>
> Item was added:
> + ----- Method: CCodeGenerator>>generateInlineLegacyCppIfDefElse:on:indent: (in category 'C translation') -----
> + generateInlineLegacyCppIfDefElse: msgNode on: aStream indent: level
> + "Translate isDefined:inSmalltalk:comment:ifTrue:ifFalse: as if it was cppIf:ifTrue:ifFalse:
> + by ignoring the comment node and the Smalltalk expression node. Compatibility
> + for externally maintained plugins."
> +
> + msgNode args size = 5
> + ifTrue: [ | newArgs | "Condense the arguments array to match that of cppIf:ifTrue:ifFalse:"
> + newArgs := Array new: 3.
> + newArgs at: 1 put: (msgNode args at: 1).
> + newArgs at: 2 put: (msgNode args at: 4).
> + newArgs at: 3 put: (msgNode args at: 5).
> + msgNode setSelector: msgNode selector receiver: msgNode receiver arguments: newArgs]
> + ifFalse: ["msgNode was previously condensed during an earlier inlining pass"].
> + self generateInlineCppIfElse: msgNode on: aStream indent: level!
>
> Item was changed:
> ----- Method: CCodeGenerator>>initializeCTranslationDictionary (in category 'C translation support') -----
> initializeCTranslationDictionary
> "Initialize the dictionary mapping message names to actions for C code generation."
>
> | pairs |
>
> translationDict := Dictionary new: 200.
> pairs := #(
> #& #generateAnd:on:indent:
> #| #generateOr:on:indent:
> #abs #generateAbs:on:indent:
> #and: #generateSequentialAnd:on:indent:
> #or: #generateSequentialOr:on:indent:
> #not #generateNot:on:indent:
>
> #+ #generatePlus:on:indent:
> #- #generateMinus:on:indent:
> #negated #generateNegated:on:indent:
> #* #generateTimes:on:indent:
> #/ #generateDivide:on:indent:
> #// #generateDivide:on:indent:
> #\\ #generateModulo:on:indent:
> #<< #generateShiftLeft:on:indent:
> #>> #generateShiftRight:on:indent:
> #>>> #generateSignedShiftRight:on:indent:
> #, #generateComma:on:indent:
> #min: #generateMin:on:indent:
> #max: #generateMax:on:indent:
> #between:and: #generateBetweenAnd:on:indent:
>
> #bitAnd: #generateBitAnd:on:indent:
> #bitOr: #generateBitOr:on:indent:
> #bitXor: #generateBitXor:on:indent:
> #bitShift: #generateBitShift:on:indent:
> #signedBitShift: #generateSignedBitShift:on:indent:
> #bitInvert32 #generateBitInvert:on:indent:
> #bitInvert64 #generateBitInvert:on:indent:
> #bitClear: #generateBitClear:on:indent:
> #truncateTo: #generateTruncateTo:on:indent:
> #rounded #generateRounded:on:indent:
>
> #byteSwap32 #generateByteSwap32:on:indent:
> #byteSwap64 #generateByteSwap64:on:indent:
> #byteSwapped32IfBigEndian: generateByteSwap32IfBigEndian:on:indent:
> #byteSwapped64IfBigEndian: generateByteSwap64IfBigEndian:on:indent:
>
> #< #generateLessThan:on:indent:
> #<= #generateLessThanOrEqual:on:indent:
> #= #generateEqual:on:indent:
> #> #generateGreaterThan:on:indent:
> #>= #generateGreaterThanOrEqual:on:indent:
> #~= #generateNotEqual:on:indent:
> #== #generateEqual:on:indent:
> #~~ #generateNotEqual:on:indent:
> #isNil #generateIsNil:on:indent:
> #notNil #generateNotNil:on:indent:
>
> #whileTrue: #generateWhileTrue:on:indent:
> #whileFalse: #generateWhileFalse:on:indent:
> #whileTrue #generateDoWhileTrue:on:indent:
> #whileFalse #generateDoWhileFalse:on:indent:
> #to:do: #generateToDo:on:indent:
> #to:by:do: #generateToByDo:on:indent:
> #repeat #generateRepeat:on:indent:
> #timesRepeat: #generateTimesRepeat:on:indent:
>
> #ifTrue: #generateIfTrue:on:indent:
> #ifFalse: #generateIfFalse:on:indent:
> #ifTrue:ifFalse: #generateIfTrueIfFalse:on:indent:
> #ifFalse:ifTrue: #generateIfFalseIfTrue:on:indent:
>
> #ifNotNil: #generateIfNotNil:on:indent:
> #ifNil: #generateIfNil:on:indent:
> #ifNotNil:ifNil: #generateIfNotNilIfNil:on:indent:
> #ifNil:ifNotNil: #generateIfNilIfNotNil:on:indent:
>
> #at: #generateAt:on:indent:
> #at:put: #generateAtPut:on:indent:
> #basicAt: #generateAt:on:indent:
> #basicAt:put: #generateAtPut:on:indent:
>
> #integerValueOf: #generateIntegerValueOf:on:indent:
> #integerObjectOf: #generateIntegerObjectOf:on:indent:
> #isIntegerObject: #generateIsIntegerObject:on:indent:
> #cCode: #generateInlineCCode:on:indent:
> #cCode:inSmalltalk: #generateInlineCCode:on:indent:
> #cPreprocessorDirective: #generateInlineCPreprocessorDirective:on:indent:
> #cppIf:ifTrue:ifFalse: #generateInlineCppIfElse:on:indent:
> #cppIf:ifTrue: #generateInlineCppIfElse:on:indent:
> + #isDefined:inSmalltalk:comment:ifTrue:ifFalse: #generateInlineLegacyCppIfDefElse:on:indent:
> #cCoerce:to: #generateCCoercion:on:indent:
> #cCoerceSimple:to: #generateCCoercion:on:indent:
> #addressOf: #generateAddressOf:on:indent:
> #addressOf:put: #generateAddressOf:on:indent:
> #asAddress:put: #generateAsAddress:on:indent:
> #signedIntFromLong64 #generateSignedIntFromLong64:on:indent:
> #signedIntFromLong #generateSignedIntFromLong:on:indent:
> #signedIntFromShort #generateSignedIntFromShort:on:indent:
> #signedIntToLong64 #generateSignedIntToLong64:on:indent:
> #signedIntToLong #generateSignedIntToLong:on:indent:
> #signedIntToShort #generateSignedIntToShort:on:indent:
> #preIncrement #generatePreIncrement:on:indent:
> #preDecrement #generatePreDecrement:on:indent:
> #inline: #generateInlineDirective:on:indent:
> #asFloat #generateAsFloat:on:indent:
> #asInteger #generateAsInteger:on:indent:
> #asIntegerPtr #generateAsIntegerPtr:on:indent:
> #asUnsignedInteger #generateAsUnsignedInteger:on:indent:
> #asUnsignedIntegerPtr #generateAsUnsignedIntegerPtr:on:indent:
> #asLong #generateAsLong:on:indent:
> #asUnsignedLong #generateAsUnsignedLong:on:indent:
> #asUnsignedLongLong #generateAsUnsignedLongLong:on:indent:
> #asVoidPointer #generateAsVoidPointer:on:indent:
> #asSymbol #generateAsSymbol:on:indent:
> #flag: #generateFlag:on:indent:
> #anyMask: #generateBitAnd:on:indent:
> #allMask: #generateAllMask:on:indent:
> #noMask: #generateNoMask:on:indent:
> #raisedTo: #generateRaisedTo:on:indent:
> #touch: #generateTouch:on:indent:
>
> #bytesPerOop #generateBytesPerOop:on:indent:
> #bytesPerWord #generateBytesPerWord:on:indent:
> #wordSize #generateBytesPerWord:on:indent:
> #baseHeaderSize #generateBaseHeaderSize:on:indent:
> #minSmallInteger #generateSmallIntegerConstant:on:indent:
> #maxSmallInteger #generateSmallIntegerConstant:on:indent:
>
> #sharedCodeNamed:inCase: #generateSharedCodeDirective:on:indent:
>
> #perform: #generatePerform:on:indent:
> #perform:with: #generatePerform:on:indent:
> #perform:with:with: #generatePerform:on:indent:
> #perform:with:with:with: #generatePerform:on:indent:
> #perform:with:with:with:with: #generatePerform:on:indent:
> #perform:with:with:with:with:with: #generatePerform:on:indent:
>
> #value #generateValue:on:indent:
> #value: #generateValue:on:indent:
> #value:value: #generateValue:on:indent:
> #value:value:value: #generateValue:on:indent:
> #value:value:value:value: #generateValue:on:indent:
> #value:value:value:value:value: #generateValue:on:indent:
> #value:value:value:value:value:value: #generateValue:on:indent:
>
> #deny: #generateDeny:on:indent:
>
> #shouldNotImplement #generateSmalltalkMetaError:on:indent:
> #shouldBeImplemented #generateSmalltalkMetaError:on:indent:
> #subclassResponsibility #generateSmalltalkMetaError:on:indent:
> ).
>
> 1 to: pairs size by: 2 do: [:i |
> translationDict at: (pairs at: i) put: (pairs at: i + 1)].
>
> pairs := #(
> #ifTrue: #generateIfTrueAsArgument:on:indent:
> #ifFalse: #generateIfFalseAsArgument:on:indent:
> #ifTrue:ifFalse: #generateIfTrueIfFalseAsArgument:on:indent:
> #ifFalse:ifTrue: #generateIfFalseIfTrueAsArgument:on:indent:
> #ifNotNil: #generateIfNotNilAsArgument:on:indent:
> #ifNil: #generateIfNilAsArgument:on:indent:
> #ifNotNil:ifNil: #generateIfNotNilIfNilAsArgument:on:indent:
> #ifNil:ifNotNil: #generateIfNilIfNotNilAsArgument:on:indent:
> #cCode: #generateInlineCCodeAsArgument:on:indent:
> #cCode:inSmalltalk: #generateInlineCCodeAsArgument:on:indent:
> #cppIf:ifTrue:ifFalse: #generateInlineCppIfElseAsArgument:on:indent:
> #cppIf:ifTrue: #generateInlineCppIfElseAsArgument:on:indent:
>
> #value #generateValueAsArgument:on:indent:
> #value: #generateValueAsArgument:on:indent:
> #value:value: #generateValueAsArgument:on:indent:
> ).
>
> asArgumentTranslationDict := Dictionary new: 8.
> 1 to: pairs size by: 2 do: [:i |
> asArgumentTranslationDict at: (pairs at: i) put: (pairs at: i + 1)].
> !
>
More information about the Vm-dev
mailing list