[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>

> 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*
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.

Chris Burrows
CFB Software
-------------- 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