[squeak-dev] The Inbox: EToys-ct.369.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Oct 15 19:56:41 UTC 2019
A new version of EToys was added to project The Inbox:
http://source.squeak.org/inbox/EToys-ct.369.mcz
==================== Summary ====================
Name: EToys-ct.369
Author: ct
Time: 15 October 2019, 9:56:30.25283 pm
UUID: 0328de9a-3f0f-fb44-a8d9-12b8bee91796
Ancestors: EToys-ct.366
Refines conversion of MessageNodes into test tiles: Don't fill empty cases with "nil"
=============== Diff against EToys-ct.366 ===============
Item was changed:
----- Method: BlockNode>>withoutImplicitReturns (in category '*Etoys-tiles') -----
withoutImplicitReturns
+ (self statements ifEmpty: [^ self]) last isImplicitReturn
- (self statements ifEmpty: [^ self]) last isReturnSelf
ifFalse: [^ self].
^ self copy statements: self statements allButLast!
Item was changed:
----- Method: MessageNode>>asTileForPlayer: (in category '*Etoys-tiles') -----
asTileForPlayer: aPlayer
| receiverType argumentType resultType phrase receiverTiles |
"Catch edge case: Color tile"
(self receiver isVariableNode and: [self receiver key = (Smalltalk bindingOf: #Color)])
ifTrue: [ | source result |
source := String streamContents: (MessageSend receiver: self selector: #shortPrintOn:).
result := [Compiler evaluate: source] ifError: [nil].
result isColor ifTrue: [^ result newTileMorphRepresentative]].
"Catch edge case: Test tile"
self ifConditionNormalizeAndDo: [:conditionNode :trueNode :falseNode | | compound |
compound := StandardScriptingSystem new yesNoComplexOfTiles.
compound testPart insertTileRow: (conditionNode asTileSetForPlayer: aPlayer) after: 0.
+ compound yesPart insertTileRow: (trueNode withoutImplicitReturns asTileSetForPlayer: aPlayer) after: 0.
+ compound noPart insertTileRow: (falseNode withoutImplicitReturns asTileSetForPlayer: aPlayer) after: 0.
- compound yesPart insertTileRow: (trueNode asTileSetForPlayer: aPlayer) after: 0.
- compound noPart insertTileRow: (falseNode asTileSetForPlayer: aPlayer) after: 0.
compound enforceTileColorPolicy; layoutChanged; fullBounds.
^ compound].
"Otherwise, try to build a phrase tile"
self arguments size < 2 ifFalse: [^ self convertToTileError].
receiverType := #unknown.
argumentType := self arguments ifEmpty: [nil] ifNotEmpty: [#unknown].
resultType := #unkown.
phrase := PhraseTileMorph new.
phrase
setOperator: self selector key
type: resultType
rcvrType: receiverType
argType: argumentType.
receiverTiles := self receiver asTileSetForPlayer: aPlayer.
receiverTiles size = 1 ifFalse: [^ self convertToTileError].
phrase firstSubmorph
addMorph: receiverTiles first;
hResizing: #shrinkWrap; vResizing: #shrinkWrap.
self arguments ifNotEmpty: [ | argumentTiles |
argumentTiles := self arguments first asTileSetForPlayer: aPlayer.
argumentTiles size = 1 ifFalse: [^ self convertToTileError].
phrase lastSubmorph
setType: argumentType;
addMorph: argumentTiles first;
hResizing: #shrinkWrap; vResizing: #shrinkWrap].
^ phrase
hResizing: #shrinkWrap; vResizing: #shrinkWrap;
yourself!
Item was changed:
----- Method: MessageNode>>ifConditionNormalizeAndDo: (in category '*Etoys-tiles') -----
ifConditionNormalizeAndDo: aBlock
| blocks |
blocks := self selector key
caseOf: {
[#ifTrue:ifFalse:] -> [arguments].
[#ifFalse:ifTrue:] -> [self arguments reversed].
+ [#ifTrue:] -> [self arguments copyWith: (BlockNode statements: #() returns: #())].
+ [#ifFalse:] -> [self arguments copyWithFirst: (BlockNode statements: #() returns: #())] }
- [#ifTrue:] -> [self arguments copyWith: BlockNode new].
- [#ifFalse:] -> [self arguments copyWithFirst: BlockNode new] }
otherwise: [^ self].
^ aBlock value: self receiver value: blocks first value: blocks last!
Item was added:
+ ----- Method: ParseNode>>isImplicitReturn (in category '*Etoys-tiles') -----
+ isImplicitReturn
+
+ ^false!
Item was added:
+ ----- Method: ReturnNode>>isImplicitReturn (in category '*Etoys-tiles') -----
+ isImplicitReturn
+
+ ^ self isReturnSelf!
Item was added:
+ ----- Method: VariableNode>>isImplicitReturn (in category '*Etoys-tiles') -----
+ isImplicitReturn
+
+ ^ self = NodeNil!
More information about the Squeak-dev
mailing list
|