[fpc-devel] [Suggestion] Enumeration range-check intrinsic

J. Gareth Moreton gareth at moreton-family.com
Fri Jul 5 17:42:54 CEST 2019


On 05/07/2019 15:51, Pierre Muller wrote:
> Just one point from current compiler implementation:
>
> in trunk/fpcsrc/compiler/ninl.pas (around line 3180)
>
>                in_pred_x,
>                in_succ_x:
>                  begin
>                     set_varstate(left,vs_read,[vsf_must_be_valid]);
>                     resultdef:=left.resultdef;
>                     if is_ordinal(resultdef) or is_typeparam(resultdef) then
>                       begin
>                         if (resultdef.typ=enumdef) and
>                            (tenumdef(resultdef).has_jumps) and
>                            not(m_delphi in current_settings.modeswitches) and
>                            not(nf_internal in flags) then
>                           CGMessage(type_e_succ_and_pred_enums_with_assign_not_possible);
>                       end
>
>
> This means that using pred() or succ() intrinsics on enumerated types with
> holes will generate a Compile Time Error.
>
>    To be consistent, I would propose that we also generate
> a Compile Time Error if 'is' or 'as' keyword is used on such a type,
> unless there is a code that really check that the value is not in
> one of the holes ...
>
> Pierre

That seems fair.  The main problem is what happens if, when allowed, 
Prec or Succ are used on such a type on an element that is adjacent to 
one of these holes.  Should it skip to the first element at the other 
end of the hole or raise an exception? Granted, what happens if you use 
Prec or Succ on the first or last element respectively?

I can theoretically design an algorithm to cover these gaps with Boolean 
conditions for the sake of "is", but it's a little bit complex.

Sorry to bring you in on this particular point, Pierre, but if you call 
"Value is TEnum" and Value is of type TEnum but contains an invalid 
value (due to being read from an external stream, for example), should 
it return True or False?

Gareth aka. Kit


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the fpc-devel mailing list