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
next prev parent 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