comp.lang.ada
 help / color / mirror / Atom feed
From: "David C. Hoos, Sr." <david.c.hoos.sr@ada95.com>
Subject: Re: Compiling with Gnat
Date: 1999/01/21
Date: 1999-01-21T00:00:00+00:00	[thread overview]
Message-ID: <78793v$nq0@hobbes.crc.com> (raw)
In-Reply-To: yoxu2xl3q4w.fsf@dymock.dra.hmg.gb

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3965 bytes --]


Roger Hoyle wrote in message ...
>David C. Hoos, Sr. writes:
>
>> Roger Hoyle wrote ...
>> >
>> >use clause not allowed in predefined spec
>>
>> What is the name of the file and the name of the unit in which you're
>> placing this "use" clause?
>> Does it have the name of one of the langage- or gnat- predefined units?
>
>The file is i-cpoerr.ads and the use clause happens in...
>
>package Interfaces.C.POSIX_Error is
>
>> >The line in the code is :
>> >
>> >use Interfaces.C;
>>
Aha, this looks like a package out of Florist (or perhaps its predecessor
Forest).

These points need to be made, viz:

    1.  This is apredefined package (at least in the GNAT usage of the
term),
        because it is a child of a predefined unit.

    2.  Because it is a child of Interfaces.C, the clause "use Interfaces.C"
is
        meaningless, because a parent is always visible to its children.

    3.  To compile predefined units, gnat requires the use of the -gnatg
switch.

>> >Are there any workarounds better than putting appropriate references
before
>> >every variable. Would that work?
>>
>> In Ada95, "use" clauses can be replaced by "use type" clauses for
primitive
>> operation visibility.
>
>Forgive my ignorance, but could you please explain the "use type" clause, I
>can't find a reference to it an any of my Ada95 texts.
>
I'm curious which Ada95 texts would not discuss this topic.

Here's what the RM95 has to say about it:

8.4 Use Clauses

1 A use_package_clause achieves direct visibility of declarations that
appear in the visible part of a package; a use_type_clause achieves direct
visibility of the primitive operators of a type.

Syntax

2 use_clause ::= use_package_clause | use_type_clause
3 use_package_clause ::= use package_name {, package_name};
4 use_type_clause ::= use type subtype_mark {, subtype_mark};

Legality Rules

5 A package_name of a use_package_clause shall denote a package.

Static Semantics

6 For each use_clause, there is a certain region of text called the scope of
the use_clause. For a use_clause within a context_clause of a
library_unit_declaration or library_unit_renaming_declaration, the scope is
the entire declarative region of the declaration. For a use_clause within a
context_clause of a body, the scope is the entire body and any subunits
(including multiply nested subunits). The scope does not include
context_clauses themselves.

7 For a use_clause immediately within a declarative region, the scope is the
portion of the declarative region starting just after the use_clause and
extending to the end of the declarative region. However, the scope of a
use_clause in the private part of a library unit does not include the
visible part of any public descendant of that library unit.
8 For each package denoted by a package_name of a use_package_clause whose
scope encloses a place, each declaration that occurs immediately within the
declarative region of the package is potentially use-visible at this place
if the declaration is visible at this place. For each type T or T�Class
determined by a subtype_mark of a use_type_clause whose scope encloses a
place, the declaration of each primitive operator of type T is potentially
use-visible at this place if its declaration is visible at this place.

9 A declaration is use-visible if it is potentially use-visible, except in
these naming-conflict cases:

10 � A potentially use-visible declaration is not use-visible if the place
considered is within the immediate scope of a homograph of the declaration.
11 � Potentially use-visible declarations that have the same identifier are
not use-visible unless each of them is an overloadable declaration.

Dynamic Semantics

12 The elaboration of a use_clause has no effect.

Examples

13 Example of a use clause in a context clause:

14 with Ada.Calendar; use Ada;

15 Example of a use type clause:

16 use type Rational_Numbers.Rational; -- see 7.1
Two_Thirds : Rational_Numbers.Rational := 2/3;







  parent reply	other threads:[~1999-01-21  0:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-01-20  0:00 Compiling with Gnat Roger Hoyle
1999-01-20  0:00 ` David C. Hoos, Sr.
1999-01-21  0:00   ` Roger Hoyle
1999-01-21  0:00     ` robert_dewar
1999-01-21  0:00     ` David C. Hoos, Sr. [this message]
1999-01-21  0:00     ` rdt
1999-01-21  0:00 ` dewar
replies disabled

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