comp.lang.ada
 help / color / mirror / Atom feed
From: "Pat Rogers" <progers@classwide.com>
Subject: Re: Refactoring and Ada
Date: Thu, 07 Feb 2002 13:54:28 GMT
Date: 2002-02-07T13:54:28+00:00	[thread overview]
Message-ID: <oGv88.43898$KM3.3512024098@newssvr11.news.prodigy.com> (raw)
In-Reply-To: 3C623E98.646B7C0E@ib-paus.com

"Dr. Michael Paus" <paus@ib-paus.com> wrote in message
news:3C623E98.646B7C0E@ib-paus.com...
> Robert Dewar wrote:
>
> > By the way, I talked to a never-ever-use-use user of Ada
> > the other day who was appalled to discover that even if
> > you don't use USE clauses, you can have a case where you
> > write
> >
> >        a := f (x);
> >
> > where there were no other occurrences of f in the same
> > source file, no USE clauses, and the textual declaration
> > of f was in another unit.
> >
> > This is of course standard in both Ada 83 and Ada 95 (if
> > you don't know how it arises, and always assumed that avoiding use
> > clauses guaranteed that this could not happen,
> > you have always been fooling yourself :-)
> >
> > I often find that people think that avoiding use clauses
> > avoids this, and requires full qualification. In fact in
> > the above example, suppose the only other occurrence of
> > f is in package p, then it is the case that trying to
> > qualify by writing
> >
> >        a := p.f (x);
> >
> > is not just unnecessary, but in fact illegal.
>
> If I understand your example correctly, it reflects a problem
> which I recently had to fix in program written by someone else.
> We had the requirement not to use use and so the call of f had
> to be qualified as in your example above.

That's a good example of the effect of blindly following bad rules, since the
"don't use use-clauses rule" doesn't even apply here.

> The compiler complained
> about this of course and can you imagine what the programmer did
> in order to fix the problem?  The type of x (B_Type) was derived from
> some other type (let's say A_Type). So the programmer wrote:
>
>        a := p.f (p.A_Type(x));
>
> The compiler was happy and in this particular case the program
> even did what it was assumed to do. The hidden bug in this
> statement is a maintenance time-bomb which would not have occurred
> if use had been used.

No, it is not a matter of use clauses, in terms of *language rules* they are not
at play here.  That is explicitly a call to the parent operation, and it should
not have passed the code review.    It did not do what it was assumed to do, for
that matter -- it called the parent operation, which must have not been
overridden since it seemed to do the right thing.

They should have written it something like this, to satisfy whomever:

package P is
   type T is range 1 .. 10;
   procedure Q( This : out T );
end P;


with P;
procedure R is
   type T2 is new P.T;
   X : T2;
begin
   R.Q( X );    -- note the name of the unit enclosing the derivation
end R;


---
Patrick Rogers                       Consulting and Training in:
http://www.classwide.com          Real-Time/OO Languages
progers@classwide.com               Hard Deadline Schedulability Analysis
(281)648-3165                                 Software Fault Tolerance





  reply	other threads:[~2002-02-07 13:54 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-01 15:13 Refactoring and Ada Paul Anderson
2002-02-02 17:48 ` Nick Roberts
2002-02-02 20:36   ` Pat Rogers
2002-02-03  0:21     ` Nick Roberts
2002-02-03 13:53       ` Robert Dewar
2002-02-03 19:23         ` Nick Roberts
2002-02-04  2:17           ` Robert Dewar
2002-02-04 20:48             ` Nick Roberts
2002-02-04 22:31               ` Pat Rogers
2002-02-04 22:43                 ` Marin David Condic
2002-02-06  2:51                 ` Nick Roberts
2002-02-03 18:50       ` Simon Wright
2002-02-04  4:32     ` Richard Riehle
2002-02-04 12:28       ` David C. Hoos, Sr.
2002-02-04 17:03         ` Richard Riehle
2002-02-06 17:19           ` Robert A Duff
2002-02-04 17:59       ` Robert Dewar
2002-02-04 18:50         ` Pascal Obry
2002-02-05  1:07           ` Robert Dewar
2002-02-05  1:44         ` Richard Riehle
2002-02-06 17:42           ` Robert A Duff
2002-02-06 17:32         ` Robert A Duff
2002-02-07  8:45         ` Dr. Michael Paus
2002-02-07 13:54           ` Pat Rogers [this message]
2002-02-03 13:48   ` Robert Dewar
2002-02-03 19:38     ` Nick Roberts
2002-02-04  2:20       ` Robert Dewar
2002-02-08 21:21       ` Paul Anderson
2002-02-03  9:45 ` Volkert
2002-02-04  0:06 ` Refactoring and Ada (tool I'd like to have...) David Emery
2002-02-08  9:24 ` Refactoring and Ada Martin Dowie
2002-02-08 15:15   ` Ted Dennison
2002-02-08 15:52     ` Pat Rogers
2002-02-08 16:07       ` OT : " martin.m.dowie
2002-02-08 17:11         ` Pat Rogers
2002-02-09 19:46           ` martin.m.dowie
2002-02-09 23:04             ` Pat Rogers
2002-02-10 13:57               ` Martin Dowie
2002-02-08 16:06     ` martin.m.dowie
2002-02-08 17:07       ` Pat Rogers
2002-02-09 19:48         ` martin.m.dowie
2002-02-09 23:05           ` Pat Rogers
2002-02-10  1:30     ` Marc A. Criley
2002-02-10  2:58       ` tmoran
2002-02-11 15:27       ` Marin David Condic
2002-02-12 19:16         ` Simon Wright
2002-02-15 19:43           ` Marin David Condic
2002-02-15 20:33           ` Matthew Heaney
2002-02-15 21:40             ` Larry Kilgallen
2002-02-19 16:54               ` Matthew Heaney
2002-02-19 19:39                 ` Larry Kilgallen
2002-02-20  4:23                   ` Richard Riehle
2002-02-20  5:20                     ` Mark Biggar
2002-02-20  9:58                     ` Pat Rogers
2002-02-20 17:14                       ` Matthew Heaney
2002-02-20 17:18                         ` Pat Rogers
2002-02-20 18:08                           ` Matthew Heaney
2002-02-20 22:12                             ` Pat Rogers
2002-02-23 22:48                             ` Robert Dewar
2002-02-21  0:41                           ` Randy Brukardt
2002-02-21  1:31                             ` Pat Rogers
2002-02-22 14:37                             ` Pat Rogers
2002-02-22 21:23                               ` Randy Brukardt
2002-02-23 23:04                                 ` Robert Dewar
2002-02-25 20:26                                   ` Randy Brukardt
2002-02-23 23:21                                 ` Robert Dewar
2002-02-23 22:58                             ` Robert Dewar
2002-02-23 22:55                     ` Robert Dewar
2002-02-26  1:05                       ` Nick Roberts
  -- strict thread matches above, loose matches on Subject: below --
2002-02-05  6:15 Christoph Grein
2002-02-07 11:26 Christoph Grein
2002-02-07 18:31 ` Dr. Michael Paus
2002-02-08 12:45   ` Robert Dewar
2002-02-08 17:20     ` Dr. Michael Paus
2002-02-20  6:19 Christoph Grein
replies disabled

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