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

Sven Barth pascaldragon at googlemail.com
Fri Jul 5 22:27:57 CEST 2019


Am 05.07.2019 um 22:25 schrieb Sven Barth:
> Am 05.07.2019 um 08:08 schrieb Sven Barth:
>> Jonas Maebe <jonas at freepascal.org <mailto:jonas at freepascal.org>> 
>> schrieb am Do., 4. Juli 2019, 21:21:
>>
>>     On 03/07/2019 09:26, Ondrej Pokorny wrote:
>>     > On 02.07.2019 23:34, Jonas Maebe wrote:
>>     >> Invalid data means undefined behaviour, always. "is" is not a
>>     special
>>     >> case that is immune to this.
>>     >
>>     > Don't you really see the need to handle invalid data with a
>>     /defined/
>>     > behavior?
>>
>>     My point is that is impossible to do so, so trying to do it in a way
>>     that works in some/most cases, is much more dangerous than
>>     categorically
>>     refusing to try to do it, as it creates a false sense of security.
>>
>>
>> Then how would you read data from e.g. a stream into an enum or 
>> subrange if the stream may contain invalid data?
> I now did a proof of concept for that task myself:
>
> === code begin ===
>
[snip]
> if not s.specialize ReadEnum<TMyEnum>(e) then
>         raise EStreamError.Create('Failed to read enum value');
>       Writeln('Read value: ', e);
>       if not s.specialize ReadEnum<TMyEnum>(e) then
>         raise EstreamError.CReate('Failed to read enum value');
[snip]
>
> === code end ===

Oh and once I've integrated Ryan's implicit specialization support the 
code can become this (or at least I hope so ^^'):

=== code begin ===
       if not s.ReadEnum(e) then
         raise EStreamError.Create('Failed to read enum value');
       Writeln('Read value: ', e);
       if not s.ReadEnum(e) then
         raise EstreamError.CReate('Failed to read enum value');

=== code end ===

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190705/9f0273d5/attachment-0001.html>


More information about the fpc-devel mailing list