[fpc-devel] "case" with range stupidities
Daniël Mantione
daniel.mantione at freepascal.org
Thu Feb 15 14:06:05 CET 2007
Op Thu, 15 Feb 2007, schreef Vinzent Hoefler:
> program
> Case_Test;
>
> type
> My_Range = 2000 .. 3000;
>
> var
> X : Integer;
>
> begin
> X := 2500;
>
> case X of
> Low (My_Range) .. High (My_Range) : WriteLn ('In range. (1)');
> My_Range : WriteLn ('In range. (2)');
> else
> WriteLn ('Out of range.');
> end {case};
> end {Case_Test}.
>
> -- 8< --
>
> Is there any reasoning why the first switch in the case statement ("Low
> (My_Range) ...") is allowed, whilst the second one (just "My_Range") is
> not (says: "constant expression expected")?
Well, a case label is basically a set of values. A type definition is something
different, i.e. you cannot use "byte" or "longint" as case labels either.
Afaik set names aren't allowed either but allowing these would seem more
logical to me than allowing type names (seeing byte and longint as case
labels would seem weird to me.
> Another minor issue is that a type declaration like:
>
> type
> My_Range = (2500 - 500) .. (2500 + 500);
>
> is not accepted (message similar to ";" expected, ".." found) and
> (basically the same declaration)
>
> type
> My_Range = 2500 - 500 .. 2500 + 500;
>
> is. Sometimes I'd really like to add those parantheses just to make the
> intention more clear.
I think this is a parser limitation. I don't think it is a problem to
allow it.
Daniël
More information about the fpc-devel
mailing list