uses System.SysUtils;
procedure ThrowIfTrue(Param: Boolean);
begin
//except and finally do not share one
//try: the blocks are nested
try
try
if Param then
raise Exception.Create('test');
except
WriteLn('except');
end;
finally
//runs on any exit path
WriteLn('finally');
end;
end;
begin
ThrowIfTrue(True);
//printed: 'except' and 'finally'
ThrowIfTrue(False);
//printed only 'finally'
end.