From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: function Is_Open (File : File_Type) return Boolean; :Text_io
Date: Wed, 28 Oct 2015 12:58:30 -0500
Date: 2015-10-28T12:58:30-05:00 [thread overview]
Message-ID: <n0r2c6$rlc$1@loke.gir.dk> (raw)
In-Reply-To: n0qa3q$th8$1@dont-email.me
"Georg Bauhaus" <bauhaus@futureapps.invalid> wrote in message
news:n0qa3q$th8$1@dont-email.me...
...
> "Better than Assertion_Error?" I understand we are going to get
>
> subtype Open_File is File with Predicate =>
> Is_Open(Open_File) or else raise Status_Error with "...";
You need to use the aspect Predicate_Failure here, as opposed to raising an
exception in the predicate expression. (That's different than in a
precondition.) In this case (and replacing the Gnat-only "predicate"
aspect):
subtype Open_File is File with Dynamic_Predicate =>
Is_Open(Open_File), Predicate_Failure => raise Status_Error with
"...";
Else bad things might happen to membership tests:
if My_File in Open_File then
Call_Subprogram_That_Requires_an_Open_File (My_File);
end if;
If My_File is not open, this membership and your subtype would raise
Status_Error, not False. (This was a tough nut to crack for the ARG. And
GNAT only recently implemented Predicate_Failure, so with older GNATs you
have to leave the exception alone.)
Randy.
next prev parent reply other threads:[~2015-10-28 17:58 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-26 10:00 function Is_Open (File : File_Type) return Boolean; :Text_io comicfanzine
2015-10-26 11:27 ` Simon Wright
2015-10-26 13:25 ` comicfanzine
2015-10-26 18:01 ` Simon Wright
2015-10-26 19:03 ` AdaMagica
2015-10-27 11:30 ` Simon Wright
2015-10-26 18:02 ` Jeffrey R. Carter
2015-10-26 13:28 ` comicfanzine
2015-10-26 15:07 ` Jacob Sparre Andersen
2015-10-26 16:37 ` AdaMagica
2015-10-26 20:46 ` J-P. Rosen
2015-10-27 8:42 ` comicfanzine
2015-10-27 11:34 ` Simon Wright
2015-10-28 13:32 ` comicfanzine
2015-10-27 8:51 ` comicfanzine
2015-10-27 17:15 ` Jeffrey R. Carter
2015-10-26 22:48 ` Bob Duff
2015-10-27 8:30 ` Dmitry A. Kazakov
2015-10-27 13:30 ` Bob Duff
2015-10-27 14:00 ` G.B.
2015-10-27 15:26 ` Dmitry A. Kazakov
2015-10-27 16:43 ` G.B.
2015-10-27 20:04 ` Dmitry A. Kazakov
2015-10-28 11:06 ` Georg Bauhaus
2015-10-28 17:58 ` Randy Brukardt [this message]
2015-10-28 18:20 ` Dmitry A. Kazakov
2015-10-28 20:36 ` Bob Duff
2015-10-28 21:02 ` Dmitry A. Kazakov
2015-10-29 11:25 ` AdaMagica
2015-10-29 13:37 ` Dmitry A. Kazakov
2015-10-29 17:57 ` AdaMagica
2015-10-29 18:12 ` AdaMagica
2015-10-29 18:26 ` Dmitry A. Kazakov
2015-10-30 8:27 ` Jacob Sparre Andersen
2015-10-30 9:11 ` J-P. Rosen
2015-10-29 11:47 ` G.B.
2015-10-29 13:01 ` J-P. Rosen
2015-10-29 14:00 ` Dmitry A. Kazakov
2015-10-30 1:06 ` Georg Bauhaus
2015-10-30 8:39 ` Dmitry A. Kazakov
2015-10-30 14:32 ` G.B.
2015-10-30 16:20 ` Dmitry A. Kazakov
2015-10-30 19:07 ` G.B.
2015-10-31 9:31 ` Dmitry A. Kazakov
2015-10-31 11:17 ` Georg Bauhaus
2015-10-30 14:40 ` G.B.
2015-10-30 16:26 ` Dmitry A. Kazakov
2015-10-28 20:07 ` Bob Duff
2015-10-28 20:59 ` Dmitry A. Kazakov
2015-10-27 14:02 ` G.B.
2015-10-27 15:10 ` Dmitry A. Kazakov
2015-10-27 16:41 ` G.B.
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox