Call for bikeshed -- break replacement in expression switch

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu May 16 21:05:17 UTC 2019


On 16/05/2019 21:46, John Rose wrote:
> On May 16, 2019, at 1:34 PM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
>> On the other hand is a trivial one to resolve, given what we're discussing now is something like
>>
>> "yields" EXPRESSION
>>
>> so, as soon as the compiler sees a "(" it will say: "ok, that's not a new yield statement".
> The tricky bit with that is the user experience.  What if the
> user needs a parenthesized expression:
>
> yield ("answer is "+x).trim();
>
> There are some sharp edges here.

I was hoping we didn't need to go there :-)

There are other contexts in which we limit what can be done w/r/t/ 
parenthesized expressions (since these are ambiguous with cast to 
generic types). So this looks like another case where the grammar has to 
say - sorry no parens here.

Maurizio

>
> Oh, look, it's a workaround bikeshed:
>
> yield false? 0: ("answer is "+x).trim();
> yield (String)("answer is "+x);
> yield new String[]{ "answer is "+x }[0];
> yield Arrays.asList("answer is "+x).get(0);
> yield Objects.id("answer is "+x);
>
> And my own little favorite, a bespoke
> use of arrow:
>
> yield -> ("answer is "+x);
>
> Maybe then also:
>
> `yield -> { block of stuff to do before I go; YepDone: yield s; };`
>
> — John
>


More information about the amber-spec-experts mailing list