What is the range that is valid for an enum (if enums are given ord
values with "=")?
With 3.3.1
type TFoo =(a=0, b=$Ffffffff);
project1.lpr(3,29) Error: Enumeration symbols can only have values in
the range of -2^31 to 2^31-1
So the compiler clearly thinks it is a signed integer (longint).
The documentation is not specific about it.
https://www.freepascal.org/docs-html/prog/progsu157.html
It doesn't exactly say what values the enum-val can have. It just
specifies how many there can be.
0..255 means apparently an enum can have between 0 and 255 values.
It does not explicitly say that those values are the values between 0
and 255.
It specifies the storage requirements by using unsigned examples
(byte/word).
Again, not explicitly saying that the stored value must have an unsigned
ordinal value.
But, some suggestive element in it....
-----------------
Further 3.3.1
program Project1;
{$R-}
type TFoo =(a, b);
begin
writeln(ord(TFoo(1)));
writeln(ord(TFoo($ffffffff)));
writes
1
-1
--------------
In that light my earlier mail "packed enum too small?" below...
Should that be reported as bug?
On 13/11/2024 16:50, Martin Frb via fpc-devel wrote:
The below gives a size of 1 byte => meaning that both values are the
same $FF
program Project1;
{$PackEnum 1}
type
Tfoo = (f1=-1, f2=255);
var
a,b: TFoo;
begin
writeln(SizeOf(TFoo));
a:= f1;
b:= f2;
b:= f2;
end.
Changing it to:
Tfoo = (f1=-129, f2=255);
gives a size of 2 bytes.
It seems the range that returns 1 byte goes from -127 to 255 => which
is clearly more than fits into one byte?
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel