> On Apr 14, 2019, at 1:38 PM, Sven Barth via fpc-pascal
> <[email protected]> wrote:
>
> As already said by Martin: the compiler *can not* determine all cases whether
> the parameter is Nil or not, so it *must* be done at runtime to ensure this.
> Otherwise the feature is just as useful as this:
I’ve read over what Martin said and honestly I’m confused now. :) I’m not sure
if I don’t understand you guys or you don’t understand me.
Lets use the example of the optional (i.e. "could be nil") return value because
it’s most easy to understand. Why can’t the compiler know that the result of
GetThing is an optional and therefore you *must* always check any code that
dereferences it? Isn’t this a compile time issue?
In the example below I would always check for not nil if the documentation said
it may be nil so why can’t the compiler just make you do that anyways and
provide the information right there in the declaration? I don’t understand
where the runtime element of this is.
function GetThing: TThing; optional;
var
thing: TThing;
begin
thing := GetThing;
if assigned(thing) then
writeln(thing.name);
> Invalid contracts are an error that should trigger during development, but
> not necessarily when released. So coupling them with the default exception
> mechanism is a valid solution.
Could you give a custom message for the exception or would it just say
“Function X failed conditions”? Usually we give more detailed messages so we
know went wrong. Since this is the compiler maybe it could say which condition
failed, like “condition x < 0 failed”.
Regards,
Ryan Joseph
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal