Michael Matz <m...@suse.de> writes: >> >> (switch >> >> (A) B >> >> (B) C >> >> (C) D >> >> E) >> > >> >The lispy way would have been >> > >> > (switch >> > (A) (B) >> > (C) (D) >> > (E) (F) >> > G) >> > >> >i.e. parenthesize the result as well, which then would be unambiguously >> >> That's just atoms vs. Expressions. > > But if the result is no atom, you'd want parentheses. Similar if the > condition is no expression but an atom, you'd want to leave out > parentheses as well. My point is, that both condition and result are at > the same level, and hence should be subject to the same parenthesis rules, > namely: surrounding parens by default, optional for atoms. > >> Like (Plus @0 @1) vs. Plain @1. So you suggest to require ((plus @0 >> @1)) here to make it unambiguous? > > No :) Just look at your example again: > > (switch > (A) B > ) > > Both A and B are at the same level, and are both expressions, but still > you parenthesize them differently; that can't be right. You also don't > write > > (switch > ((plus @0 @1)) (@0) > ) > > You write > > (switch > (plus @0 @1) (@0) > ) > > And as syntactic sugar you are allowed to leave out the parens around @0 > as it's an atom: > > (switch > (plus @0 @1) @0 > ) > > Similar, if the condition is an atom you should be able to leave the > parens away: > > (switch > cond (minus @0 @1) > ) > > (given a predicate 'cond' defined appropriately).
Agreed FWIW. The rtx equivalent (unfortunately called "cond", so the clash with "cond"==COND_EXPR prevents naming consistency) uses the lispy syntax without any ambiguity. Thanks, Richard