<div dir="ltr"><div dir="ltr">On Wed, Aug 30, 2023 at 12:22 AM August Karlstrom <<a href="mailto:fusionfile@gmail.com">fusionfile@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">1) For case statements with integer labels, which often represent an <br>
enumerated type, it's *desirable* to trap non-matching case expressions <br>
as it may indicate a forgotten case label.<br>
<br>
2) When using case statements with type labels, the programmer typically <br>
relies on non-matching case expressions being ignored; for message <br>
records the message "fall through", as described in "Programming in <br>
Oberon", p. 61. Here it's *essential* that the implementation does not <br>
halt the program with a trap, otherwise this technique will not work.<br>
<br>
The language report says:<br>
<br>
"First the case expression is evaluated, then the statement sequence is <br>
executed whose case label list contains the obtained value."<br>
<br>
As I interpret the sentence above, the expression is supposed to match <br>
exactly one label, however that is not the case with "fall through" <br>
messages. I think it needs to be clarified in the language report that <br>
"fall through" is well-defined for case statements with type labels. Any <br>
comments?<br> </blockquote><div>My interpretation is that the presence of the phrase <i>case label list</i> indicates that the remainder of the sentence only applies to numeric case statements. </div><div><br></div><div>The syntax for type case statements is a substantially reduced form of the syntax for numeric case statements:</div><div><br></div><div>TypeCaseStatement = CASE qualident OF case {"|" case} END.<br>case = [qualident ":" StatementSequence].</div><div><br></div><div>NumericCaseStatement = CASE expression OF case {"|" case} END.<br>case = [CaseLabelList ":" StatementSequence].<br>CaseLabelList = LabelRange {"," LabelRange}.<br>LabelRange = label [".." label].<br>label = integer | string | qualident.<br></div><div><br></div><div>--</div><div>Regards,</div><div>Chris Burrows</div><div>CFB Software</div><div><a href="https://www.astrobe.com">https://www.astrobe.com</a></div><div><br></div></div></div>