[squeak-dev] Merge Request: #caseOf:otherwise: with arguments

Levente Uzonyi leves at caesar.elte.hu
Thu Nov 18 12:50:49 UTC 2021


Hi Marcel,

I just checked how this works, and noticed that the decompiler cannot 
recreate the original code if the otherwise: block has an argument.


Levente

On Thu, 18 Nov 2021, Marcel Taeumel wrote:

> Merged.
>
>       Am 21.02.2020 17:33:03 schrieb Thiede, Christoph <christoph.thiede at student.hpi.uni-potsdam.de>:
>
>       This changeset makes it possible to accept an argument in the otherwise block of a #caseOf:otherwise: call.
> 
>
>       Diff of the #caseOf:otherwise: implementation:
>
>             caseOf: aBlockAssociationCollection otherwise: aBlock
> 
> "The elements of aBlockAssociationCollection are associations between blocks.  Answer the evaluated value of the first association in aBlockAssociationCollection whose evaluated key equals the receiver.  If no
> match is found, answer the result of evaluating aBlock."
> 
> 
> aBlockAssociationCollection associationsDo:
> 
> [:assoc | (assoc key value = self) ifTrue: [^assoc value value]].
> 
> - ^ aBlock value
> 
> + ^ aBlock cull: self
> 
> 
> "| z | z := {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]"
> 
> "| z | z := {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]"
> 
> "The following are compiled in-line:"
> 
> "#b caseOf: {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]"
> 
> "#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]"
> 
> + "#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [:x | x halt]"
> 
> 
> Furthermore, the changeset includes a necessary modification of MessageNode >> #transformCase: so that the otherwise argument can be compiled in-line.
> 
> Last but not least, I wrote some tests for #caseOf:[otherwise:].
> 
> 
> Please review!
> 
> (In a later change, it would be possible to allow arguments for the association key blocks as well. But I love short feedback loops, so let's assess this one first :-))
> 
> 
> Best,
> 
> Christoph
> 
> 
>


More information about the Squeak-dev mailing list