> On Apr 14, 2019, at 1:38 PM, Sven Barth via fpc-pascal > <fpc-pascal@lists.freepascal.org> 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 - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal