[squeak-dev] The Inbox: System-ct.1133.mcz

Levente Uzonyi leves at caesar.elte.hu
Tue Feb 4 12:33:12 UTC 2020


Hi Christoph,

On Mon, 3 Feb 2020, commits at source.squeak.org wrote:

> Christoph Thiede uploaded a new version of System to project The Inbox:
> http://source.squeak.org/inbox/System-ct.1133.mcz
>
> ==================== Summary ====================
>
> Name: System-ct.1133
> Author: ct
> Time: 3 February 2020, 11:55:06.856675 pm
> UUID: bd5c789a-39d3-574b-aa2a-0f900b3a8009
> Ancestors: System-cmm.1131
>
> Fix execution-around pattern to forward return value in some during methods
>
> So that
> 	Utilities useAuthorName: 'Squeak' during: [Utilities authorName]
> yields
> 	'Squeak'
> but not
> 	Utilities.
>
> =============== Diff against System-cmm.1131 ===============
>
> Item was changed:
>  ----- Method: Preferences class>>setFlag:toValue:during: (in category 'get/set - flags') -----
>  setFlag: prefSymbol toValue: aBoolean during: aBlock
>  	"Set the flag to the given value for the duration of aBlock"
>
>  	(self valueOfFlag: prefSymbol) in: [:previous |
>  		self setFlag: prefSymbol toValue: aBoolean.
> + 		^ aBlock ensure: [self setFlag: prefSymbol toValue: previous]].!
> - 		aBlock ensure: [self setFlag: prefSymbol toValue: previous]].!
>
> Item was changed:
>  ----- Method: Preferences class>>setPreference:toValue:during: (in category 'get/set') -----
>  setPreference: prefSymbol toValue: anObject during: aBlock
>
>  	(self valueOfPreference: prefSymbol) in: [:previous |
>  		self setPreference: prefSymbol toValue: anObject.
> + 		^ aBlock ensure: [self setPreference: prefSymbol toValue: previous]]!
> - 		aBlock ensure: [self setPreference: prefSymbol toValue: previous]].!
>
> Item was changed:
>  ----- Method: Utilities class>>useAuthorInitials:during: (in category 'identification') -----
>  useAuthorInitials: temporaryAuthorInitials during: aBlock
>
>  	| originalAuthorInitials |
>  	originalAuthorInitials := AuthorInitials.
> + 	[ AuthorInitials := temporaryAuthorInitials.
> + 	^ aBlock value ]

Returning from inside a block has some extra costs. You can achieve the 
same thing without the overhead by returning what #ensure: returns:

  	^[ AuthorInitials := temporaryAuthorInitials.
  	aBlock value ]


Levente

> + 	[ AuthorInitials := temporaryAuthorInitials.
> + 	^ aBlock value ]


> - 	[ 
> - 		AuthorInitials := temporaryAuthorInitials.
> - 		aBlock value ]
>  		ensure: [ AuthorInitials := originalAuthorInitials ]
>  	!
>
> Item was changed:
>  ----- Method: Utilities class>>useAuthorName:during: (in category 'identification') -----
>  useAuthorName: temporaryAuthorName during: aBlock
>
>  	| originalAuthorName |
>  	originalAuthorName := AuthorName.
> + 	[ AuthorName := temporaryAuthorName.
> + 	^ aBlock value ]
> - 	[ 
> - 		AuthorName := temporaryAuthorName.
> - 		aBlock value ]
>  		ensure: [ AuthorName := originalAuthorName ]
>  	!


More information about the Squeak-dev mailing list