On 13.02.2013 10:11, Lukasz Sokol wrote:
On 13/02/2013 07:34, Michael Müller wrote:

I'm not sure if somebody else mentioned this already but I have the feeling 
that Giuliano thinks that he has to decide to use try-finally OR try-except but 
there are situations where you need both. One of the criteria is if the object 
is local or global since for a global object it is likely that you place the 
.Free (or for a global object better FreeAndNil()) into a destructor or 
finalization section (which means that you have to stop the program in case of 
an error and not continue showing just a dialog) so you'll need only the 
try-except if you want to catch the exception. In case of a local object you'll 
ALWAYS have the lines

Obj := Class.Create;
try
   // do some code
finally
   Obj.Free;
end;

otherwise you'll end up with memory leaks.
If you want to catch the exception in this situation you'll put try-except 
extra around try-finally so you'll end up with

Obj := Class.Create;
try
   try
     // do some code
   finally
     Obj.Free;
   end;
except
   writeln('We have a problem);
   halt the program or reraise the exception or raise a new one
end;

Regards

To developers:
How would a generalized/packed construct like

try
[code block]
finally
[code block]
except
[code block]
end;

or what about

try
[code block]
except
[code block]
finally
[code block]
end;

In any case the semantics need to be defined correctly. E.g. in the first case what happens if an exception is raised inside the "finally" block? In the second case what happens if an exception is raised inside the "except" block? Do they work like nested "try try except end finally end" or "try try finally end except end" blocks or do they have the same rules?

Keep this FAQ entry in mind when suggesting features: http://www.freepascal.org/faq.var#extensionselect

(Note: I personally would have nothing against such a feature, but the details need to be defined!)


(in other words: a try-*-end construct where * can be 'finally', or 'except', 
or BOTH.)

fit into Pascal philosophy?
Advantages is mainly:
- one less indent level ('oh, I need try-except around all THAT, bugger.') to 
care about;
   (yeah, even with all the good tools to manage the code, it stings, that the 
two
    have to be separately declared and one needs to remember that...)

Would it be very complicated?

I don't know how complicated it would be (we now also need to take into account Win64 SEH and possibly in the future also Win32 and WinCE SEH), but it should at least be doable...

Regards,
Sven

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to