From: eachus@mitre-bedford.arpa (Robert I. Eachus)
Subject: Re: why are these unknown identifiers?
Date: 11 Sep 91 18:43:18 GMT [thread overview]
Message-ID: <EACHUS.91Sep11114318@Dr_No.mitre.org> (raw)
In article <9109101616.aa26718@PARIS.ICS.UCI.EDU> jduarte@liege.ICS.UCI.EDU (Jo
se Duarte) writes:
-----------------------------------------
package X is
type DIRECTIONS is (UP,DOWN,LEFT,RIGHT);
end X;
-----------------------------------------
with X;
package Y is
subtype DIRECTIONS is X.DIRECTIONS;
end Y;
-----------------------------------------
with TEXT_IO;
use TEXT_IO;
with Y;
procedure BUG is
V1 : Y.Directions := Y.UP; -- Y.UP is unknown
V2 : Y.Directions := Y.DOWN; -- Y.DOWN is unknown
begin
null;
end BUG;
Can someone tell me why "Y.UP" and "Y.DOWN" are unknown identifiers
within the procedure BUG? I have to "with X" and then assign X.UP
and X.DOWN to V1 and V2 in order to compile this. Why is this the case?
Is this an Ada pecularity or a compiler bug?
-- You could say it is an Ada pecularity, because Ada is the only
-- language with all the features necessary to run into it. A type
-- declaration derives operations for the parent type, but a subtype
-- does not. Therefore there is no function UP return DIRECTIONS in
-- package Y. If you want to be able to refer to Y.UP you should say
-- either:
with X;
package Y is
type DIRECTIONS is new X.DIRECTIONS;
-- derived functions declared here.
end Y;
-- or:
with X;
package Y is
subtype DIRECTIONS is X.DIRECTIONS;
function UP return DIRECTIONS renames X.UP;
function DOWN return DIRECTIONS renames X.DOWN;
function LEFT return DIRECTIONS renames X.LEFT;
function RIGHT return DIRECTIONS renames X.RIGHT;
end Y;
-- The first approach will require explicit conversions when trying to
-- assign values of type X.DIRECTIONS to variables of type
-- Y.DIRECTIONS and vice-versa. (When designing Ada, this was thought
-- to be a GOOD thing.) In the second case cross assignments are not
-- a problem but saying use X; use Y; will result in neither
-- declaration of UP being directly visible.
Have fun,
Robert I. Eachus
with STANDARD_DISCLAIMER;
use STANDARD_DISCLAIMER;
function MESSAGE (TEXT: in CLEVER_IDEAS) return BETTER_IDEAS is...
--
Robert I. Eachus
with STANDARD_DISCLAIMER;
use STANDARD_DISCLAIMER;
function MESSAGE (TEXT: in CLEVER_IDEAS) return BETTER_IDEAS is...
next reply other threads:[~1991-09-11 18:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
1991-09-11 18:43 Robert I. Eachus [this message]
-- strict thread matches above, loose matches on Subject: below --
1991-09-18 14:24 why are these unknown identifiers? & Wise
1991-09-17 14:58 Mr. D. Harter
1991-09-11 21:02 Dave Williamson
1991-09-11 20:16 csus.edu!wupost!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!caen!uv
1991-09-11 19:24 Greg Harvey
1991-09-11 14:13 agate!spool.mu.edu!news.cs.indiana.edu!arizona.edu!east.pima.edu!rharwood
1991-09-10 23:16 Jose Duarte
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox