<html><body><div id="zimbraEditorContainer" style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000" class="29"><div><br></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>From: </b>"Angelos Bimpoudis" <angelos.bimpoudis@oracle.com><br><b>To: </b>"amber-spec-experts" <amber-spec-experts@openjdk.org><br><b>Cc: </b>"Yuriy Maslyanko" <yuriy.maslyanko@oracle.com><br><b>Sent: </b>Wednesday, October 25, 2023 12:49:18 AM<br><b>Subject: </b>Fw: JEP 455: Non-enhanced switch statements<br></blockquote></div><div><style style="display:none;"> P {margin-top:0;margin-bottom:0;} </style></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Hello all!</div></blockquote><div><br></div><div>Hello Angelos,<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Calibri, sans-serif; display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted0">Yuriy pointed out a valid point.</span><br>
</div>
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Calibri, sans-serif; display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted0"><br></span></div>
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Calibri, sans-serif; display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted0">1) Should we treat float/double/boolean/longs as a new addition to the
<span style="display: inline !important; background-color: rgb(255, 255, 255);">non-enhanced</span> switch (old switch) and support anything new that comes with that?</span></div>
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-family: Calibri, sans-serif; display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted0"><br></span></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif">or</font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif"><br></font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif">2) Should we treat those data types equally with all the pre-existing ones?</font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif"><br></font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif">I am strongly in favour of the
<span style="display: inline !important; background-color: rgb(255, 255, 255);">2)</span> for the shake of symmetry and uniformity in what the user will assume, thus I will fix the bug.</font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif"><br></font></div>
<div style="font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof"><font face="Calibri, sans-serif">What do others think?</font></div></blockquote><div><br></div><div>We have already discuss that, when we have introduce the switch on objects.</div><div>The question is not what our current users will assume now but how the whole semantics of switch will be see let say 5 years from now, when people are used to use the switch on objects.<br></div><div>The old switch is not a feature used a lot, we expected the new switch on objects to be used a lot more, so at some points, most of the switches will be switches on object so the semantics of the old switch will be the outlier.</div><div>So the switch on float/double should behave like on objects, i.e. be hexaustive by default.</div><div>It's the same reason why adding a "case null" or a "where" condition transforms the switch to the new semantics.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>And there is another reason to make the switch on float/double exhaustive, the matching of a cases on primitive types can be partial, when we discussed that feature this is was obvious for some of us (me included).</div><div>By making the switch exhaustive, we actually help users to understand the actual semantics, because the compiler will requires a "default" if the pattern matching is not total.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>regards,<br data-mce-bogus="1"></div><div>Rémi</div><div><br data-mce-bogus="1"></div><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">
<div style="font-family: "Segoe UI", "Segoe UI ", "Helvetica Neue", sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Yuriy Maslyanko <yuriy.maslyanko@oracle.com><br><b>Sent:</b> 24 October 2023 21:57<br><b>To:</b> Angelos Bimpoudis <angelos.bimpoudis@oracle.com><br><b>Cc:</b> compiler-dev@openjdk.org <compiler-dev@openjdk.org><br><b>Subject:</b> JEP 455: Non-enhanced switch statements</font>
<div> </div>
</div>
<div lang="EN-US" style="word-wrap:break-word">
<div class="x_WordSection1">
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
Hi Angelos,</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
Section 14.11.2 of <a href="https://cr.openjdk.org/~abimpoudis/instanceof/jep443-20231010/specs/instanceof-jls.html#jls-14.11.2" id="OWA8a7ff157-bb46-c408-0d8c-3100cc911996" class="OWAAutoLink" target="_blank">
https://cr.openjdk.org/~abimpoudis/instanceof/jep443-20231010/specs/instanceof-jls.html#jls-14.11.2</a> has this note:</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;margin-left:.5in">
For compatibility reasons, <code style="font-family: "Courier New";"><span style="font-size:10.0pt">switch</span></code> statements that are not enhanced
<code style="font-family: "Courier New";"><span style="font-size:10.0pt">switch</span></code> statements are not required to be exhaustive.</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
Noticed that if the switch selector statement is float/double/boolean (in this case it’s a non-enhanced switch statement), the code shown below fails with “error: the switch statement does not cover all possible input values”:</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
static boolean check = false;</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
public static boolean testMethod() {</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
double v1 = 1d;</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
switch ( v1 ) {</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
case 1d:</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
check = true;</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
break;</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
}</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
return check;</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
}</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
</p>
<p class="x_MsoNormal" style="margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif;">
<br>
</p>
</div>
</div><br></blockquote></div></div></body></html>