comp.lang.ada
 help / color / mirror / Atom feed
From: "(see below)" <yaldnif.w@blueyonder.co.uk>
Subject: Re: Elaboration query
Date: Fri, 23 Jul 2010 15:52:03 +0100
Date: 2010-07-23T15:52:03+01:00	[thread overview]
Message-ID: <C86F6B23.14B106%yaldnif.w@blueyonder.co.uk> (raw)
In-Reply-To: b8dcce8d-979d-4347-a84f-a2a15a318285@m35g2000prn.googlegroups.com

On 23/07/2010 03:10, in article
b8dcce8d-979d-4347-a84f-a2a15a318285@m35g2000prn.googlegroups.com, "Adam
Beneschan" <adam@irvine.com> wrote:

> On Jul 22, 5:17�pm, "(see below)" <yaldni...@blueyonder.co.uk> wrote:
>> I have a package which is a grandchild, and GNAT issues elaboration warnings
>> on its body, thus:
>> 
>> 
>> 
>> 
>> 
>>> with IOC.shift; pragma Elaborate_All(IOC.shift);
>>> package body IOC.shift.TR is
>>> ...
>>> � �overriding
>>> � �procedure Initialize (the_reader : in out IOC.shift.TR.device) is
>>> � �begin
>>> � � � ...
>>> � � � open(...);
>>> � � � |
>>>>>> info: call to "open" during elaboration
>>>>>> info: implicit pragma Elaborate_All for "IO" generated
>>>>>> warning: "Initialize" called at line 31
>>>>>> warning: call to "open" in elaboration code requires pragma Elaborate_All
>>>>>> on "IO"
>>> � �...
>>> � �end Initialize; ...
>>> end IOC.shift.TR;
>> 
>> The "open" operation it is complaining about is in the the IO package.
>> 
>> The ancestors of IOC.shift.TR begin thus:
>> 
>>> with IOC; pragma Elaborate_All(IOC);
>>> package IOC.shift is ...
>> 
>> and:
>> 
>>> with IO; pragma Elaborate_All(IO);
>>> package IOC is ...
>> 
>> How do I get rid of the warning?
>> 
>> I cannot put an explicit "pragma Elaborate_All(IO)" in IOC.shift.TR, because
>> it does not "with" IO.
>> 
>> Surely I should not have to "with" IO all the way down the parent/child
>> hierarchy? What am I doing wrong?
> 
> If you want to reference "IO" in a pragma in the context clause, then
> yes, you do have to WITH it in the same context clause.  This is
> because the visibility rules are different in context clauses.  See
> 10.1.6, especially 10.1.6(3).  I can understand why you think you
> "shouldn't have to" do this, because you don't have to do it when
> referencing IO inside the child package body.  But the rules are
> different here.  Sorry.

Thanks, Adam.

BTW the code is part of an emulator for the English Electric KDF9 computer
(announced 1960). It's about 19 KSLOC, so a non-trivial Ada 2005 program.

See <http://www.findlayw.plus.com/KDF9>.

This week it passed a strenuous test, correctly compiling and running the
famous Whetstone Benchmark (which originated, in Algol 60, on the KDF9).

Amusingly, the output was validated by also running the test on a virtual
ICL 1904A, which dates from about 1970; but the 1904A emulator was written
(by Bill Gallagher) in C++.

-- 
Bill Findlay
<surname><forename> chez blueyonder.co.uk





      reply	other threads:[~2010-07-23 14:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-23  0:17 Elaboration query (see below)
2010-07-23  2:10 ` Adam Beneschan
2010-07-23 14:52   ` (see below) [this message]
replies disabled

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