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

Marcel Taeumel marcel.taeumel at hpi.de
Thu Nov 18 13:04:16 UTC 2021


Hi Levente --

Thanks. Decompiler only adds the block-arg for not-inlined caseOfs. See ObjectTest >> #testCaseOfOtherwise.

Hmm... Christoph? =) Otherwise (ha!) I will take a look at it soon-ish.

Best,
Marcel
Am 18.11.2021 13:51:02 schrieb Levente Uzonyi <leves at caesar.elte.hu>:
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 :
>
> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20211118/e87b1cbc/attachment.html>


More information about the Squeak-dev mailing list