[squeak-dev] The Trunk: EToys-tfel.224.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Aug 31 12:41:30 UTC 2016


Tim Felgentreff uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-tfel.224.mcz

==================== Summary ====================

Name: EToys-tfel.224
Author: tfel
Time: 31 August 2016, 2:36:36.089793 pm
UUID: 8a75af73-83e6-2e4b-b326-5b6319899e4f
Ancestors: EToys-jl.223

evaluate conditions in Kedama parallel for every turtle (so that e.g. randomness is parallel)

=============== Diff against EToys-jl.222 ===============

Item was changed:
  ----- Method: KedamaTurtleVectorPlayer2>>test:ifTrue:ifFalse: (in category 'command execution') -----
  test: cond ifTrue: trueBlock ifFalse: falseBlock
  
+ 	| origPredicate c actualCond |
- 	| origPredicate c |
  	(cond == true or: [cond == false]) ifTrue: [
  		^ cond ifTrue: [trueBlock value: self] ifFalse: [falseBlock value: self].
  	].
+ 	actualCond := cond.
+ 	cond isBlock ifTrue: [
+ 		actualCond := ByteArray new: predicate size.
+ 		1 to: predicate size do: [:i | actualCond at: i put: (cond value ifTrue: [1] ifFalse: [0])]
+ 	].
  	origPredicate := predicate clone.
+ 	predicate bytesAnd: actualCond.
- 	predicate bytesAnd: cond.
  	trueBlock value: self.
  
+ 	c := actualCond clone.
- 	c := cond clone.
  	c not.
  	predicate replaceFrom: 1 to: (predicate size min: origPredicate size) with: origPredicate startingAt: 1.
  	predicate bytesAnd: c.
  	falseBlock value: self.
  	predicate replaceFrom: 1 to: (predicate size min: origPredicate size) with: origPredicate startingAt: 1.!

Item was changed:
  ----- Method: KedamaVectorParseTreeRewriter>>visit:andParent: (in category 'entry point') -----
  visit: node andParent: parent
  
+ 	| newNode possibleSelector selIndex parentRewriterBlock newNodeBlock |
- 	| newNode possibleSelector selIndex |
  	node isLeaf not ifTrue: [
  		node getAllChildren do: [:child |
  			self visit: child andParent: node.
  		].
  	].
  
  	(node rewriteInfoOut notNil) ifTrue: [
  		((node isMemberOf: VariableNode) or: [node isMemberOf: LiteralVariableNode]) ifTrue: [
  			newNode := TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2.
  			parent replaceNode: node with: newNode.
  		].
- 
  	].
  
  	(node isMemberOf: MessageNode) ifTrue: [
  		(node statementType = #sequential) ifTrue: [
  			node selector key = #doSequentialCommand: ifTrue: [
  				(node isStatement) ifTrue: [
  					node receiver: node primaryBreedPair second.
  				].
  			]
  		].
  	].
  
+ 	(node isMemberOf: MessageNode) ifTrue: [		
+ 		newNodeBlock := [:selector :args |
+ 			self
+ 				createMessageNode: node
+ 				inParentNode: parent
+ 				receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) 
+ 				selector: selector
+ 				arguments: args].									
+ 
- 	(node isMemberOf: MessageNode) ifTrue: [
  		((selIndex := #(parallel sequential die) indexOf: node statementType) > 0) ifTrue: [
  			possibleSelector := #(doCommand: doSequentialCommand: doDieCommand:) at: selIndex.
+ 			
+ 			parentRewriterBlock := [:newNod |
+ 			self
+ 				rewriteMessageNode: node
+ 				inParentNode: parent
+ 				receiverNode: node rewriteInfoIn second
+ 				selector: possibleSelector
+ 				arguments: {self
+ 									makeBlockNodeArguments: {node rewriteInfoOut second}
+ 									statements: {newNod} returns: false}].
+ 			
  			(node messageType = #condition) ifTrue: [
+ 				newNode := newNodeBlock
+ 									value: #test:ifTrue:ifFalse:
+ 									value: {BlockNode withJust: node receiver. node arguments first. node arguments second}.
- 				newNode := self createMessageNode: node inParentNode: parent receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) selector: #test:ifTrue:ifFalse: arguments: (Array with: node receiver with: node arguments first with: node arguments second).
  				(node isStatement) ifFalse: [
  					parent replaceNode: node with: newNode.
  				] ifTrue: [
+ 					parentRewriterBlock value: newNode.
- 					self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: newNode) returns: false)).
  				].
  			] ifFalse: [
+ 				node selector key = #timesRepeat:
+ 					ifTrue: [
+ 						newNode := newNodeBlock
+ 											value: #times:repeat:
+ 											value: {node receiver. node arguments first}.
+ 						(node isStatement) ifFalse: [
+ 							parent replaceNode: node with: newNode.
+ 						] ifTrue: [
+ 							parentRewriterBlock value: newNode.
+ 						].
+ 					]
+ 					ifFalse: [(node isStatement) ifTrue: [
+ 						parentRewriterBlock value: node
+ 					].
- 				(node isStatement) ifTrue: [
- 					self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: node) returns: false)).
  				].
  			]
  		].
  	].
  
  	(node isMemberOf: BlockNode) ifTrue: [
  		(node rewriteInfoOut notNil) ifTrue: [
  			self rewriteBlockNode: node inParentNode: parent arguments: (Array with: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2)) statements: node statements returns: false.
  		].
  	].
  
  !

Item was added:
+ ----- Method: Object>>times:repeat: (in category '*Etoys-Squeakland-Tweak-Kedama') -----
+ times: aNumber repeat: aBlock
+ 
+ 	aNumber timesRepeat: [aBlock value: self]
+ !

Item was changed:
  ----- Method: SpeechBubbleMorph>>balloon (in category 'accessing') -----
  balloon
  	^balloon ifNil: [
  		| balloonForm |
+ 		balloonForm := Form extent: (self extent - (0 @ self tailHeight) max: 1 at 1) depth: 16.
- 		balloonForm := Form extent: self extent - (0 @ self tailHeight) depth: 16.
  		self drawBalloonOn: balloonForm getCanvas in: balloonForm boundingBox.
  		balloonForm floodFill: self color at: balloonForm center.
  		balloon := (SketchMorph withForm: balloonForm).
  	]!



More information about the Squeak-dev mailing list