comp.lang.ada
 help / color / mirror / Atom feed
From: rational.com!geneo@uunet.uu.net  (Gene Ouye)
Subject: Re: Question of Visibility
Date: 1 Jul 93 21:44:02 GMT	[thread overview]
Message-ID: <1993Jul1.214402.25611@rational.com> (raw)

Boris Pelakh (pelakh@convex.com) wrote:
: I am trying to determine whether I am in the right (if I am not, I will have
: to patch a compiler). Examine the following example :

: with text_io;
: package boolean_type_pkg is
:   type boolean is (FALSE, TRUE);
:   for boolean use (FALSE => 16#00#, TRUE => 16#ff#);
:   package boolean_io is new text_io.enumeration_io(boolean);
: end boolean_type_pkg;

: with boolean_type_pkg; use boolean_type_pkg;
: procedure boolean_test is
:   flag : boolean := TRUE;
: begin
:   boolean_io.put(flag);
: end boolean_test;

: My (Verdix-derived) front-end determines flag to be of type STANDARD.BOOLEAN.
: I say that is correct since according to 8.1.11, STANDARD is an all-enclosing
: declarative region, and thus has visibility precedence to the with'ed in pkg.
: My customer claims that is wrong. Any opinions ? Alternatively, is there any
: compiler out there that will accept the above code ? Mine rejects it since
: boolean_io.put requires BOOLEAN_TYPE_PKG.BOOLEAN.

: -- 
: Boris Pelakh		Ada Project Leader          pelakh@convex.com
: 		     Convex Computer Corporation
: "If winning isn't important, why keep score ?"	-- Lt. Worf, Star Trek 
TNG.
: 			

Boris,

I believe that much of section 8.4 applies here as well as 8.1(11) -- 
especially paragraphs 4, 5, 8, and the example in paragraph 11.  Also
sections 8.3 and 8.6 seem applicable.

In particular, 8.4(5) discussing declarations made visible by a use clause
states:

	"A potentially visible declaration is not made directly visible if
	the place considered is within the immediate scope of a homograph
	of the delaration."

And 8.4(8):

	"The above rules guarantee that a declaration that is made directly
	visible by a use clause cannot hide an otherwise directly visible
	declaration."

8.4(11):

	package D is
	   T, U, V, : Boolean;
	end D;

	procedure P is
	   package E is ... (elided for clarity)

	   procedure Q is
	      T, X : Real;
	      use D, E;
	   begin
	      -- the name T means Q.T, not D.T

	      ... (other comments elided)

Relative to your example, I equate Boolean_Type_Pkg.Boolean to D.T above.
(I recognize that Q.T and D.T are of different types and I don't think that
that makes any difference WRT your example.)  Also, as you noted, 8.1(11)
states: "The package STANDARD forms a declarative region which encloses all
library units: the implicit declaration of each library unit is assumed to
occur immediately within this package".  Thus, I equate Standard.Boolean to
Q.T above (because it is in the declarative region immediately surrounding
your procedure Boolean_Test (i.e., Standard)).
I then conclude that Standard.Boolean should not be hidden by the use clause
(as per 8.4(5) and 8.4(8)).

BUT...
as much as I would like to believe I am a language lawyer, compared to other
posters in this newsgroup I am only a language law clerk.  If anyone believes
my post to be invalid, please correct me.

One question: what is preventing you from using dotted notation in the
              declaration of flag?  (never mind the obvious question of why
              do you need the use clause)

Gene Ouye (geneo@rational.com)
(301) 897-4014

             reply	other threads:[~1993-07-01 21:44 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1993-07-01 21:44 Gene Ouye [this message]
  -- strict thread matches above, loose matches on Subject: below --
1993-07-08 14:21 Question of Visibility Gene Ouye
1993-07-08 12:17 Wes Groleau X7574
1993-07-07 21:15 Dave Bashford
1993-07-07 21:07 Bor is Pelakh
1993-07-07 20:15 Tucker Taft
1993-07-02 14:53 agate!spool.mu.edu!sol.ctr.columbia.edu!The-Star.honeywell.com!cs0.dasd.h
1993-07-02 13:36 Boris Pelakh
1993-07-01 18:39 Boris Pelakh
replies disabled

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