From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: Ensuring postconditions in the face of exceptions
Date: Fri, 12 Mar 2010 03:08:58 -0800 (PST)
Date: 2010-03-12T03:08:58-08:00 [thread overview]
Message-ID: <3696058c-235f-4d58-87be-74172ca0248a@g4g2000yqa.googlegroups.com> (raw)
In-Reply-To: 4b9a098b$0$2339$4f793bc4@news.tdc.fi
On Mar 12, 10:29 am, Niklas Holsti <niklas.hol...@tidorum.invalid>
wrote:
> Ludovic Brenta wrote:
> > Consider the procedure:
>
> > type T is private; -- completion elided
>
> > generic
> > with procedure Visit (Object : in out T);
> > procedure Refresh (Object : in out T; Dirty : in out T) is
> > begin
> > if Dirty then
> > Visit (Object);
> > Dirty := False;
> > end if;
> > exception
> > when others =>
> > Dirty := True; -- warnings here
> > raise;
> > end Refresh;
>
> > GNAT says:
> > warning: assignment to pass-by-copy formal may have no effect
> > warning: "raise" statement may result in abnormal return (RM
> > 6.4.1(17))
>
> > The reason for the exception handler is to enforce a postcondition
> > that Dirty must be True if Visit raises an exception. However the
> > warnings suggest that the postcondition cannot be enforced this way.
> > How should I rewrite my code?
>
> Perhaps change the mode of Dirty to
>
> Dirty : access T;
>
> and assign
>
> Dirty.all := True;
>
> Or use a named access type instead of the anonymous access, as you prefer.
Heh. I was kind of hoping you wouldn't say that :) I should have been
more specific; I think using an access type is ugly but I can't think
of a better solution.
Thanks.
--
Ludovic Brenta.
next prev parent reply other threads:[~2010-03-12 11:08 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-12 9:13 Ensuring postconditions in the face of exceptions Ludovic Brenta
2010-03-12 9:24 ` Ludovic Brenta
2010-03-12 9:29 ` Niklas Holsti
2010-03-12 11:08 ` Ludovic Brenta [this message]
2010-03-12 14:00 ` Jeffrey R. Carter
2010-03-13 3:15 ` Randy Brukardt
2010-03-13 15:14 ` Robert A Duff
2010-03-16 3:13 ` Randy Brukardt
2010-03-16 15:18 ` Robert A Duff
2010-03-16 19:00 ` Adam Beneschan
2010-03-16 20:04 ` Robert A Duff
2010-03-16 23:23 ` Randy Brukardt
2010-03-13 17:34 ` Jeffrey R. Carter
2010-03-13 7:54 ` Stephen Leake
[not found] ` <ruqub2y84rqj.179q01lxzgatj$.dlg@40tude.net>
2010-03-13 19:33 ` Georg Bauhaus
2010-03-14 14:05 ` Alex Mentis
2010-03-14 14:21 ` Ludovic Brenta
2010-03-14 15:12 ` Alex Mentis
2010-03-15 9:14 ` Ludovic Brenta
2010-03-15 11:05 ` cjpsimon
2010-03-15 13:04 ` Ludovic Brenta
2010-03-15 14:16 ` J-P. Rosen
2010-03-15 19:14 ` Jeffrey R. Carter
2010-03-16 19:25 ` Robert Matthews
2010-03-14 15:38 ` Robert A Duff
2010-03-15 8:54 ` Ludovic Brenta
2010-03-15 16:44 ` Robert A Duff
2010-03-15 17:33 ` Ludovic Brenta
2010-03-15 18:36 ` Robert A Duff
2010-03-14 18:57 ` Jeffrey R. Carter
2010-03-15 8:56 ` Ludovic Brenta
2010-03-15 11:04 ` AdaMagica
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox