[fpc-pascal] Finally, exceptions and so on.

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Thu May 14 13:18:06 CEST 2015


Michael Van Canneyt wrote:
> On Thu, 14 May 2015, Mark Morgan Lloyd wrote:
> 
>> Starting off with this fragment
>>
>> begin // Start of procedure/function
>>  try
>>    ...
>>    if something then
>>      exit;
>>    ...
>>  finally
>>    ...
>>  end
>> end;
>>
>> My understanding is that exit "magically" transfers control into the 
>> finally block before exiting the procedure. However to state the 
>> obvious, in this fragment
>>
>> begin // Start of procedure/function
>>  try
>>    ...
>>    if something then
>>      exit;
>>    ...
>>  except
>>    ...
>>  end
>> end;
>>
>> control doesn't go via the except block.
> 
> That is as designed. There is no exception, so no need to go in the 
> exception.

Yes, obviously. However I'm interested in the cases where (1) a 
try-finally is embedded in a try-except and (2) try-except is embedded 
in try-finally, and the order that exit and any potential equivalents 
disentangles things.

>> Is there a single place in the documentation where this sort of 
>> behaviour is described and prioritised, taking into account interfaces 
>> etc.?
> 
> http://www.freepascal.org/docs-html/ref/refse103.html#x214-22400017.3
> 
> What does 'taking into account interfaces' have to do with exceptions ?
> They are unrelated.

Except that- as I understand it- when the reference count is decremented 
to oblivion, it will be destroyed by "magic" code in the context of the 
block it was created in. Same obviously applies to strings, dynamic 
arrays and so on. Are there any other cases where this sort of thing 
happens?

I've got a horrible feeling that I'm not expressing my question well.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list