I've never really used exceptions myself in Pascal (with the exception of 
breaking out of deeply recursive function calls) so I don't know all the rules.

In this example lets say you call Test() which allocates some memory and then 
calls out to another function in another unit which raises (the programmer 
doesn't know this because FPC doesn't mark the function as throwing 
exceptions). Now the Test() function will exit early before freeing the memory.

What are you supposed to do here? The only thing I can think of is to wrap 
every function in try..finally which COULD raise an exception but that's a huge 
mess because literally any function could raise.

====================================

procedure DoThis;
begin
  raise Exception.Create('dead');
end;

procedure Test;
begin
  TObject.Create;
  // call some code in other unit which raise an exception
  DoThis;
end;

begin 
  try
    Test;
  except
    writeln('failed'); // TObject now leaks
  end;
end.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to