comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: advice on package design
Date: 17 Mar 2005 15:55:35 -0500
Date: 2005-03-17T15:55:35-05:00	[thread overview]
Message-ID: <wccwts66lh4.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: d1cms8$knl$1@titan.btinternet.com

Martin Dowie <martin.dowie@btopenworld.com> writes:

> The bit about declarations and statements I don't like is where
> exceptions occur...
> 
> e.g.
> 
> with Ada.Text_IO; use Ada.Text_IO;
> procedure Main is
>     function Foo (I : Integer) return Integer is
>        I2 : Integer := I + 1;
>     begin
>        return I2;
>     exception
>        when others =>
>           return 0;
>     end Foo;
> 
>     procedure Bar is
>        I : Integer;
>     begin
>        I := Foo (Integer'Last);
>     end Bar;
> begin
>     Bar;
> exception
>     when others =>
>        Put_Line ("Rats... why not catch it in 'Foo'?");
> end Main;
> 
> I've never understood why this needs to be this way...

Because I2 is visible in the handler.  But it's declaration is never
successfully elaborated, so it does not exist!

procedure P is
    X: Integer := F(...); -- raises Some_Error
    Y: Integer := 123;
begin
    ...
exception
    when Some_Error =>
        Put(X); Put(Y); -- What are the values of X and Y here?
end P;

Or worse:

procedure P is
    X: Integer := F(...); -- raises Some_Error
    Y: String := Read_Line;
begin
    ...
exception
    when Some_Error =>
        Put(Y);
end P;

At the point of "Put(Y);", not even the bounds of Y have been
calculated, much less its value.

But you're right -- the syntax is somewhat confusing, since the
exception handler *looks* like it handles exceptions for the whole
procedure.  Another reason to get rid of declarative parts.  ;-)

I think a better syntax would a separate statement -- like try/catch in
Java.  That makes it clear what region of code is protected by
the handler.

- Bob



  reply	other threads:[~2005-03-17 20:55 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-07 16:23 advice on package design spambox
2005-03-07 21:08 ` Dmitry A. Kazakov
2005-03-08 12:48   ` spambox
2005-03-08 17:18     ` Dmitry A. Kazakov
2005-03-12 19:57   ` Robert A Duff
2005-03-12 20:45     ` Dmitry A. Kazakov
2005-03-12 21:59       ` Robert A Duff
2005-03-13  9:23         ` Dmitry A. Kazakov
2005-03-16 20:41           ` Robert A Duff
2005-03-17 10:22             ` Dmitry A. Kazakov
2005-03-17 14:04               ` Robert A Duff
2005-03-17 15:59                 ` Dmitry A. Kazakov
2005-03-17 19:10                   ` Robert A Duff
2005-03-17 19:47                     ` Martin Dowie
2005-03-17 20:55                       ` Robert A Duff [this message]
2005-03-17 21:14                         ` Marius Amado Alves
2005-03-18  9:31                           ` Martin Dowie
2005-03-18  9:38                         ` Martin Dowie
2005-03-21 16:19                           ` Robert A Duff
2005-03-17 20:48                     ` Dmitry A. Kazakov
2005-03-17 21:26                       ` Robert A Duff
2005-03-18  3:06                         ` Jared
2005-03-18 10:00                         ` Dmitry A. Kazakov
2005-03-21 16:17                           ` Robert A Duff
2005-03-21 18:16                             ` Dmitry A. Kazakov
2005-03-21 20:35                               ` Robert A Duff
2005-03-22 10:55                                 ` Dmitry A. Kazakov
2005-03-17 23:23                 ` Randy Brukardt
replies disabled

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