comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: Common exception handling
Date: Fri, 29 Aug 2008 08:31:03 -0700 (PDT)
Date: 2008-08-29T08:31:03-07:00	[thread overview]
Message-ID: <87eccd6a-2223-4295-86e5-54986fbf1530@s1g2000pra.googlegroups.com> (raw)
In-Reply-To: 2c0a5d86-82cf-4538-87d4-6733eaca8784@r66g2000hsg.googlegroups.com

On Aug 29, 1:32 am, Martin <martin.do...@btopenworld.com> wrote:
> On 26 Aug, 15:43, Adam Beneschan <a...@irvine.com> wrote:
>
>
>
> > On Aug 26, 6:47 am, shaunpatter...@gmail.com wrote:
>
> > > Yeah, it looks like the extra layer of exception handling is the only
> > > way. I was hoping I could avoid that if possible.
>
> > No, I don't think it's the only way.  I'm surprised no one has
> > suggested this:
>
> >    exception
> >       when E : others =>
> >          Print_Test (Rec);
> >          declare
> >              use Ada.Exceptions;
> >          begin
> >              if Exception_Identity(E) = A'Identity then
> >                 ... handling for A
> >              elsif Exception_Identity(E) = B'Identity then
> >                 ... handling for B
> >              etc.
> >              else
> >                 ... handling for other exceptions you didn't expect,
> >                 ... but you certainly need to aware that it could
> >                 ... happen
> >                 raise;  --maybe
> >              end if;
> >          end;
>
> >                             -- Adam
>
> Surely you missed a smiley off this suggestion!!! :-)

Well, I do often post silly things without smileys and assume everyone
is astute enough to figure out that I was trying to be funny.  But I
wasn't being funny here.  Although the above looks somewhat ugly, I
can imagine that a solution of this sort may be entirely appropriate
in some cases. Suppose, for example, that the common code isn't just
at the beginning, but is also at the end, or maybe even in the middle;
the nested exception handler/reraise solution might not be so clean in
that case.  Another problem with the nested exception handler solution
is that it could incur extra overhead since exception raising isn't
necessarily cheap.  That shouldn't matter in most cases, but sometimes
it might.  So I don't understand why the above is so ridiculous as to
merit the comment you gave.

I would say, though, that if your exception-handling code gets that
complex, it might be time to think about declaring just one exception
and a separate data structure for passing additional exception info
around.

                                 -- Adam




  reply	other threads:[~2008-08-29 15:31 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-26 12:17 Common exception handling shaunpatterson
2008-08-26 12:37 ` Ludovic Brenta
2008-08-26 12:39 ` Martin
2008-08-26 12:48   ` Ludovic Brenta
2008-08-26 12:58     ` Martin
2008-08-26 13:47       ` shaunpatterson
2008-08-26 14:43         ` Adam Beneschan
2008-08-26 15:10           ` Dmitry A. Kazakov
2008-08-26 16:49             ` Adam Beneschan
2008-08-26 19:14               ` Dmitry A. Kazakov
2008-08-26 20:22                 ` Maciej Sobczak
2008-08-27  8:16                   ` Dmitry A. Kazakov
2008-08-27  9:20                   ` Georg Bauhaus
2008-08-29  8:32           ` Martin
2008-08-29 15:31             ` Adam Beneschan [this message]
2008-09-10 22:51               ` Martin
2008-09-11 14:57                 ` Adam Beneschan
2008-08-26 15:18         ` Jean-Pierre Rosen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox