[Oberon] Non-matching expressions in case statements
Chris Burrows
cfbsoftware at gmail.com
Thu Aug 31 03:31:31 CEST 2023
On Wed, Aug 30, 2023 at 12:22 AM August Karlstrom <fusionfile at gmail.com>
wrote:
> 1) For case statements with integer labels, which often represent an
> enumerated type, it's *desirable* to trap non-matching case expressions
> as it may indicate a forgotten case label.
>
> 2) When using case statements with type labels, the programmer typically
> relies on non-matching case expressions being ignored; for message
> records the message "fall through", as described in "Programming in
> Oberon", p. 61. Here it's *essential* that the implementation does not
> halt the program with a trap, otherwise this technique will not work.
>
> The language report says:
>
> "First the case expression is evaluated, then the statement sequence is
> executed whose case label list contains the obtained value."
>
> As I interpret the sentence above, the expression is supposed to match
> exactly one label, however that is not the case with "fall through"
> messages. I think it needs to be clarified in the language report that
> "fall through" is well-defined for case statements with type labels. Any
> comments?
>
My interpretation is that the presence of the phrase *case label list*
indicates
that the remainder of the sentence only applies to numeric case statements.
The syntax for type case statements is a substantially reduced form of the
syntax for numeric case statements:
TypeCaseStatement = CASE qualident OF case {"|" case} END.
case = [qualident ":" StatementSequence].
NumericCaseStatement = CASE expression OF case {"|" case} END.
case = [CaseLabelList ":" StatementSequence].
CaseLabelList = LabelRange {"," LabelRange}.
LabelRange = label [".." label].
label = integer | string | qualident.
--
Regards,
Chris Burrows
CFB Software
https://www.astrobe.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20230831/5d3b4ccf/attachment.html>
More information about the Oberon
mailing list