comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Subject: Re: Is this legal Ada95?
Date: 1997/11/06
Date: 1997-11-06T00:00:00+00:00	[thread overview]
Message-ID: <EJ8tIn.8J6.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 63t88t$mqk$1@news.iastate.edu


Kevin Radke (radke@cpre1.ee.iastate.edu) wrote:

: I was compiling some Ada83 code originally written under VMS
: and the Dec Ada compiler, and Gnat v3.10p on NT gives me
: the following error:

:   foo.adb:11:56: object "Initial_Value" cannot be used before end
:   of its declaration

: This code has compiled successfully on 3 Ada83 compilers and
: 1 Ada95 compiler without problems.  (This doesn't mean it is
: correct, just no one else has complained about it.)  I was
: wondering if it is invalid somehow in Ada95 and the other
: Ada95 compiler missed it, or if GNAT is being finicky.

Looks OK to me (and our Ada 95 front end).  GNAT 3.10p seems to 
be in the wrong here; it conceivably is being confused by
your use of "Initial_Value" twice.  

You might try changing the name of the formal parameter in one of 
your generics to be something other than Initial_Value, and make the 
corresponding change in your instantiation of Double_Buffer.Interface.
If this fixes the problem, then GNAT is apparently getting 
confused by the name reuse (though your use of the same
names for both is in fact perfectly legal).

: Thanks!
: Kevin

-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Burlington, MA  USA

: Here are the 3 files:
: -- begin double_buffer.ads --
: package Double_Buffer is

:   generic
:     type Item_Type is private;
:     Initial_Value : in Item_Type;
:   package Interface is
:     procedure Put(Item : in     Item_Type);
:     procedure Get(Item :    out Item_Type);
:   end Interface;
: end Double_Buffer;
: -- end double_buffer.ads --

: -- begin foo.ads --
: generic
:   type Item_Type is private;
:   Initial_Value : in Item_Type;
: package Foo is
:   type Time_Tag_Type is new Integer;
:   Null_Time_Tag : constant Time_Tag_Type := 0;

:   procedure Bar (Item : in Item_Type);
: end Foo;
: -- end foo.ads --

: -- begin foo.adb --
: with Double_Buffer;

: package body Foo is
:   type Tagged_Item_Type is record
:     Item     : Item_Type;
:     Time_Tag : Time_Tag_Type;
:   end record;

:   package My_Buffer is new
:     Double_Buffer.Interface (Tagged_Item_Type,
:                              Initial_Value => (Item => Initial_Value,
:                                                Time_Tag => Null_Time_Tag));
:   procedure Bar (Item : in Item_Type) is
:   begin
:     null;
:   end Bar;

: end Foo;
: -- end foo.adb --




      reply	other threads:[~1997-11-06  0:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-11-06  0:00 Is this legal Ada95? Kevin Radke
1997-11-06  0:00 ` Tucker Taft [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