summaryrefslogtreecommitdiff
path: root/gcc/ada/gnat-style.texi
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-01 17:25:04 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-01 17:25:04 +0000
commitf9dc9f16291c704cf55b8d8ce5e2abed2d6b8aae (patch)
tree28cb21189be3b24ac0499fbc9965d591c3f388c4 /gcc/ada/gnat-style.texi
parent55a5f5c27b97f0f03e684a954f527fb912a1e99c (diff)
downloadgcc-f9dc9f16291c704cf55b8d8ce5e2abed2d6b8aae.tar.gz
PR ada/14150
* Make-lang.in: Clean up generation of documentation * gnat-style.texi, gnat_rm.texi, ug_words: Resync with AdaCore version * xgnatug.adb: Removed, replaced by xgnatugn.adb * xgnatugn.adb: Replaces xgnatug.adb * gnat_ug.texi: Removed, replaced by gnat_ugn.texi * gnat_ugn.texi: Replaces gnat_ug.texi. Resync with AdaCore version * gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi, gnat_ug_wnt.texi: Removed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80308 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/gnat-style.texi')
-rw-r--r--gcc/ada/gnat-style.texi442
1 files changed, 322 insertions, 120 deletions
diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi
index 16267ed610c..4266f127a65 100644
--- a/gcc/ada/gnat-style.texi
+++ b/gcc/ada/gnat-style.texi
@@ -7,8 +7,7 @@
@c o
@c G N A T C O D I N G S T Y L E o
@c o
-@c o
-@c Copyright (C) 1992-2001 Ada Core Technologies, Inc. o
+@c Copyright (C) 1992-2003 Ada Core Technologies, Inc. o
@c o
@c GNAT is free software; you can redistribute it and/or modify it under o
@c terms of the GNU General Public License as published by the Free Soft- o
@@ -24,7 +23,11 @@
@c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
@setfilename gnat-style.info
+
@settitle GNAT Coding Style
+@setchapternewpage odd
+
+
@dircategory Programming
@direntry
* gnat-style: (gnat-style). GNAT Coding Style
@@ -35,24 +38,63 @@
@end macro
@c %**end of header
-@ifinfo
- @center GNAT Coding Style
-
- @center A guide for GNAT developers
- Copyright (C) 1992-2001 Ada Core Technologies, Inc.
-@end ifinfo
-
@titlepage
@sp 10
@title GNAT Coding Style
-@subtitle A guide for GNAT developers
+@flushright
+@titlefont{A Guide for GNAT Developers}
+@end flushright
+@sp 2
+@subtitle GNAT, The GNU Ada 95 Compiler
+@subtitle Document revision level $Revision: 1.8 $
+@subtitle Date: $Date: 2003/05/24 21:29:30 $
+
@author Ada Core Technologies, Inc.
+
+@page
+@vskip 0pt plus 1filll
+
+Copyright @copyright{} 1995-2003, Free Software Foundation
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with the Invariant Sections being ``GNU Free Documentation License'', with the
+Front-Cover Texts being
+``GNAT Coding Style'' and ``A Guide for GNAT Developers'',
+and with no Back-Cover Texts.
+A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
@end titlepage
+
@raisesections
@node Top, General, , (dir)
@comment node-name, next, previous, up
+@ifinfo
+@noindent
+GNAT Coding Style@*
+A Guide for GNAT Developers
+@sp 2
+@noindent
+GNAT, The GNU Ada 95 Compiler@*
+Document revision level $Revision: 1.8 $@*
+Date: $Date: 2003/05/24 21:29:30 $
+
+@noindent
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with the Invariant Sections being ``GNU Free Documentation License'', with the
+Front-Cover Texts being
+``GNAT Coding Style'' and ``A Guide for GNAT Developers''
+and with no Back-Cover Texts.
+A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+@end ifinfo
+
+
@menu
* General::
* Lexical Elements::
@@ -62,6 +104,8 @@
* Subprograms::
* Packages::
* Program Structure::
+* GNU Free Documentation License::
+* Index::
@end menu
@c -------------------------------------------------------------------------
@@ -75,31 +119,40 @@ readability of the code. This document has been written to help
maintain this consistent style, while having a large group of developers
work on the compiler.
-@noindent
For the coding style in the C parts of the compiler and run time,
see the GNU Coding Guidelines.
-@noindent
-This document is structured after the Ada Reference manual.
+This document is structured after the @cite{Ada Reference Manual}.
Those familiar with that document should be able to quickly
lookup style rules for particular constructs.
+
@c -------------------------------------------------------------------------
@node Lexical Elements, Declarations and Types, General, Top
@section Lexical Elements
@c -------------------------------------------------------------------------
+@cindex Lexical elements
@subsection Character Set and Separators
@c -------------------------------------------------------------------------
+@cindex Character set
+@cindex ASCII
+@cindex Separators
+@cindex End-of-line
+@cindex Line length
+@cindex Indentation
@itemize @bullet
@item
The character set used should be plain 7-bit ASCII@.
The only separators allowed are space and the end-of-line sequence.
-No other control character or format effector (such as HT, VT, FF)
+No other control character or format effector (such as @code{HT},
+@code{VT}, @code{FF})
should be used.
-The normal end-of-line sequence is used, which may be LF, CR/LF or CR,
-depending on the host system. An optional SUB (16#1A#) may be present as the
+The normal end-of-line sequence is used, which may be
+@code{LF}, @code{CR/LF} or @code{CR},
+depending on the host system. An optional @code{SUB}
+(@code{16#1A#}) may be present as the
last character in the file on hosts using that character as file terminator.
@item
@@ -113,24 +166,31 @@ separator.
Lines must not have trailing blanks.
@item
-Indentation is 3 characters per level for if statements, loops, case
-statements. For exact information on required spacing between lexical
+Indentation is 3 characters per level for @code{if} statements, loops, and
+@code{case} statements.
+For exact information on required spacing between lexical
elements, see file @file{style.adb}.
-
+@cindex @file{style.adb} file
@end itemize
+
@subsection Identifiers
@c -------------------------------------------------------------------------
@itemize @bullet
+@cindex Identifiers
+
@item
Identifiers will start with an upper case letter, and each letter following
-an underscore will be upper case. Short acronyms may be all upper case.
+an underscore will be upper case.
+@cindex Casing (for identifiers)
+Short acronyms may be all upper case.
All other letters are lower case.
An exception is for identifiers matching a foreign language. In particular,
we use all lower case where appropriate for C@.
@item
Use underscores to separate words in an identifier.
+@cindex Underscores
@item Try to limit your use of abbreviations in identifiers.
It is ok to make a few abbreviations, explain what they mean, and then
@@ -139,22 +199,25 @@ example is the @code{ALI} word which stands for Ada Library
Information and is by convention always written in upper-case when
used in entity names.
-@smallexample
+@smallexample @c adanocomment
procedure Find_ALI_Files;
@end smallexample
@item
-Don't use the variable @samp{I}, use @samp{J} instead, @samp{I} is too
-easily mixed up with @samp{1} in some fonts. Similarly don't use the
-variable @samp{O}, which is too easily mixed up with the number @samp{0}.
+Don't use the variable name @code{I}, use @code{J} instead; @code{I} is too
+easily confused with @code{1} in some fonts. Similarly don't use the
+variable @code{O}, which is too easily mistaken for the number @code{0}.
@end itemize
@subsection Numeric Literals
@c -------------------------------------------------------------------------
+@cindex Numeric literals
+
@itemize @bullet
@item
Numeric literals should include underscores where helpful for
readability.
+@cindex Underscores
@smallexample
1_000_000
@@ -165,77 +228,89 @@ readability.
@subsection Reserved Words
@c -------------------------------------------------------------------------
+@cindex Reserved words
+
@itemize @bullet
@item
Reserved words use all lower case.
+@cindex Casing (for reserved words)
-@smallexample
+@smallexample @c adanocomment
return else
@end smallexample
@item
-The words @samp{Access}, @samp{Delta} and @samp{Digits} are
+The words @code{Access}, @code{Delta} and @code{Digits} are
capitalized when used as @syntax{attribute_designator}.
@end itemize
@subsection Comments
@c -------------------------------------------------------------------------
+@cindex Comments
@itemize @bullet
@item
-Comment start with @samp{-- } (i.e.@: @samp{--} followed by two spaces).
+A comment starts with @code{--} followed by two spaces).
The only exception to this rule (i.e.@: one space is tolerated) is when the
-comment ends with @samp{ --}.
-It also accepted to have only one space between @samp{--} and the start
+comment ends with a single space followed by @code{--}.
+It is also acceptable to have only one space between @code{--} and the start
of the comment when the comment is at the end of a line,
after some Ada code.
@item
Every sentence in a comment should start with an upper-case letter (including
the first letter of the comment).
+@cindex Casing (in comments)
@item
When declarations are commented with ``hanging'' comments, i.e.@:
comments after the declaration, there is no blank line before the
comment, and if it is absolutely necessary to have blank lines within
-the comments these blank lines @emph{do} have a @samp{--} (unlike the
+the comments these blank lines @emph{do} have a @code{--} (unlike the
normal rule, which is to use entirely blank lines for separating
-comment paragraphs). The comment start at same level of indentation
-as code they are commenting.
+comment paragraphs). The comment starts at same level of indentation
+as code it is commenting.
+@cindex Blank lines (in comments)
+@cindex Indentation
-@smallexample
+@smallexample @c adanocomment
z : Integer;
- -- @r{Integer value for storing value of} z
+ -- Integer value for storing value of z
--
- -- @r{The previous line was a blank line.}
+ -- The previous line was a blank line.
@end smallexample
@item
-Comments that are dubious or incomplete or comment on possibly
-wrong or incomplete code should be preceded or followed by @samp{???}@.
+Comments that are dubious or incomplete, or that comment on possibly
+wrong or incomplete code, should be preceded or followed by @code{???}@.
@item
-Comments in a subprogram body must generally be surrounded by blank lines,
-except after a @samp{begin}:
+Comments in a subprogram body must generally be surrounded by blank lines.
+An exception is a comment that follows a line containing a single keyword
+(@code{begin}, @code{else}, @code{loop}):
-@smallexample
+@smallexample @c adanocomment
+@group
begin
- -- @r{Comment for the next statement}
+ -- Comment for the next statement
A := 5;
- -- @r{Comment for the B statement}
+ -- Comment for the B statement
B := 6;
+ end;
+@end group
@end smallexample
@item
In sequences of statements, comments at the end of the lines should be
aligned.
+@cindex Alignment (in comments)
-@smallexample
- My_Identifier := 5; -- @r{First comment}
- Other_Id := 6; -- @r{Second comment}
+@smallexample @c adanocomment
+ My_Identifier := 5; -- First comment
+ Other_Id := 6; -- Second comment
@end smallexample
@item
@@ -244,7 +319,7 @@ period. Comments taking more than a line are punctuated in the normal
manner.
@item
-Comments should focus on why instead of what.
+Comments should focus on @emph{why} instead of @emph{what}.
Descriptions of what subprograms do go with the specification.
@item
@@ -254,20 +329,22 @@ depend on the names of things. The names are supplementary, not
sufficient, as comments.
@item
-Do NOT put two spaces after periods in comments.
+@emph{Do not} put two spaces after periods in comments.
@end itemize
@c -------------------------------------------------------------------------
@node Declarations and Types, Expressions and Names, Lexical Elements,Top
@section Declarations and Types
@c -------------------------------------------------------------------------
+@cindex Declarationa and Types
@itemize @bullet
@item
In entity declarations, colons must be surrounded by spaces. Colons
should be aligned.
+@cindex Alignment (in declarations)
-@smallexample
+@smallexample @c adanocomment
Entity1 : Integer;
My_Entity : Integer;
@end smallexample
@@ -281,10 +358,11 @@ All local subprograms in a subprogram or package body should be declared
before the first local subprogram body.
@item
-Don't declare local entities that hide global entities.
+Do not declare local entities that hide global entities.
+@cindex Hiding of outer entities
@item
-Don't declare multiple variables in one declaration that spans lines.
+Do not declare multiple variables in one declaration that spans lines.
Start a new declaration on each line, instead.
@item
@@ -303,14 +381,16 @@ one context, where comments explain their purpose.
@node Expressions and Names, Statements, Declarations and Types, Top
@section Expressions and Names
@c -------------------------------------------------------------------------
+@cindex Expressions and names
@itemize @bullet
@item
Every operator must be surrounded by spaces, except for the
exponentiation operator.
+@cindex Operators
-@smallexample
+@smallexample @c adanocomment
E := A * B**2 + 3 * (C - D);
@end smallexample
@@ -320,7 +400,8 @@ When folding a long line, fold before an operator, not after.
@item
Use parentheses where they clarify the intended association of operands
with operators:
-@smallexample
+@cindex Parenthesization of expressions
+@smallexample @c adanocomment
(A / B) * C
@end smallexample
@end itemize
@@ -329,9 +410,12 @@ with operators:
@node Statements, Subprograms, Expressions and Names, Top
@section Statements
@c -------------------------------------------------------------------------
+@cindex Statements
@subsection Simple and Compound Statements
@c -------------------------------------------------------------------------
+@cindex Simple and compound statements
+
@itemize @bullet
@item
Use only one statement or label per line.
@@ -342,13 +426,17 @@ groups or separated from surrounding code using a blank line.
@subsection If Statements
@c -------------------------------------------------------------------------
+@cindex @code{if} statement
+
@itemize @bullet
@item
-When the @samp{if}, @samp{elsif} or @samp{else} keywords fit on the
-same line with the condition and the @samp{then} keyword, then the
+When the @code{if}, @code{elsif} or @code{else} keywords fit on the
+same line with the condition and the @code{then} keyword, then the
statement is formatted as follows:
+@cindex Alignment (in an @code{if} statement)
-@smallexample
+@smallexample @c adanocomment
+@group
if @var{condition} then
...
elsif @var{condition} then
@@ -356,63 +444,81 @@ statement is formatted as follows:
else
...
end if;
+@end group
@end smallexample
@noindent
-When the above layout is not possible, @samp{then} should be aligned
-with @samp{if}, and conditions should preferably be split before an
-@samp{and} or @samp{or} keyword a follows:
+When the above layout is not possible, @code{then} should be aligned
+with @code{if}, and conditions should preferably be split before an
+@code{and} or @code{or} keyword a follows:
-@smallexample
+@smallexample @c adanocomment
+@group
if @var{long_condition_that_has_to_be_split}
and then @var{continued_on_the_next_line}
then
...
end if;
+@end group
@end smallexample
@noindent
-The @samp{elsif}, @samp{else} and @samp{end if} always line up with
-the @samp{if} keyword. The preferred location for splitting the line
-is before @samp{and} or @samp{or}. The continuation of a condition is
+The @code{elsif}, @code{else} and @code{end if} always line up with
+the @code{if} keyword. The preferred location for splitting the line
+is before @code{and} or @code{or}. The continuation of a condition is
indented with two spaces or as many as needed to make nesting clear.
-As exception, if conditions are closely related either of the
+As an exception, if conditions are closely related either of the
following is allowed:
@smallexample
+@group
if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
or else
x = asldkjhalkdsjfhhfd
or else
x = asdfadsfadsf
then
+ ...
+ end if;
+@end group
+@group
if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
x = asldkjhalkdsjfhhfd or else
x = asdfadsfadsf
then
+ ...
+ end if;
+@end group
@end smallexample
@item
-Conditions should use short-circuit forms (@samp{and then},
-@samp{or else}).
+Conditions should use short-circuit forms (@code{and then},
+@code{or else}).
+@cindex Short-circuit forms
@item
-Complex conditions in if statements are indented two characters:
+Complex conditions in @code{if} statements are indented two characters:
+@cindex Indentation (in @code{if} statements)
-@smallexample
+@smallexample @c adanocomment
+@group
if @var{this_complex_condition}
and then @var{that_other_one}
and then @var{one_last_one}
then
...
+ end if;
+@end group
@end smallexample
@item
-Every @samp{if} block is preceded and followed by a blank line, except
+Every @code{if} block is preceded and followed by a blank line, except
where it begins or ends a @syntax{sequence_of_statements}.
+@cindex Blank lines (in an @code{if} statement)
-@smallexample
+@smallexample @c adanocomment
+@group
A := 5;
if A = 5 then
@@ -420,77 +526,93 @@ where it begins or ends a @syntax{sequence_of_statements}.
end if;
A := 6;
+@end group
@end smallexample
@end itemize
@subsection Case Statements
-@itemize @bullet
+@cindex @code{case} statements
+@itemize @bullet
@item
-Layout is as below. For long case statements, the extra indentation
-can be saved by aligning the when clauses with the opening case.
+Layout is as below. For long @code{case} statements, the extra indentation
+can be saved by aligning the @code{when} clauses with the opening @code{case}.
-@smallexample
+@smallexample @c adanocomment
+@group
case @var{expression} is
when @var{condition} =>
...
when @var{condition} =>
...
end case;
+@end group
@end smallexample
@end itemize
@subsection Loop Statements
-@itemize @bullet
+@cindex Loop statements
+@itemize @bullet
@noindent
-When possible, have @samp{for} or @samp{while} on one line with the
-condition and the @samp{loop} keyword.
+When possible, have @code{for} or @code{while} on one line with the
+condition and the @code{loop} keyword.
-@smallexample
+@smallexample @c adanocomment
+@group
for J in S'Range loop
...
end loop;
+@end group
@end smallexample
@noindent
If the condition is too long, split the condition (see ``If
-statements'' above) and align @samp{loop} with the @samp{for} or
-@samp{while} keyword.
+statements'' above) and align @code{loop} with the @code{for} or
+@code{while} keyword.
+@cindex Alignment (in a loop statement)
-@smallexample
+@smallexample @c adanocomment
+@group
while @var{long_condition_that_has_to_be_split}
and then @var{continued_on_the_next_line}
loop
...
end loop;
+@end group
@end smallexample
@noindent
If the @syntax{loop_statement} has an identifier, it is laid out as follows:
-@smallexample
+@smallexample @c adanocomment
+@group
Outer : while not @var{condition} loop
...
end Outer;
+@end group
@end smallexample
@end itemize
@subsection Block Statements
-@itemize @bullet
+@cindex Block statement
+@itemize @bullet
@item
-The @samp{declare} (optional), @samp{begin} and @samp{end} statements
+The @code{declare} (optional), @code{begin} and @code{end} words
are aligned, except when the @syntax{block_statement} is named. There
-is a blank line before the @samp{begin} keyword:
+is a blank line before the @code{begin} keyword:
+@cindex Alignment (in a block statement)
-@smallexample
+@smallexample @c adanocomment
+@group
Some_Block : declare
...
begin
...
end Some_Block;
+@end group
@end smallexample
@end itemize
@@ -499,61 +621,104 @@ is a blank line before the @samp{begin} keyword:
@node Subprograms, Packages, Statements, Top
@section Subprograms
@c -------------------------------------------------------------------------
-
+@cindex Subprograms
@subsection Subprogram Declarations
@c -------------------------------------------------------------------------
@itemize @bullet
@item
-Do not write the @samp{in} for parameters, especially in functions:
+Do not write the @code{in} for parameters, especially in functions:
-@smallexample
+@smallexample @c adanocomment
function Length (S : String) return Integer;
@end smallexample
@item
-When the declaration line for a procedure or a function is too long, fold it.
-In this case, align the colons, and, for functions, the result type.
+When the declaration line for a procedure or a function is too long to fit
+the entire declaration (including the keyword procedure or function) on a
+single line, then fold it, putting a single parameter on a line, aligning
+the colons, as in:
-@smallexample
+@smallexample @c adanocomment
+@group
+ procedure Set_Heading
+ (Source : String;
+ Count : Natural;
+ Pad : Character := Space;
+ Fill : Boolean := True);
+@end group
+@end smallexample
+
+@noindent
+In the case of a function, if the entire spec does not fit on one line, then
+the return may appear after the last parameter, as in:
+
+@smallexample @c adanocomment
+@group
function Head
(Source : String;
Count : Natural;
- Pad : Character := Space)
- return String;
+ Pad : Character := Space) return String;
+@end group
@end smallexample
-@item
-The parameter list for a subprogram is preceded by a space:
+@noindent
+Or it may appear on its own as a separate line. This form is preferred when
+putting the return on the same line as the last parameter would result in
+an overlong line. The return type may optionally be aligned with the types
+of the parameters (usually we do this aligning if it results only in a small
+number of extra spaces, and otherwise we don't attempt to align). So two
+alternative forms for the above spec are:
+
+@smallexample @c adanocomment
+@group
+ function Head
+ (Source : String;
+ Count : Natural;
+ Pad : Character := Space)
+ return String;
-@smallexample
- procedure Func (A : Integer);
+ function Head
+ (Source : String;
+ Count : Natural;
+ Pad : Character := Space)
+ return String;
+@end group
@end smallexample
@end itemize
@subsection Subprogram Bodies
@c -------------------------------------------------------------------------
-@itemize @bullet
+@cindex Subprogram bodies
+@itemize @bullet
@item
-The functions and procedures should always be sorted alphabetically in
-a compilation unit.
+Function and procedure bodies should usually be sorted alphabetically. Do
+not attempt to sort them in some logical order by functionality. For a
+sequence of subrpgroams specs, a general alphabetical sorting is also
+usually appropriate, but occasionally it makes sense to group by major
+function, with appropriate headers.
@item
All subprograms have a header giving the function name, with the following
format:
-@smallexample
+@smallexample @c adanocomment
+@group
-----------------
-- My_Function --
-----------------
procedure My_Function is
begin
+ ...
+ end My_Function;
+@end group
@end smallexample
+@noindent
Note that the name in the header is preceded by a single space,
not two spaces as for other comments.
@@ -561,18 +726,26 @@ not two spaces as for other comments.
Every subprogram body must have a preceding @syntax{subprogram_declaration}.
@item
-If there any declarations in a subprogram, the @samp{begin} keyword is
-preceded by a blank line.
+@cindex Blank lines (in subprogram bodies)
+A sequence of declarations may optionally be separated from the following
+begin by a blank line. Just as we optionally allow blank lines in general
+between declarations, this blank line should be present only if it improves
+readability. Generally we avoid this blank line if the declarative part is
+small (one or two lines) and we include it if the declarative part is long.
@item
If the declarations in a subprogram contain at least one nested
-subprogram body, then just before the @samp{begin} of the enclosing
-subprogram, there is a line:
+subprogram body, then just before the @code{begin} of the enclosing
+subprogram, there is a comment line and a blank line:
-@smallexample
- -- @r{Start of processing for @var{Enclosing_Subprogram}}
+@smallexample @c adanocomment
+@group
+ -- Start of processing for @var{Enclosing_Subprogram}
- begin
+ begin
+ ...
+ end @var{Enclosing_Subprogram};
+@end group
@end smallexample
@end itemize
@@ -581,36 +754,44 @@ subprogram, there is a line:
@node Packages, Program Structure, Subprograms, Top
@section Packages and Visibility Rules
@c -------------------------------------------------------------------------
+@cindex Packages
@itemize @bullet
-
@item
All program units and subprograms have their name at the end:
-@smallexample
+@smallexample @c adanocomment
+@group
package P is
...
end P;
+@end group
@end smallexample
@item
-We will use the style of @samp{use}-ing @samp{with}-ed packages, with
+We will use the style of @code{use}-ing @code{with}-ed packages, with
the context clauses looking like:
+@cindex @code{use} clauses
-@smallexample
+@smallexample @c adanocomment
+@group
with A; use A;
with B; use B;
+@end group
@end smallexample
@item
Names declared in the visible part of packages should be
-unique, to prevent name clashes when the packages are @samp{use}d.
+unique, to prevent name clashes when the packages are @code{use}d.
+@cindex Name clash avoidance
-@smallexample
+@smallexample @c adanocomment
+@group
package Entity is
type Entity_Kind is ...;
- ...
+ ...
end Entity;
+@end group
@end smallexample
@item
@@ -619,28 +800,49 @@ should be the first thing in a @syntax{program_unit}.
@end itemize
@c -------------------------------------------------------------------------
-@node Program Structure,, Packages, Top
+@node Program Structure, GNU Free Documentation License, Packages, Top
@section Program Structure and Compilation Issues
@c -------------------------------------------------------------------------
+@cindex Program structure
@itemize @bullet
@item
Every GNAT source file must be compiled with the @option{-gnatg}
-switch to check the coding style (Note that you should look at
+switch to check the coding style.
+(Note that you should look at
@file{style.adb} to see the lexical rules enforced by
@option{-gnatg}).
+@cindex @option{-gnatg} option (to gcc)
+@cindex @file{style.adb} file
@item
Each source file should contain only one compilation unit.
@item
-Filenames should be 8 characters or less followed by the @samp{.adb}
-extension for a body or @samp{.ads} for a spec.
+Filenames should be 8 or fewer characters, followed by the @code{.adb}
+extension for a body or @code{.ads} for a spec.
+@cindex File name length
@item
-Unit names should be distinct when krunched to 8 characters
+Unit names should be distinct when ``krunch''ed to 8 characters
(see @file{krunch.ads}) and the filenames should match the unit name,
except that they are all lower case.
+@cindex @file{krunch.ads} file
@end itemize
+
+@c **********************************
+@c * GNU Free Documentation License *
+@c **********************************
+@include fdl.texi
+@c GNU Free Documentation License
+@cindex GNU Free Documentation License
+
+@node Index,,GNU Free Documentation License, Top
+@unnumberedsec Index
+
+@printindex cp
+
+@contents
+
@bye