<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Very clever, John. Yes, let’s not add any more puzzlers to the language!<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 10 Mar 2021, at 21:59, John Rose <<a href="mailto:john.r.rose@oracle.com" class="">john.r.rose@oracle.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div class="">Good.  PrimaryPattern is a good concept.</div>
<div class=""><br class="">
</div>
On Mar 10, 2021, at 6:47 AM, Gavin Bierman <<a href="mailto:gavin.bierman@oracle.com" class="">gavin.bierman@oracle.com</a>> wrote:<br class="">
<div class="">
<blockquote type="cite" class=""><br class="Apple-interchange-newline">
<div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Guard:</span><br style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">:
 AssignmentExpression</span><br style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
</div>
</blockquote>
<br class="">
</div>
<div class="">I think it should be this instead:</div>
<div class=""><br class="">
</div>
<div class="">Guard:</div>
<div class="">: ConditionalAndExpression</div>
<div class=""><br class="">
</div>
<div class="">The effects of this narrower definition of a guard expression</div>
<div class="">are two:</div>
<div class=""><br class="">
</div>
<div class="">First, any guard of the form (a || b), (a ? b : c), or (a = b)</div>
<div class="">will require parentheses.</div>
<div class=""><br class="">
</div>
<div class="">Second, as a result, the following puzzlers will not be legal</div>
<div class="">inputs:</div>
<div class=""><br class="">
</div>
<div class="">case P && a || b:  // compare x instanceof P && a || b</div>
<div class="">case P && a ? b : c:  // compare x instanceof P && a ? b : c</div>
<div class="">
<div class="">case P && a = b:  // compare x instanceof P && a = b</div>
<div class=""><br class="">
</div>
<div class="">In all of these puzzlers, the “extremely fortuitous”</div>
<div class="">correspondence between the syntaxes of guarded</div>
<div class="">cases and instanceof’s with following boolean logic</div>
<div class="">are broken.</div>
<div class=""><br class="">
</div>
<div class="">The fix to align the meanings of the cases with the</div>
<div class="">instanceof’s is to add parentheses:</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">case P && (a || b):  // compare x instanceof P && (a || b)</div>
<div class="">case P && (a ? b : c):  // compare x instanceof P && (a ? b : c)</div>
<div class="">
<div class="">case P && (a = b):  // compare x instanceof P && (a = b)</div>
<div class=""><br class="">
</div>
<div class="">Using the modified grammar rule above forces the</div>
<div class="">coder to write the parentheses, I think.</div>
<div class=""><br class="">
</div>
</div>
</div>
<div class="">I think we should aim for “perfectly fortuitous”</div>
<div class="">here, not just “well, look how often the syntaxes</div>
<div class="">seem to mean the same thing although sometimes</div>
<div class="">they don’t”.  Indeed, this is my main reason for</div>
<div class="">plumping  for P && g in the first place.</div>
<div class=""><br class="">
</div>
<div class="">— John</div>
<div class=""><br class="">
</div>
</div>
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</body>
</html>