Ada LRM
Ada LRM
June 1995
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
1 Introduction
1.1 Scope of the Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–1
1.1.1 Extent of the Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–1
1.1.2 Conformity of an Implementation With the Standard . . . . . . 1–3
1.2 Structure of the Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–3
1.3 Design Goals and Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–4
1.4 Language Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–5
1.4a DEC Ada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–9
1.5 Method of Description and Syntax Notation . . . . . . . . . . . . . . . . 1–9
1.6 Classification of Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–11
2 Lexical Elements
2.1 Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–1
2.2 Lexical Elements, Separators, and Delimiters . . . . . . . . . . . . . . . 2–4
2.3 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–6
2.4 Numeric Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–6
2.4.1 Decimal Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–7
2.4.2 Based Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–7
2.5 Character Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–8
2.6 String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–9
2.7 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–10
2.8 Pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–10
2.9 Reserved Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–13
2.10 Allowable Replacements of Characters . . . . . . . . . . . . . . . . . . . . . 2–14
iii
3 Declarations and Types
3.1 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–1
3.2 Objects and Named Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–3
3.2.1 Object Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–4
3.2.2 Number Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–7
3.3 Types and Subtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–7
3.3.1 Type Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–9
3.3.2 Subtype Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–10
3.3.3 Classification of Operations . . . . . . . . . . . . . . . . . . . . . . . . . . 3–12
3.4 Derived Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–13
3.5 Scalar Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–16
3.5.1 Enumeration Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–17
3.5.2 Character Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–19
3.5.3 Boolean Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–19
3.5.4 Integer Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–19
3.5.5 Operations of Discrete Types . . . . . . . . . . . . . . . . . . . . . . . . . 3–22
3.5.6 Real Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–25
3.5.7 Floating Point Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–26
3.5.7a Pragma Float_Representation . . . . . . . . . . . . . . . . . . . . . . . . 3–30
3.5.7b Pragma Long_Float (OpenVMS Systems Only) . . . . . . . . . . . 3–32
3.5.8 Operations of Floating Point Types . . . . . . . . . . . . . . . . . . . . 3–33
3.5.9 Fixed Point Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–36
3.5.10 Operations of Fixed Point Types . . . . . . . . . . . . . . . . . . . . . . 3–39
3.6 Array Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–41
3.6.1 Index Constraints and Discrete Ranges . . . . . . . . . . . . . . . . . 3–44
3.6.2 Operations of Array Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–46
3.6.3 The Type String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–48
3.7 Record Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–48
3.7.1 Discriminants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–50
3.7.2 Discriminant Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–52
3.7.3 Variant Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–55
3.7.4 Operations of Record Types . . . . . . . . . . . . . . . . . . . . . . . . . . 3–56
3.8 Access Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–57
3.8.1 Incomplete Type Declarations . . . . . . . . . . . . . . . . . . . . . . . . 3–59
3.8.2 Operations of Access Types . . . . . . . . . . . . . . . . . . . . . . . . . . 3–61
3.9 Declarative Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–62
iv
4 Names and Expressions
4.1 Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–1
4.1.1 Indexed Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–2
4.1.2 Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–3
4.1.3 Selected Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–4
4.1.4 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–7
4.2 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–9
4.3 Aggregates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–10
4.3.1 Record Aggregates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–11
4.3.2 Array Aggregates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–12
4.4 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–15
4.5 Operators and Expression Evaluation . . . . . . . . . . . . . . . . . . . . . 4–16
4.5.1 Logical Operators and Short-circuit Control Forms . . . . . . . . 4–18
4.5.2 Relational Operators and Membership Tests . . . . . . . . . . . . . 4–19
4.5.3 Binary Adding Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–22
4.5.4 Unary Adding Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–23
4.5.5 Multiplying Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–23
4.5.6 Highest Precedence Operators . . . . . . . . . . . . . . . . . . . . . . . . 4–27
4.5.7 Accuracy of Operations with Real Operands . . . . . . . . . . . . . 4–28
4.6 Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–30
4.7 Qualified Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–33
4.8 Allocators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–34
4.9 Static Expressions and Static Subtypes . . . . . . . . . . . . . . . . . . . . 4–37
4.10 Universal Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–39
5 Statements
5.1 Simple and Compound Statements—Sequences of Statements . . 5–1
5.2 Assignment Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–3
5.2.1 Array Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–4
5.3 If Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–5
5.4 Case Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–6
5.5 Loop Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–8
5.6 Block Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–10
5.7 Exit Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–11
5.8 Return Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–12
5.9 Goto Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–13
v
6 Subprograms
6.1 Subprogram Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–1
6.2 Formal Parameter Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–3
6.3 Subprogram Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–5
6.3.1 Conformance Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–7
6.3.2 Inline Expansion of Subprograms . . . . . . . . . . . . . . . . . . . . . 6–8
6.4 Subprogram Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–9
6.4.1 Parameter Associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–11
6.4.2 Default Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–12
6.5 Function Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6–13
6.6 Parameter and Result Type Profile—Overloading of
Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......... 6–14
6.7 Overloading of Operators . . . . . . . . . . . . . . . . . . . . . .......... 6–15
7 Packages
7.1 Package Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–1
7.2 Package Specifications and Declarations . . . . . . . . . . . . . . . . . . . 7–2
7.3 Package Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–3
7.4 Private Type and Deferred Constant Declarations . . . . . . . . . . . . 7–5
7.4.1 Private Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–6
7.4.2 Operations of a Private Type . . . . . . . . . . . . . . . . . . . . . . . . . 7–7
7.4.3 Deferred Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–10
7.4.4 Limited Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7–11
7.5 Example of a Table Management Package . . . . . . . . . . . . . . . . . . 7–13
7.6 Example of a Text Handling Package . . . . . . . . . . . . . . . . . . . . . . 7–15
8 Visibility Rules
8.1 Declarative Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–1
8.2 Scope of Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–3
8.3 Visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–4
8.4 Use Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–8
8.5 Renaming Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–10
8.6 The Package Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8–13
8.7 The Context of Overload Resolution . . . . . . . . . . . . . . . . . . . . . . . 8–14
vi
9 Tasks
9.1 Task Specifications and Task Bodies . . . . . . . . . . . . . . . . . . . . . . 9–2
9.2 Task Types and Task Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–4
9.3 Task Execution—Task Activation . . . . . . . . . . . . . . . . . . . . . . . . . 9–6
9.4 Task Dependence—Termination of Tasks . . . . . . . . . . . . . . . . . . . 9–8
9.5 Entries, Entry Calls, and Accept Statements . . . . . . . . . . . . . . . . 9–10
9.6 Delay Statements, Duration, and Time . . . . . . . . . . . . . . . . . . . . 9–14
9.7 Select Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–17
9.7.1 Selective Waits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–17
9.7.2 Conditional Entry Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–19
9.7.3 Timed Entry Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–20
9.8 Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–21
9.8a Pragma Time_Slice (OpenVMS and Digital UNIX Systems
Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–23
9.8b Pragma Passive (OpenVMS Alpha and Digital UNIX Only) . . . . 9–24
9.9 Task and Entry Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–25
9.10 Abort Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–26
9.11 Shared Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–28
9.12 Example of Tasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9–31
9.12a Task Entries and OpenVMS Asynchronous System Traps
(OpenVMS Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . .... 9–33
11 Exceptions
11.1 Exception Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–1
11.2 Exception Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–5
11.3 Raise Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–6
11.4 Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–7
11.4.1 Exceptions Raised During the Execution of Statements . . . . . 11–7
vii
11.4.2 Exceptions Raised During the Elaboration of
Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–11
11.5 Exceptions Raised During Task Communication . . . . . . . . . . . . . 11–12
11.6 Exceptions and Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–13
11.7 Suppressing Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11–15
12 Generic Units
12.1 Generic Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–1
12.1.1 Generic Formal Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–4
12.1.2 Generic Formal Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–5
12.1.3 Generic Formal Subprograms . . . . . . . . . . . . . . . . . . . . . . . . 12–7
12.1a Pragma INLINE_GENERIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–8
12.1b Pragma SHARE_GENERIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–9
12.2 Generic Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–10
12.3 Generic Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–12
12.3.1 Matching Rules for Formal Objects . . . . . . . . . . . . . . . . . . . . 12–15
12.3.2 Matching Rules for Formal Private Types . . . . . . . . . . . . . . . 12–16
12.3.3 Matching Rules for Formal Scalar Types . . . . . . . . . . . . . . . . 12–17
12.3.4 Matching Rules for Formal Array Types . . . . . . . . . . . . . . . . 12–17
12.3.5 Matching Rules for Formal Access Types . . . . . . . . . . . . . . . . 12–18
12.3.6 Matching Rules for Formal Subprograms . . . . . . . . . . . . . . . 12–19
12.4 Example of a Generic Package . . . . . . . . . . . . . . . . . . . . . . . . . . . 12–21
viii
13.7a.2 Enumeration Type for Identifying Type Classes . . . . . . . . . . . 13–38
13.7a.3 Non-Ada Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–39
13.7a.4 Hardware-Oriented Types and Functions . . . . . . . . . . . . . . . . 13–41
13.7a.5 Convenient Unsigned Longword Declarations . . . . . . . . . . . . 13–43
13.7a.6 Global Symbol Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–43
13.7b System-Specific DEC Ada Additions to the Package System . . . . 13–45
13.7b.1 VAX Floating Point Types (OpenVMS Systems Only) . . . . . . 13–45
13.7b.2 IEEE Floating Point Types (OpenVMS Alpha and Digital
UNIX Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–45
13.7b.3 OpenVMS Asynchronous-System-Trap-Related Declarations
(OpenVMS Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–46
13.7b.4 VAX Processor and Device Register Operations (OpenVMS
VAX Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–47
13.7b.5 Interlocked-Instruction Procedures (OpenVMS and Digital
UNIX Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–48
13.7b.6 Atomic Procedures (Alpha Systems Only) . . . . . . . . . . . . . . . 13–49
13.7b.7 Interlocked-Queue-Instruction Procedures (OpenVMS
Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–51
13.8 Machine Code Insertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–53
13.9 Interface to Other Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–54
13.9a DEC Ada Import and Export Pragmas . . . . . . . . . . . . . . . . . . . . . 13–57
13.9a.1 Importing and Exporting Subprograms . . . . . . . . . . . . . . . . . 13–60
13.9a.1.1 Importing Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . 13–60
13.9a.1.2 Attribute for Optional Parameters . . . . . . . . . . . . . . . . . . 13–66
13.9a.1.3 Exporting Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . 13–68
13.9a.1.4 Controlling the Passing Mechanisms for Parameters and
Function Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–73
13.9a.2 Importing and Exporting Objects . . . . . . . . . . . . . . . . . . . . . . 13–76
13.9a.2.1 Importing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–77
13.9a.2.2 Exporting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–78
13.9a.2.3 Importing and Exporting Objects with the Pragma
Common_Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–80
13.9a.3 Importing and Exporting Exceptions (OpenVMS Systems
Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–83
13.9a.3.1 Importing Exceptions (OpenVMS Systems Only) . . . . . . . 13–83
13.9a.3.2 Exporting Exceptions (OpenVMS Systems Only) . . . . . . . 13–85
13.9b The Pragma Interface_Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–86
13.10 Unchecked Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13–88
13.10.1 Unchecked Storage Deallocation . . . . . . . . . . . . . . . . . . . . . . 13–89
13.10.2 Unchecked Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . 13–90
ix
14 Input-Output
14.1 External Files and File Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 14–2
14.1a File Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–6
14.1b Specification of the FORM Parameter in DEC Ada . . . . . . . . . . . 14–7
14.1b.1 The FORM Parameter on OpenVMS Systems . . . . . . . . . . . . 14–7
14.1b.2 The FORM Parameter on Digital UNIX Systems . . . . . . . . . . 14–8
14.2 Sequential and Direct Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–11
14.2.1 File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–12
14.2.2 Sequential Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–16
14.2.3 Specification of the Package Sequential_IO . . . . . . . . . . . . . . 14–17
14.2.4 Direct Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–18
14.2.5 Specification of the Package Direct_IO . . . . . . . . . . . . . . . . . . 14–20
14.2a Relative and Indexed Files (OpenVMS Systems Only) . . . . . . . . . 14–22
14.2a.1 File Management (OpenVMS Systems Only) . . . . . . . . . . . . . 14–24
14.2a.2 Relative Input-Output (OpenVMS Systems Only) . . . . . . . . . 14–25
14.2a.3 Specification of the Package Relative_IO (OpenVMS Systems
Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–28
14.2a.4 Indexed Input-Output (OpenVMS Systems Only) . . . . . . . . . 14–30
14.2a.5 Specification of the Package Indexed_IO (OpenVMS Systems
Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–32
14.2b Mixed-Type Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–34
14.2b.1 File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–35
14.2b.2 Item Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–36
14.2b.3 Sequential Mixed Input-Output . . . . . . . . . . . . . . . . . . . . . . . 14–39
14.2b.4 Specification of the Package Sequential_Mixed_IO . . . . . . . . 14–40
14.2b.5 Direct Mixed Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . 14–42
14.2b.6 Specification of the Package Direct_Mixed_IO . . . . . . . . . . . . 14–43
14.2b.7 Relative Mixed Input-Output (OpenVMS Systems Only) . . . . 14–45
14.2b.8 Specification of the Package Relative_Mixed_IO (OpenVMS
Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–48
14.2b.9 Indexed Mixed Input-Output (OpenVMS Systems Only) . . . . 14–50
14.2b.10 Specification of the Package Indexed_Mixed_IO
(OpenVMS Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–53
14.3 Text Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–55
14.3.1 File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–58
14.3.2 Default Input and Output Files . . . . . . . . . . . . . . . . . . . . . . . 14–58
14.3.3 Specification of Line and Page Lengths . . . . . . . . . . . . . . . . . 14–59
14.3.4 Operations on Columns, Lines, and Pages . . . . . . . . . . . . . . . 14–61
14.3.5 Get and Put Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–65
14.3.6 Input-Output of Characters and Strings . . . . . . . . . . . . . . . . 14–68
14.3.7 Input-Output for Integer Types . . . . . . . . . . . . . . . . . . . . . . . 14–69
14.3.8 Input-Output for Real Types . . . . . . . . . . . . . . . . . . . . . . . . . 14–72
x
14.3.9 Input-Output for Enumeration Types . . . . . . . . . . . . . . . . . . . 14–75
14.3.10 Specification of the Package Text_IO . . . . . . . . . . . . . . . . . . . 14–77
14.4 Exceptions in Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–82
14.5 Specification of the Package IO_Exceptions . . . . . . . . . . . . . . . . . 14–85
14.5a Specification of the Package Aux_IO_Exceptions (OpenVMS
Systems Only) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–85
14.6 Low Level Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–85
14.7 Example of Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14–86
14.7a Example of Additional DEC Ada Input-Output . . . . . . . . . . . . . . 14–87
D Glossary
E Syntax Summary
F Implementation-Dependent Characteristics
F.1 Implementation-Dependent Pragmas . . . . . . . . . . . . . . . . . . . . . . F–1
F.2 Implementation-Dependent Attributes . . . . . . . . . . . . . . . . . . . . . F–3
F.3 Specification of the Package System . . . . . . . . . . . . . . . . . . . . . . F–3
F.4 Restrictions on Representation Clauses . . . . . . . . . . . . . . . . . . . . F–12
F.5 Restrictions on Unchecked Type Conversions . . . . . . . . . . . . . . . . F–13
F.6 Conventions for Implementation-Generated Names
Denoting Implementation-Dependent Components in Record
Representation Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... F–13
F.7 Interpretation of Expressions Appearing in Address Clauses . ... F–13
F.8 Implementation-Dependent Characteristics of Input-Output
Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... F–14
F.8.1 DEC Ada Input-Output Packages on OpenVMS Systems ... F–15
F.8.1.1 Interpretation of the FORM Parameter on OpenVMS
Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... F–15
F.8.1.2 Input-Output Exceptions on OpenVMS Systems . . . . ... F–16
xi
F.8.2 Input-Output Packages on Digital UNIX Systems . . . . . . . . . F–17
F.8.2.1 Interpretation of the FORM Parameter on Digital UNIX
Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F–18
F.8.2.2 Input-Output Exceptions on Digital UNIX Systems . . . . . F–21
F.9 Other Implementation Characteristics . . . . . . . . . . . . . . . . . . . . . F–21
F.9.1 Definition of a Main Program . . . . . . . . . . . . . . . . . . . . . . . . F–22
F.9.2 Values of Integer Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . F–23
F.9.3 Values of Floating Point Attributes . . . . . . . . . . . . . . . . . . . . F–23
F.9.3.1 F_floating Characteristics . . . . . . . . . . . . . . . . . . . . . . . . F–24
F.9.3.2 D_floating Characteristics . . . . . . . . . . . . . . . . . . . . . . . . F–25
F.9.3.3 G_floating Characteristics . . . . . . . . . . . . . . . . . . . . . . . . F–26
F.9.3.4 H_floating Characteristics . . . . . . . . . . . . . . . . . . . . . . . . F–27
F.9.3.5 IEEE Single Float Characteristics . . . . . . . . . . . . . . . . . . F–28
F.9.3.6 IEEE Double Float Characteristics . . . . . . . . . . . . . . . . . F–29
F.9.4 Attributes of Type DURATION . . . . . . . . . . . . . . . . . . . . . . . F–29
F.9.5 Implementation Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F–30
Index
Figures
1 Documentation Reading Path for Related Documents . . . . . . xiv
2 Documentation Reading Path for DEC Ada
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
xii
Preface
The entire text of the Reference Manual for the Ada Programming Language
(ANSI/MIL-STD-1815A-1983, ISO/8652-1987) is reprinted in this manual. In
addition, this manual contains DEC Ada implementation information and
Digital-supplied supplementary examples and text. The Digital-supplied
information covers DEC Ada implementations across a number of systems.
Information common to all systems is identified as DEC Ada information.
System-specific information is identified with the name of the system to which
it applies.
DEC Ada information appears in chapters 1, 2, 3, 4, 6, 9, 10, 11, 12, 13, and 14,
Annexes A, B, and C, and Appendices D and F. Appendix G, added by Digital,
lists further interpretations of the standard Ada language that have been made
between the publication of the standard and the publication of this manual.
Footnotes referring to that appendix appear throughout this manual.
Intended Audience
This manual is intended for all programmers who are designing or
implementing applications using Ada. Readers should understand the
concepts of programming in Ada and should have some familiarity with the
system on which their Ada compiler is running.
xiii
Figure 1 Documentation Reading Path for Related Documents
Operating System
Ada Language
For introductory or
tutorial Ada language Commercial
information Ada
Textbooks
ZK−6003A−GE
xiv
Figure 2 Documentation Reading Path for DEC Ada Documentation
DEC Ada
DEC Ada
Developing and
compiling Developing
Ada
Programs
DEC Ada
Implementation and
run−time details Run−Time
Reference
Manual
DEC Ada
Designing and imple−
menting applications Language
Reference
Manual
DEC Ada
Installing
Installation
Guide
ZK−5349A−1−GE
xv
Document Structure
This manual has the following structure:
• Chapter 1 contains a description of the Ada language standard, a language
overview, a characterization of DEC Ada, and a description of the syntax
notation.
• Chapter 2 provides detailed information on the lexical elements, and notes
the DEC Ada implementation of the Latin-1 character set.
• Chapter 3 describes Ada types and the rules for declaring constants,
variables, and named numbers. It gives the additional DEC Ada integer
and floating point types, and describes the DEC Ada pragmas FLOAT_
REPRESENTATION and LONG_FLOAT.
• Chapter 4 gives the rules for names and expressions.
• Chapter 5 gives the general rules that apply to all Ada statements, as well
as the syntax and semantics of most of those statements.
• Chapter 6 gives the rules relating to subprograms, and notes the DEC Ada
implementation of the pragma INLINE.
• Chapter 7 gives the rules relating to packages.
• Chapter 8 gives the rules defining the scope of declarations, as well as the
rules defining the visibility of identifiers at various points in the text of a
program.
• Chapter 9 explains Ada tasks. It also notes the DEC Ada implementation
of the pragma SHARED and describes the DEC Ada pragmas TIME_
SLICE and VOLATILE, as well as the DEC Ada pragma and attribute
AST_ENTRY.
• Chapter 10 explains the overall structure of programs and the facilities for
separate compilation.
• Chapter 11 defines the facilities for dealing with errors or exceptions that
arise during program execution. It notes the DEC Ada treatment of the
pragma SUPPRESS and presents the DEC Ada pragma SUPPRESS_ALL.
• Chapter 12 explains the use of generic units and the process of
instantiation. It also presents the DEC Ada pragmas INLINE_GENERIC
and SHARE_GENERIC.
xvi
• Chapter 13 describes representation clauses and certain DEC Ada features
for systems programming. It describes the DEC Ada interpretations of
the pragma PACK, the attributes SIZE, STORAGE_SIZE, and SMALL,
and presents the DEC Ada pragmas COMPONENT_ALIGNMENT, MAIN_
STORAGE, and TASK_STORAGE.
Chapter 13 also gives the DEC Ada additions to the package SYSTEM,
the DEC Ada interpretations of the representation attributes ADDRESS
and SIZE, and describes the DEC Ada representation attributes BIT and
MACHINE_SIZE.
Finally, chapter 13 presents the DEC Ada interpretation of the pragma
INTERFACE and describes the DEC Ada pragmas IMPORT_FUNCTION,
IMPORT_PROCEDURE, IMPORT_VALUED_PROCEDURE, INTERFACE_
NAME, EXPORT_FUNCTION, EXPORT_PROCEDURE, EXPORT_
VALUED_PROCEDURE, COMMON_OBJECT, IMPORT_OBJECT,
EXPORT_OBJECT, PSECT_OBJECT, IMPORT_EXCEPTION, and
EXPORT_EXCEPTION.
• Chapter 14 gives detailed information on the standard input-output
packages (SEQUENTIAL_IO, DIRECT_IO, and TEXT_IO). It also presents
the DEC Ada input-output packages (RELATIVE_IO, INDEXED_IO,
SEQUENTIAL_MIXED_IO, RELATIVE_MIXED_IO, INDEXED_
MIXED_IO, and DIRECT_MIXED_IO) and the DEC Ada package AUX_
IO_EXCEPTIONS.
• Annex A summarizes the language attributes.
• Annex B summarizes all pragmas and defines the standard pragmas LIST,
OPTIMIZE, and PAGE. It also defines the DEC Ada pragmas IDENT and
TITLE.
• Annex C presents the specification of the package STANDARD.
• Appendix D is a glossary of Ada terms. It is not part of the standard
definition of the Ada language.
• Appendix E contains a syntax summary of the Ada language. It is not part
of the standard definition of the Ada language.
• Appendix F lists the DEC Ada implementation-dependent characteristics.
It is not part of the standard definition of the Ada language.
• Appendix G presents summaries of Ada language interpretations made or
recommended between the publication of the Reference Manual for the Ada
Programming Language and the publication of this edition of the DEC Ada
Language Reference Manual. It is not part of the standard definition of the
Ada language.
xvii
Conventions
This manual uses the conventions described in section 1.5. The Ada language
syntax is described using a simple variant of Backus-Naur-Form.
Colored print distinguishes DEC Ada insertions in hardcopy versions of this
manual; shading distinguishes DEC Ada insertions in online versions.
DEC Ada is available on a number of systems. The following abbreviated
terms are used to refer to those systems throughout this manual.
System
abbreviation Specific systems it refers to
OpenVMS VMS
OpenVMS VAX
OpenVMS Alpha
Alpha OpenVMS Alpha
Digital UNIX® Alpha
Digital UNIX Digital UNIX Alpha
xviii
1
Introduction
1
See also Appendix G, AI-00325.
1 The text of a program consists of the texts of one or more compilations. The
text of a compilation is a sequence of lexical elements, each composed of
characters; the rules of composition are given in this chapter. Pragmas, which
provide certain information for the compiler, are also described in this chapter.
2 References: character 2.1, compilation 10.1, lexical element 2.2, pragma 2.8
2
See also Appendix G, AI-00866.
The following names are used when referring to the Latin-1 special characters:
delimiter name
=> arrow
.. double dot
** double star, exponentiate
:= assignment (pronounced: ‘‘becomes’’)
/= inequality (pronounced: ‘‘not equal’’)
>= greater than or equal
<= less than or equal
<< left label bracket
>> right label bracket
<> box
2.3 Identifiers
1 Identifiers are used as names and also as reserved words.
2 identifier ::=
letter {[underline] letter_or_digit}
letter_or_digit ::= letter | digit
letter ::= upper_case_letter | lower_case_letter
3 All characters of an identifier are significant, including any underline character
inserted between a letter or digit and an adjacent letter or digit. Identifiers
differing only in the use of corresponding upper and lower case letters are
considered as the same.
4 Examples:
COUNT X get_symbol Ethelyn Marion
SNOBOL_4 X1 PageCount STORE_NEXT_ITEM
Note:
5 No space is allowed within an identifier since a space is a separator.
6 References: digit 2.1, lower case letter 2.1, name 4.1, reserved word 2.9, separator
2.2, space character 2.1, upper case letter 2.1
By implementing characters as the ISO Latin-1 character set, DEC Ada also
allows the additional 96 characters afforded by the eight-bit representation
(see 2.1).5
3 Examples:
’A’ ’*’ ’’’ ’ ’
4 References: character type 3.5.2, graphic character 2.1, literal 4.2, space character
2.1
3
See also Appendix G, AI-00008.
4
See also Appendix G, AI-00866.
5
See also Appendix G, AI-00866.
2.8 Pragmas
1 A pragma is used to convey information to the compiler. A pragma starts with
the reserved word pragma followed by an identifier that is the name of the
pragma.
2 pragma ::=
pragma identifier [(argument_association
{, argument_association})];
argument_association ::=
[argument_identifier =>] name
| [argument_identifier =>] expression
6
See also Appendix G, AI-00339 and AI-00866.
7
See also Appendix G, AI-00339 and AI-00866.
8
See also Appendix G, AI-00388 and AI-00511.
9
See also Appendix G, AI-00425 and AI-00511.
10
See also Appendix G, AI-00186, AI-00242, AI-00306, AI-00322, and AI-00371.
11
See also Appendix G, AI-00350.
1 This chapter describes the types in the language and the rules for declaring
constants, variables, and named numbers.
3.1 Declarations
1 The language defines several kinds of entities that are declared, either
explicitly or implicitly, by declarations. Such an entity can be a numeric
literal, an object, a discriminant, a record component, a loop parameter, an
exception, a type, a subtype, a subprogram, a package, a task unit, a generic
unit, a single entry, an entry family, a formal parameter (of a subprogram,
entry, or generic subprogram), a generic formal parameter, a named block or
loop, a labeled statement, or an operation (in particular, an attribute or an
enumeration literal; see 3.3.3).
2 There are several forms of declaration. A basic declaration is a form of
declaration defined as follows.
3 basic_declaration ::=
object_declaration | number_declaration
| type_declaration | subtype_declaration
| subprogram_declaration | package_declaration
| task_declaration | generic_declaration
| exception_declaration | generic_instantiation
| renaming_declaration | deferred_constant_declaration
4 Certain forms of declaration always occur (explicitly) as part of a basic
declaration; these forms are discriminant specifications, component
declarations, entry declarations, parameter specifications, generic parameter
declarations, and enumeration literal specifications. A loop parameter
specification is a form of declaration that occurs only in certain forms of loop
statement.
5 The remaining forms of declaration are implicit: the name of a block, the name
of a loop, and a statement label are implicitly declared. Certain operations are
implicitly declared (see 3.3.3).
1
See also Appendix G, AI-00263.
2
See also Appendix G, AI-00308.
3
See also Appendix G,AI-00155, AI-00356, AI-00374, and AI-00426.
4
See also Appendix G, AI-00449.
5
See also Appendix G, AI-00330.
6
See also Appendix G, AI-00138 and AI-00292.
7
See also Appendix G, AI-00367 and AI-00398.
8
See also Appendix G, AI-00138.
9
See also Appendix G, AI-00330 and AI-00430.
10
See also Appendix G, AI-00240.
type T is range L .. R;
5 is, by definition, equivalent to the following declarations:
type integer_type is new predefined_integer_type;
subtype T is integer_type
range integer_type(L) .. integer_type(R);
6 where integer_type is an anonymous type, and where the predefined integer
type is implicitly selected by the implementation, so as to contain the values L
to R inclusive. The integer type declaration is illegal if none of the predefined
integer types satisfies this requirement, excepting universal_integer. The
elaboration of the declaration of an integer type consists of the elaboration of
the equivalent type and subtype declarations.
7 The predefined integer types include the type INTEGER. An implementation
may also have predefined types such as SHORT_INTEGER and LONG_
INTEGER, which have (substantially) shorter and longer ranges, respectively,
than INTEGER. The range of each of these types must be symmetric
about zero, excepting an extra negative value which may exist in some
implementations. The base type of each of these types is the type itself.
DEC Ada provides the following predefined integer types. Additional integer
types are declared in the package SYSTEM. See section 13.7a.4 for more
information.
8 Integer literals are the literals of an anonymous predefined integer type that is
called universal_integer in this reference manual. Other integer types have no
literals. However, for each integer type there exists an implicit conversion that
11
See also Appendix G, AI-00023.
12
See also Appendix G, AI-00267 and AI-00387.
13
See also Appendix G, AI-00234.
14
See also Appendix G, AI-00239.
15
See also Appendix G, AI-00387.
16
See also Appendix G, AI-00205.
The predefined attributes that yield the characteristics of each floating point
type are described in section 3.5.8. Values of these attributes for the DEC Ada
floating point data representations are listed in Appendix F. The DEC Ada run-
time reference manuals also give information on the internal representation of
the DEC Ada floating point types.
9 For each predefined floating point type (consequently also for each type derived
therefrom), a set of safe numbers is defined as follows. The safe numbers have
the same number B of mantissa digits as the model numbers of the type and
have an exponent in the range –E .. +E where E is implementation-defined and
at least equal to the 4*B of model numbers. (Consequently, the safe numbers
include the model numbers.) The rules defining the accuracy of operations
with model and safe numbers are given in section 4.5.7. The safe numbers of a
subtype are those of its base type. 17
10 A floating point type declaration of one of the two forms (that is, with or
without the optional range constraint indicated by the square brackets): 18
type T is digits D [range L .. R];
11 is, by definition, equivalent to the following declarations:
type floating_point_type is new predefined_floating_point_type;
subtype T is floating_point_type digits D
[range floating_point_type(L) .. floating_point_type(R)];
17
See also Appendix G, AI-00217 and AI-00314.
18
See also Appendix G, AI-00023.
19
See also Appendix G, AI-00375.
1 On Alpha systems.
2 On VAX systems.
Digits
specified Representation DEC Ada systems on which it applies
1 .. 6 F_floating All OpenVMS
10 .. 15 G_floating OpenVMS Alpha
16 .. 33 H_floating OpenVMS VAX
20
See also Appendix G, AI-00407.
21
See also Appendix G, AI-00143.
22
See also Appendix G, AI-00023.
23
See also Appendix G, AI-00144 and AI-00471.
24
See also Appendix G, AI-00343.
25
See also Appendix G, AI-00508.
26
See also Appendix G, AI-00145 and AI-00146.
27
See also Appendix G, AI-00146.
29
See also Appendix G, AI-00179 and Section AI-00467.
30
See also Appendix G, AI-00407.
31
See also Appendix G, AI-00148.
32
See also Appendix G, AI-00282.
33
See also Appendix G, AI-00358.
3.7.1 Discriminants
1 A discriminant part specifies the discriminants of a type. A discriminant of
a record is a component of the record. The type of a discriminant must be
discrete.
2 discriminant_part ::=
(discriminant_specification {; discriminant_specification})
discriminant_specification ::=
identifier_list : type_mark [:= expression]
34
See also Appendix G, AI-00007, AI-00319, and AI-00358.
35
See also Appendix G, AI-00014.
36
See also Appendix G, AI-00324.
37
See also Appendix G, AI-00007, AI-00231, and AI-00319.
38
See also Appendix G, AI-00180 and AI-00406.
39
See also Appendix G, AI-00149.
40
See also Appendix G, AI-00430.
1 The rules applicable to the different forms of name and expression, and to
their evaluation, are given in this chapter.
4.1 Names
1 Names can denote declared entities, whether declared explicitly or implicitly
(see 3.1). Names can also denote objects designated by access values;
subcomponents and slices of objects and values; single entries, entry families,
and entries in families of entries. Finally, names can denote attributes of any
of the foregoing.
2 name ::= simple_name
| character_literal | operator_symbol
| indexed_component | slice
| selected_component | attribute
simple_name ::= identifier
prefix ::= name | function_call
3 A simple name for an entity is either the identifier associated with the
entity by its declaration, or another identifier associated with the entity by a
renaming declaration.
4 Certain forms of name (indexed and selected components, slices, and attributes)
include a prefix that is either a name or a function call. If the type of a prefix
is an access type, then the prefix must not be a name that denotes a formal
parameter of mode out or a subcomponent thereof.
5 If the prefix of a name is a function call, then the name denotes a component,
a slice, an attribute, an entry, or an entry family, either of the result of the
function call, or (if the result is an access value) of the object designated by the
result.
6 A prefix is said to be appropriate for a type in either of the following cases:
7 • The type of the prefix is the type considered.
4.1.2 Slices
1 A slice denotes a one-dimensional array formed by a sequence of consecutive
components of a one-dimensional array. A slice of a variable is a variable; a
slice of a constant is a constant; a slice of a value is a value.
2 slice ::= prefix(discrete_range)
3 The prefix of a slice must be appropriate for a one-dimensional array type. The
type of the slice is the base type of this array type. The bounds of the discrete
range define those of the slice and must be of the type of the index; the slice is
a null slice denoting a null array if the discrete range is a null range.
1
See also Appendix G, AI-00016, AI-00187, AI-00412, and AI-00468.
2
See also Appendix G, AI-00016 and AI-00412.
4.1.4 Attributes
1 An attribute denotes a basic operation of an entity given by a prefix.
2 attribute ::= prefix’attribute_designator
attribute_designator ::=
simple_name [(universal_static_expression)]
3
See also Appendix G, AI-00015.
4.2 Literals
1 A literal is either a numeric literal, an enumeration literal, the literal null, or
a string literal. The evaluation of a literal yields the corresponding value.
2 Numeric literals are the literals of the types universal_integer and universal_
real. Enumeration literals include character literals and yield values of the
corresponding enumeration types. The literal null yields a null access value
which designates no objects at all.
3 A string literal is a basic operation that combines a sequence of characters
into a value of a one-dimensional array of a character type; the bounds of this
array are determined according to the rules for positional array aggregates (see
4.3.2). For a null string literal, the upper bound is the predecessor, as given by
the PRED attribute, of the lower bound. The evaluation of a null string literal
raises the exception CONSTRAINT_ERROR if the lower bound does not have a
predecessor (see 3.5.5).
4 The type of a string literal and likewise the type of the literal null must be
determinable solely from the context in which this literal appears, excluding
the literal itself, but using the fact that the literal null is a value of an access
type, and similarly that a string literal is a value of a one-dimensional array
type whose component type is a character type.
5 The character literals corresponding to the graphic characters contained within
a string literal must be visible at the place of the string literal (although these
characters themselves are not used to determine the type of the string literal).
6 Examples:
3.14159_26536 -- a real literal
1_345 -- an integer literal
CLUBS -- an enumeration literal
’A’ -- a character literal
"SOME TEXT" -- a string literal
7 References: access type 3.8, aggregate 4.3, array 3.6, array bound 3.6, array
type 3.6, character literal 2.5, character type 3.5.2, component type 3.3, constraint_
error exception 11.1, designate 3.8, dimension 3.6, enumeration literal 3.5.1, graphic
character 2.1, integer literal 2.4, null access value 3.8, null literal 3.8, numeric literal
2.4, object 3.2.1, real literal 2.4, string literal 2.6, type 3.3, universal_integer type 3.5.4,
universal_real type 3.5.6, visibility 8.3
4
See also Appendix G, AI-00169 and AI-00293.
5
See also Appendix G, AI-00244.
6
See also Appendix G, AI-00190 and AI-00310.
7
See also Appendix G, AI-00177.
8
See also Appendix G, AI-00018, AI-00019, AI-00265, and AI-00313.
4.4 Expressions
1 An expression is a formula that defines the computation of a value.
2 expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
relation ::=
simple_expression [relational_operator simple_expression]
| simple_expression [not] in range
| simple_expression [not] in type_mark
simple_expression ::=
[unary_adding_operator] term {binary_adding_operator term}
term ::= factor {multiplying_operator factor}
factor ::= primary [** primary] | abs primary | not primary
primary ::=
numeric_literal | null | aggregate | string_literal
| name | allocator | function_call | type_conversion
| qualified_expression | (expression)
3 Each primary has a value and a type. The only names allowed as primaries are
named numbers; attributes that yield values; and names denoting objects (the
value of such a primary is the value of the object) or denoting values. Names
that denote formal parameters of mode out are not allowed as primaries;
names of their subcomponents are only allowed in the case of discriminants.
4 The type of an expression depends only on the type of its constituents and
on the operators applied; for an overloaded constituent or operator, the
determination of the constituent type, or the identification of the appropriate
operator, depends on the context. For each predefined operator, the operand
and result types are given in section 4.5.
9
See also Appendix G, AI-00387.
10
See also Appendix G, AI-00426 and AI-00431.
6 A B A and B A or B A xor B
< <= > >= test for any scalar type BOOLEAN
ordering
discrete array type BOOLEAN
4 Equality for the discrete types is equality of the values. For real operands
whose values are nearly equal, the results of the predefined relational operators
are given in section 4.5.7. Two access values are equal either if they designate
the same object, or if both are equal to the null value of the access type.
5 For two array values or two record values of the same type, the left operand is
equal to the right operand if and only if for each component of the left operand
there is a matching component of the right operand and vice versa; and the
values of matching components are equal, as given by the predefined equality
operator for the component type. In particular, two null arrays of the same
type are always equal; two null records of the same type are always equal.
6 For comparing two records of the same type, matching components are those
which have the same component identifier.
7 For comparing two one-dimensional arrays of the same type, matching
components are those (if any) whose index values match in the following
sense: the lower bounds of the index ranges are defined to match, and the
successors of matching indices are defined to match. For comparing two
multidimensional arrays, matching components are those whose index values
match in successive index positions.
8 If equality is explicitly defined for a limited type, it does not extend to
composite types having subcomponents of the limited type (explicit definition of
equality is allowed for such composite types).
9 The ordering operators <, <=, >, and >= that are defined for discrete array
types correspond to lexicographic order using the predefined order relation
of the component type. A null array is lexicographically less than any array
having at least one component. In the case of nonnull arrays, the left operand
is lexicographically less than the right operand if the first component of
the left operand is less than that of the right; otherwise the left operand is
lexicographically less than the right operand only if their first components are
equal and the tail of the left operand is lexicographically less than that of the
right (the tail consists of the remaining components beyond the first and can
be null).
3 For real types, the accuracy of the result is determined by the operand type
(see 4.5.7).
4 If both operands are one-dimensional arrays, the result of the catenation is a
one-dimensional array whose length is the sum of the lengths of its operands,
and whose components comprise the components of the left operand followed
by the components of the right operand. The lower bound of this result is the
lower bound of the left operand, unless the left operand is a null array, in
which case the result of the catenation is the right operand.
5 If either operand is of the component type of an array type, the result of the
catenation is given by the above rules, using in place of this operand an array
having this operand as its only component and having the lower bound of the
index subtype of the array type as its lower bound.
6 The exception CONSTRAINT_ERROR is raised by catenation if the upper
bound of the result exceeds the range of the index subtype, unless the result is
a null array. This exception is also raised if any operand is of the component
type but has a value that does not belong to the component subtype.
3 References: numeric type 3.5, operation 3.3, operator 4.5, predefined operator 4.5,
type 3.3
11
See also Appendix G, AI-00475.
Left Right
operand operand
10 Operator Operation type1 type1 Result type
12
See also Appendix G, AI-00235.
13
See also Appendix G, AI-00387.
Notes:
14 For positive A and B, A/B is the quotient and A rem B is the remainder when
A is divided by B. The following relations are satisfied by the rem operator:
A rem (-B) = A rem B
(-A) rem B = -(A rem B)
15 For any integer K, the following identity holds:
A mod B = (A + K*B) mod B
16 The relations between integer division, remainder, and modulus are illustrated
by the following table:
13 –5 –2 3 –2
14 –5 –2 4 –1
–10 5 –2 0 0
–11 5 –2 –1 4
–12 5 –2 –2 3
–13 5 –2 –3 2
–14 5 –2 –4 1
–10 –5 2 0 0
–11 –5 2 –1 –1
–12 –5 2 –2 –2
–13 –5 2 –3 –3
–14 –5 2 –4 –4
17 References: actual parameter 6.4.1, base type 3.3, declaration 3.1, delta of a fixed
point type 3.5.9, fixed point type 3.5.9, floating point type 3.5.7, generic formal
subprogram 12.1, integer type 3.5.4, numeric type 3.5, numeric_error exception 11.1,
predefined operator 4.5, raising of exceptions 11, renaming declaration 8.5, standard
predefined package 8.6, type conversion 4.6
14
See also Appendix G, AI-00137.
15
See also Appendix G, AI-00407.
16
See also Appendix G, AI-00516.
17
See also Appendix G, AI-00387.
4.8 Allocators
1 The evaluation of an allocator creates an object and yields an access value that
designates the object.
2 allocator ::=
new subtype_indication | new qualified_expression
19
See also Appendix G, AI-00150, AI-00331, and AI-00397.
20
See also Appendix G, AI-00356.
21
See also Appendix G, AI-00294.
22
See also Appendix G, AI-00397.
23
See also Appendix G, AI-00128, AI-00190, and AI-00219.
24
See also Appendix G, AI-00001 and AI-00163.
25
See also Appendix G, AI-00023, AI-00251, and AI-00409.
26
See also Appendix G, AI-00103, AI-00209, and AI-00405.
27
See also Appendix G, AI-00181 and AI-00387.
1
See also Appendix G, AI-00407.
5.3 If Statements
1 An if statement selects for execution one or none of the enclosed sequences
of statements, depending on the (truth) value of one or more corresponding
conditions.
2 if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
condition ::= boolean_expression
3 An expression specifying a condition must be of a boolean type.
4 For the execution of an if statement, the condition specified after if, and any
conditions specified after elsif, are evaluated in succession (treating a final
else as elsif TRUE then), until one evaluates to TRUE or all conditions
are evaluated and yield FALSE. If one condition evaluates to TRUE, then
the corresponding sequence of statements is executed; otherwise none of the
sequences of statements is executed.
2
See also Appendix G, AI-00151.
3
See also Appendix G, AI-00267.
4
See also Appendix G, AI-00006.
1 Subprograms are one of the four forms of program unit, of which programs can
be composed. The other forms are packages, task units, and generic units.
2 A subprogram is a program unit whose execution is invoked by a subprogram
call. There are two forms of subprogram: procedures and functions. A
procedure call is a statement; a function call is an expression and returns a
value. The definition of a subprogram can be given in two parts: a subprogram
declaration defining its calling conventions, and a subprogram body defining
its execution.
3 References: function 6.5, function call 6.4, generic unit 12, package 7, procedure 6.1,
procedure call 6.4, subprogram body 6.3, subprogram call 6.4, subprogram declaration
6.1, task unit 9
1
See also Appendix G, AI-00493.
2
See also Appendix G, AI-00350.
3
See also Appendix G, AI-00200 and AI-00242.
5 References: allow 1.6, compilation 10.1, compilation unit 10.1, declarative item 3.9,
declarative part 3.9, generic subprogram 12.1, generic unit 12 12.1, instantiation 12.3,
library unit 10.1, name 4.1, overloading 6.6 8.7, package specification 7.1, pragma 2.8,
subprogram 6, subprogram body 6.3, subprogram call 6.4
identifier 2.3, operator symbol 6.1, renaming declaration 8.5, string literal 2.6
4
See also Appendix G, AI-00245.
5
See also Appendix G, AI-00024.
6
See also Appendix G, AI-00025 and AI-00396.
1 Packages are one of the four forms of program unit, of which programs can be
composed. The other forms are subprograms, task units, and generic units.
2 Packages allow the specification of groups of logically related entities. In their
simplest form packages specify pools of common object and type declarations.
More generally, packages can be used to specify groups of related entities
including also subprograms that can be called from outside the package, while
their inner workings remain concealed and protected from outside users.
3 References: generic unit 12, program unit 6, subprogram 6, task unit 9, type
declaration 3.3.1
1
See also Appendix G, AI-00232.
2
See also Appendix G, AI-00039, AI-00153, and AI-00384.
3
See also Appendix G, AI-00139 and AI-00154.
4
See also Appendix G, AI-00154.
5
See also Appendix G, AI-00026.
6
See also Appendix G, AI-00155.
7
See also Appendix G, AI-00260.
1 The rules defining the scope of declarations and the rules defining which
identifiers are visible at various points in the text of the program are described
in this chapter. The formulation of these rules uses the notion of a declarative
region.
2 References: declaration 3.1, declarative region 8.1, identifier 2.3, scope 8.2,
visibility 8.3
8.3 Visibility
1 The meaning of the occurrence of an identifier at a given place in the text is
defined by the visibility rules and also, in the case of overloaded declarations,
by the overloading rules. The identifiers considered in this chapter include
any identifier other than a reserved word, an attribute designator, a pragma
identifier, the identifier of a pragma argument, or an identifier given as a
pragma argument. The places considered in this chapter are those where a
lexical element (such as an identifier) occurs. The overloaded declarations
considered in this chapter are those for subprograms, enumeration literals, and
single entries.
2 For each identifier and at each place in the text, the visibility rules determine
a set of declarations (with this identifier) that define possible meanings of an
occurrence of the identifier. A declaration is said to be visible at a given place
in the text when, according to the visibility rules, the declaration defines a
possible meaning of this occurrence. Two cases arise.
3 • The visibility rules determine at most one possible meaning. In such
a case the visibility rules are sufficient to determine the declaration
defining the meaning of the occurrence of the identifier, or in the
absence of such a declaration, to determine that the occurrence is not
legal at the given point.
4 • The visibility rules determine more than one possible meaning. In such
a case the occurrence of the identifier is legal at this point if and only
if exactly one visible declaration is acceptable for the overloading rules
in the given context (see section 6.6 for the rules of overloading and
section 8.7 for the context used for overload resolution).
5 A declaration is only visible within a certain part of its scope; this part starts
at the end of the declaration except in a package specification, in which case
it starts at the reserved word is given after the identifier of the package
specification. (This rule applies, in particular, for implicit declarations.)
6 Visibility is either by selection or direct. A declaration is visible by selection at
places that are defined as follows.
1
See also Appendix G, AI-00286.
2
See also Appendix G, AI-00370.
3
See also Appendix G, AI-00002, AI-00012, and AI-00330.
4
See also Appendix G, AI-00027.
5
See also Appendix G, AI-00286.
6
See also Appendix G, AI-00001.
7
See also Appendix G, AI-00170 and AI-00502.
8
See also Appendix G, AI-00245.
9
See also Appendix G, AI-00192.
10
See also Appendix G, AI-00120.
11
See also Appendix G, AI-00157.
12
See also Appendix G, AI-00193.
13
See also Appendix G, AI-00287.
1 The execution of a program that does not contain a task is defined in terms of
a sequential execution of its actions, according to the rules described in other
chapters of this manual. These actions can be considered to be executed by a
single logical processor.
2 Tasks are entities whose executions proceed in parallel in the following sense.
Each task can be considered to be executed by a logical processor of its own.
Different tasks (different logical processors) proceed independently, except at
points where they synchronize.
3 Some tasks have entries. An entry of a task can be called by other tasks. A
task accepts a call of one of its entries by executing an accept statement for
the entry. Synchronization is achieved by rendezvous between a task issuing
an entry call and a task accepting the call. Some entries have parameters;
entry calls and accept statements for such entries are the principal means of
communicating values between tasks.
4 The properties of each task are defined by a corresponding task unit which
consists of a task specification and a task body. Task units are one of the four
forms of program unit of which programs can be composed. The other forms
are subprograms, packages and generic units. The properties of task units,
tasks, and entries, and the statements that affect the interaction between
tasks (that is, entry call statements, accept statements, delay statements,
select statements, and abort statements) are described in this chapter.
Note:
5 Parallel tasks (parallel logical processors) may be implemented on multicom-
puters, multiprocessors, or with interleaved execution on a single physical
processor. On the other hand, whenever an implementation can detect that
the same effect can be guaranteed if parts of the actions of a given task are
executed by different physical processors acting in parallel, it may choose to
execute them in this way; in such a case, several physical processors implement
a single logical processor.
9–1
6 References : abort statement 9.10, accept statement 9.5, delay statement 9.6, entry
9.5, entry call statement 9.5, generic unit 12, package 7, parameter in an entry call
9.5, program unit 6, rendezvous 9.5, select statement 9.7, subprogram 6, task body 9.1,
task specification 9.1
4
See also Appendix G, AI-00198.
5
See also Appendix G, AI-00167.
6
See also Appendix G, AI-00173.
7
See also Appendix G, AI-00441.
8
See also Appendix G, AI-00287.
9
See also Appendix G, AI-00201 and AI-00464.
10
See also Appendix G, AI-00201.
11
See also Appendix G, AI-00195 and AI-00201.
12
See also Appendix G, AI-00196.
14
See also Appendix G, AI-00030.
15
See also Appendix G, AI-00276 and AI-00444.
9.8 Priorities
1 Each task may (but need not) have a priority, which is a value of the subtype
PRIORITY (of the type INTEGER) declared in the predefined library package
SYSTEM (see 13.7).17 A lower value indicates a lower degree of urgency; the
range of priorities is implementation-defined. A priority is associated with a
task if a pragma18
pragma PRIORITY (static_expression);
16
See also Appendix G, AI-00276.
17
See also Appendix G, AI-00197.
18
See also Appendix G, AI-00031.
19
See also Appendix G, AI-00032 and AI-00288.
9–23 Pragma Time_Slice (OpenVMS and Digital UNIX Systems Only) 9.8a
• The executing task executes for a limited amount of time. On
OpenVMS VAX systems, this time is at most the number of seconds
(approximate elapsed time) specified by the pragma. Then, if other
tasks of the same priority are eligible for execution, the executing task
stops executing, and the task that has been waiting the longest is
selected for execution.
Notes:
On OpenVMS VAX systems, the amount of scheduling overhead needed to
support round-robin task scheduling increases as the value of a time slice
decreases. See the DEC Ada Run-Time Reference Manual for OpenVMS
Systems for the recommended minimum value.
On OpenVMS VAX systems, the DEC Ada predefined package SYSTEM_
RUNTIME_TUNING also has operations that enable time slicing. See the
DEC Ada Run-Time Reference Manual for OpenVMS Systems or the package
specification for more information.
References: allow 1.6, declarative part 3.9, duration 9.6, fixed point type 3.5.9,
library unit 10.1, main program 10.1, pragma 2.8, priority of a task 9.8, static
expression 4.9, subprogram 6, task 9
9.8b Pragma Passive (OpenVMS Alpha and Digital UNIX Only) 9–24
A passive task is a compiler optimization of an (unoptimized) Ada task.
Passive tasks behave exactly as unoptimized Ada tasks but yield dramatic
performance improvements. Not all tasks can be made passive. The best
candidates are tasks that act as servers or as protectors of shared resources.
These tasks commonly consist of a select statement within an infinite loop. A
typical server task accepts an entry call and then loops back to wait for the
next entry call.
If a task does not meet the requirements for a passive task, the task is not
made passive.
For more information on the requirements governing passive tasks, see the
DEC Ada run-time reference manuals.
References: library unit 10.1, pragma 2.8, task 9
20
See also Appendix G, AI-00034.
21
See also Appendix G, AI-00198.
22
See also Appendix G, AI-00446.
23
See also Appendix G, AI-00141.
9–33 Task Entries and OpenVMS Asynchronous System Traps (OpenVMS Systems Only) 9.12a
To connect OpenVMS ASTs with Ada task entries, DEC Ada provides the
following attribute, where E is the name of a single entry of a task:
E’AST_ENTRY Yields a value of the predefined type AST_
HANDLER (declared in the predefined package
SYSTEM) that enables the given entry, E, to be
called when an AST occurs. If the name to which
the attribute applies has not been specified with
the pragma AST_ENTRY, the attribute returns
the value SYSTEM.NO_AST_HANDLER, and no
AST occurs. If the entry is for a task that is not
callable (T’CALLABLE is false), the exception
PROGRAM_ERROR is raised. If an AST occurs for
an entry of a task that is terminated, the program
is erroneous.
E’AST_ENTRY is typically used and generally only useful as an actual
parameter corresponding to the astadr formal parameter of an OpenVMS
system service that provides an AST option.
Example:
with TEXT_IO; use TEXT_IO;
with STARLET; use STARLET;
with CONDITION_HANDLING; use CONDITION_HANDLING;
procedure AST_EXAMPLE is
RETURN_STATUS: COND_VALUE_TYPE;
IO_CHANNEL: CHANNEL_TYPE;
FUNCTION_CODE: FUNCTION_CODE_TYPE;
task AST_HANDLER is
entry RECEIVE_AST (ASTPRM: in INTEGER);
pragma AST_ENTRY (RECEIVE_AST);
end AST_HANDLER;
task body AST_HANDLER is
begin
loop
select
accept RECEIVE_AST(ASTPRM: in INTEGER) do
if ASTPRM = 3 then
PUT_LINE("Received the expected AST parameter");
end if;
end;
or
terminate;
end select;
end loop;
end AST_HANDLER;
9.12a Task Entries and OpenVMS Asynchronous System Traps (OpenVMS Systems Only) 9–34
begin
--
-- Code to initialize the IO_CHANNEL and FUNCTION_CODE
-- variables
--
-- Call the OpenVMS SYS$QIO system service using the
-- DEC Ada package STARLET interface
--
STARLET.QIO(STATUS => RETURN_STATUS,
CHAN => IO_CHANNEL,
FUNC => FUNCTION_CODE,
ASTADR => AST_HANDLER.RECEIVE_AST’AST_ENTRY,
ASTPRM => 3);
...
end AST_EXAMPLE;
...
Note:
Because it depends on the DEC Ada predefined type SYSTEM.AST_
HANDLER, the AST_ENTRY attribute can only be used in a compilation
unit to which the predefined package SYSTEM applies.
References: access type 3.8, actual parameter 6.4 6.4.1, address type 13.7 13.7a.1,
allow 1.6, attribute 4.1.4, callable (predefined attribute) 9.9, discrete type 3.5, entry
9.5, entry call 9.5 9.7.2 9.7.3, entry family 9.5, entry name 9.5, erroneous 1.6, formal
parameter 6.1 6.2, import pragma 13.9a, mode in 6.2, package system 13.7, pragma
import_valued_procedure 13.9a.1.1, pragma interface 13.9, procedure 6, program_error
exception 11.1, rendezvous 9.5, subprogram 6, system.ast_handler 13.7b.3, system.no_
ast_handler 13.7b.3, task specification 9.1, task type 9.2
9–35 Task Entries and OpenVMS Asynchronous System Traps (OpenVMS Systems Only) 9.12a
10
Program Structure and Compilation Issues
1 The overall structure of programs and the facilities for separate compilation
are described in this chapter. A program is a collection of one or more
compilation units submitted to a compiler in one or more compilations. Each
compilation unit specifies the separate compilation of a construct which can
be a subprogram declaration or body, a package declaration or body, a generic
declaration or body, or a generic instantiation. Alternatively this construct can
be a subunit, in which case it includes the body of a subprogram, package, task
unit, or generic unit declared within another compilation unit.
2 References: compilation 10.1, compilation unit 10.1, generic body 12.2, generic
declaration 12.1, generic instantiation 12.3, package body 7.1, package declaration 7.1,
subprogram body 6.3, subprogram declaration 6.1, subunit 10.2, task body 9.1, task
unit 9
1
See also Appendix G, AI-00418.
2
See also Appendix G, AI-00199, AI-00225, and AI-00266.
4
See also Appendix G, AI-00035.
5
See also Appendix G, AI-00289.
6
See also Appendix G, AI-00261.
7
See also Appendix G, AI-00408.
8
See also Appendix G, AI-00200.
9
See also Appendix G, AI-00257.
10
See also Appendix G, AI-00158.
11
See also Appendix G, AI-00354.
12
See also Appendix G, AI-00236, AI-00298, and AI-00355.
1 This chapter defines the facilities for dealing with errors or other exceptional
situations that arise during program execution. Such a situation is called an
exception. To raise an exception is to abandon normal program execution so
as to draw attention to the fact that the corresponding situation has arisen.
Executing some actions, in response to the arising of an exception, is called
handling the exception.
2 An exception declaration declares a name for an exception. An exception can
be raised by a raise statement, or it can be raised by another statement or
operation that propagates the exception. When an exception arises, control
can be transferred to a user-provided exception handler at the end of a block
statement or at the end of the body of a subprogram, package, or task unit.
Note:
In DEC Ada, exceptions are implemented using operating-system-specific and
hardware-specific facilities. The DEC Ada run-time reference manuals describe
Digital’s implementation of Ada exceptions in more detail.
3 References: block statement 5.6, error situation 1.6, exception handler 11.2, name
4.1, package body 7.1, propagation of an exception 11.4.1 11.4.2, raise statement 11.3,
subprogram body 6.3, task body 9.1
1
See also Appendix G, AI-00311, AI-00312, and AI-00387.
2
See also Appendix G, AI-00387.
3
See also Appendix G, AI-00446.
4
See also Appendix G, AI-00455.
5
See also Appendix G, AI-00267.
1
See also Appendix G, AI-00286, AI-00367, and AI-00412.
2
See also Appendix G, AI-00328.
4
See also Appendix G, AI-00237 and AI-00365.
5
See also Appendix G, AI-00037.
6
See also Appendix G, AI-00038.
1
See also Appendix G, AI-00040, AI-00138, and AI-00422.
2
See also Appendix G, AI-00039, AI-00186, AI-00321, and AI-00322.
3
See also Appendix G, AI-00039 and AI-00371.
15 References: address clause 13.5, allow 1.6, body 3.9, component 3.3, declaration
3.1, declarative part 3.9, default expression 3.2.1, deferred constant declaration
7.4, derivable subprogram 3.4, derived type 3.4, entity 3.1, entry 9.5, enumeration
representation clause 13.3, expression 4.4, generic formal type 12.1.2, illegal 1.6,
length clause 13.2, must 1.6, name 4.1, object 3.2, occur immediately within 8.1,
package 7, package specification 7.1, parent type 3.4, pragma 2.8, record representation
clause 13.4, representation attribute 13.7.2 13.7.3, subcomponent 3.3, subprogram 6,
subtype 3.3, subtype declaration 3.3.2, task specification 9.1, task unit 9, type 3.3, type
declaration 3.3.1 extension>
array 3.6, constant 3.2.1, record 3.7, variable 3.2.1, variant 3.7.3
3 The expression must be of some numeric type and is evaluated during the
elaboration of the length clause (unless it is a static expression). The prefix of
the attribute must denote either a type or a first named subtype. The prefix
is called T in what follows. The only allowed attribute designators in a length
5
See also Appendix G, AI-00099.
8
See also Appendix G, AI-00132.
component clause 13.4, component subtype 3.7, object 3.2, packable 13.1, pragma pack
13.1
9
See also Appendix G, AI-00263.
10
See also Appendix G, AI-00336.
11
See also Appendix G, AI-00292 and AI-00379.
12
See also Appendix G, AI-00040 and AI-00138.
On OpenVMS and Digital UNIX systems, all literals are defined in the type
SYSTEM.NAME.
7 pragma STORAGE_UNIT(numeric_literal);
14
See also Appendix G, AI-00201 and AI-00366.
15
See also Appendix G, AI-00305.
16
See also Appendix G, AI-00012 and AI-00015.
8 R.C’POSITION Yields the offset, from the start of the first storage unit
occupied by the record, of the first of the storage units
occupied by C. This offset is measured in storage units.
The value of this attribute is of the type universal_
integer. 18
9 R.C’FIRST_BIT Yields the offset, from the start of the first of the
storage units occupied by C, of the first bit occupied by
C. This offset is measured in bits. The value of this
attribute is of the type universal_integer.
10 R.C’LAST_BIT Yields the offset, from the start of the first of the
storage units occupied by C, of the last bit occupied by
C. This offset is measured in bits. The value of this
attribute is of the type universal_integer.
11 For any access type or subtype T:
12 T’STORAGE_SIZE Yields the total number of storage units reserved for
the collection associated with the base type of T. The
value of this attribute is of the type universal_integer.
13 For any task type or task object T:
17
See also Appendix G, AI-00258.
18
See also Appendix G, AI-00362 and AI-00503.
19
See also Appendix G, AI-00263.
20
See also Appendix G, AI-00263.
/*
* C routine expects a pointer to an integer rather
* than an integer; causes a system error
*/
call_c (int_ptr)
int *int_ptr;
{
return *int_ptr * 2;
}
13.7b.2 IEEE Floating Point Types (OpenVMS Alpha and Digital UNIX
Systems Only)
DEC Ada declares two floating point types in the package SYSTEM. These
types correspond to the two IEEE floating point data representations: IEEE
single float and IEEE double float.
type IEEE_SINGLE_FLOAT is
implementation_defined;
type IEEE_DOUBLE_FLOAT is
implementation_defined;
These types have all of the properties of floating types in general (operators,
attributes, implicit conversion of real literals, and so on). See section 3.5.7 and
the DEC Ada run-time reference manuals for explanations of the IEEE floating
point types and type representations.
13–47 VAX Processor and Device Register Operations (OpenVMS VAX Systems Only) 13.7b.4
Each READ_REGISTER and WRITE_REGISTER operation is performed by a
single machine instruction and is not affected by any compiler optimizations.
Use of these operations is the only safe method for reading or writing a device
register. These operations can also be used to read or write a variable in
shared memory although use of the pragma SHARED is the preferred method
of doing so.
References: exception 11, exception handling 11.4, function 6.1, integer type 3.5.4,
procedure 6.1, system.unsigned_byte type 13.7a.4, system.unsigned_word type 13.7a.4,
system.unsigned_longword type 13.7a.4, variable 3.2.1 3.7.3
13.7b.5 Interlocked-Instruction Procedures (OpenVMS and Digital UNIX Systems Only) 13–48
• SET_INTERLOCKED is equivalent to the VAX Branch on Bit Set and Set
Interlocked (BBSSI) instruction
• ADD_INTERLOCKED is equivalent to the VAX Add Aligned Word
Interlocked (ADAWI) instruction.
These instructions interlock memory accesses and provide a means for
synchronizing access to shared memory across processors.
The CLEAR_INTERLOCKED and SET_INTERLOCKED procedures clear or
set a single bit and return the previous value of the bit.
The ADD_INTERLOCKED procedure adds two signed-word integers (ADDEND
and AUGEND). SIGN is assigned the following integer result:
–1 if the new value of AUGEND is negative
0 if AUGEND is zero
+1 if AUGEND is positive
The type ALIGNED_WORD, used in the ADD_INTERLOCKED pro-
cedure, specifies a word-sized integer that is word-aligned (the type
STANDARD.SHORT_INTEGER is a word-sized integer that is byte-aligned).
For more information on the use of these operations, see the DEC Ada run-time
reference manuals..
References: boolean predefined type 3.5.3, integer type 3.5.4, procedure 6.1, type 3.3,
short_integer predefined type 3.5.4
5 Example:
package FORT_LIB is
function SQRT(X : FLOAT) return FLOAT;
function EXP (X : FLOAT) return FLOAT;
private
pragma INTERFACE(FORTRAN, SQRT);
pragma INTERFACE(FORTRAN, EXP);
end FORT_LIB;
13–73 Controlling the Passing Mechanisms for Parameters and Function Results 13.9a.1.4
DESCRIPTOR On OpenVMS systems, specifies that the
address of a descriptor is passed or returned.
The descriptor contains the address of the
value of the actual parameter or function
result, plus additional information about
the parameter or function result. The
descriptor may include a class, specified
with the following form:
DESCRIPTOR[([CLASS =>] class_name)]
If the class name is omitted, DEC Ada supplies
defaults based on the type.
The possible class names and their meanings
follow. Note the following definitions:
A bit string is any one-dimensional array
of a discrete type whose components occupy
successive single bits and are unsigned.
A bit array is any array whose components are
not byte aligned, yet which is also not a bit
string.
A string is any array of a discrete type whose
components occupy successive, unsigned bytes.
Ada descriptor
class name Used for
UBS an unaligned bit string
UBSB an unaligned bit string with arbitrary bounds
UBA an unaligned bit array
S a string; also a scalar or access type parameter
SB a string with arbitrary bounds
A a contiguous array
NCA a noncontiguous array
13.9a.1.4 Controlling the Passing Mechanisms for Parameters and Function Results 13–74
To determine the default mechanisms chosen by the DEC Ada compiler, see the
compiler-generated compilation notes, as follows:
• On OpenVMS systems, the compilation notes are available when the
/WARNINGS=COMPILATION_NOTES qualifier is in effect during a
compilation. See Developing Ada Programs on OpenVMS Systems for more
information.
• On Digital UNIX systems, the compilation notes are available during a
compilation when an ADAERRFLAGS or ADALISFLAGS environment
variable is defined with a string that includes the letter c. See Developing
Ada Programs on DEC OSF/1 Systems for more information.
Examples:
procedure P (X : STRING);
pragma INTERFACE(C, P);
pragma IMPORT_PROCEDURE (P, MECHANISM => DESCRIPTOR (A));
In the preceding example, the arguments given for the pragma IMPORT_
PROCEDURE indicate that the DESCRIPTOR mechanism and the A
descriptor class are to be used to pass the formal parameter X.
type BIT_STRING is array (1 .. 32) of BOOLEAN;
pragma PACK(BIT_STRING);
function F (Y : BIT_STRING) return INTEGER;
pragma INTERFACE (C, F);
pragma IMPORT_FUNCTION (INTERNAL => F,
MECHANISM => VALUE,
RESULT_MECHANISM => VALUE);
In the preceding example, the arguments given for the pragma IMPORT_
FUNCTION indicate that the VALUE mechanism is to be used to pass the
formal parameter Y and the function result.
procedure ASSIGN_RECORD (REC : out VAR_STR_TYPE);
pragma EXPORT_PROCEDURE (
INTERNAL => ASSIGN_RECORD,
PARAMETER_TYPES => (VAR_STR_TYPE),
MECHANISM => REFERENCE);
In the preceding example, the arguments given for the pragma EXPORT_
PROCEDURE indicate that the REFERENCE mechanism is to be used to pass
the formal parameter VAR_STR_TYPE.
References: access type 3.8, actual parameter 6.4, address type 13.7 13.7a.1,
argument 2.8, discrete type 3.5, formal parameter mode 6.2, full type 7.4.1, private
type 7.4 7.4.1, record type 3.7, scalar type 3.5, static 4.9, type declaration 3.3.1
13–75 Controlling the Passing Mechanisms for Parameters and Function Results 13.9a.1.4
13.9a.2 Importing and Exporting Objects
DEC Ada provides three pragmas for importing and exporting objects:
IMPORT_OBJECT
EXPORT_OBJECT
COMMON_OBJECT
The pragma IMPORT_OBJECT references storage declared in an external
(non-Ada) routine.
The pragma EXPORT_OBJECT allows an external routine to refer to the
storage allocated for an Ada object.
The pragma COMMON_OBJECT allows both Ada and non-Ada programs to
share the same block of storage. So, the pragma COMMON_OBJECT functions
as both an import and an export pragma. (The pragma INTERFACE_NAME
can also be used to import and export objects. See 13.9b.)
On OpenVMS systems, DEC Ada also provides the pragma PSECT_OBJECT,
which is synonymous with the DEC Ada pragma COMMON_OBJECT and has
the same effect.
In addition to the rules given in section 13.9a, the rules for importing and
exporting objects are as follows:
• The size of the object to be imported or exported must be known at compile
time.
• Import and export pragmas are not allowed for objects declared with a
renaming declaration.
Notes:
Objects of private or limited private types cannot be imported or exported
outside of the package that declares the (limited) private type. They can be
imported or exported inside the body of the package where the type is declared
(that is, where the full type is known).
The DEC Ada pragmas for importing or exporting objects can precede or follow
a pragma VOLATILE for the same objects (see 9.11).
Address clauses are not allowed in combination with any of the DEC Ada
pragmas for importing or exporting objects. If used in such cases, the pragma
involved is ignored (see 13.5).
References: array subtype 3.6, component 3.3, discriminant 3.3, generic unit 12 12.1,
index constraint 3.6, limited private type 7.4.4, object 3.2, object declaration 3.2.1,
package body 7.3, package specification 7.1, pragma 2.8, private type 7.4 7.4.1, record
type 3.7, renaming declaration 8.5, scalar type 3.5, simple record type 13.9a.1.4, static
constraint 4.9, subcomponent 3.3, subtype 3.3 3.3.2, variable 3.2.1, variant part 3.7.3
13.9a.2.3 Importing and Exporting Objects with the Pragma Common_Object 13–80
The size option specifies a linker global symbol that will be defined in the
object module. In OpenVMS systems, the symbol is the value of an absolute
global symbol that will equal the size in bytes of the imported object. On
OpenVMS systems, the size option can be used to achieve some level of
link-time consistency checking. On Digital UNIX systems, the size option is
accepted, but has no effect.
In addition to the rules given in sections 13.9a and 13.9a.2, the following rule
applies to the pragmas COMMON_OBJECT and PSECT_OBJECT:
• Because it is not created by an Ada elaboration, an object specified with a
pragma COMMON_OBJECT or PSECT_OBJECT cannot be a constant or
require implicit initialization. Specifically, this restriction means that the
object:
– Cannot be a constant.
– Cannot be an access type (which has a default initial value of null).
– Cannot be a record type that has discriminants (which are always
initialized) or components with default initial expressions.
– Cannot be an object of a task type.
See the DEC Ada run-time reference manuals for more information on using
the pragmas COMMON_OBJECT and PSECT_OBJECT.
Note:
Unlike other programming languages, DEC Ada allows only one object to be
stored in a linker storage area. However, by using record objects, the effect
of storing multiple objects in one linker storage area can be achieved. Each
record component then corresponds to one external variable.
Examples:
type BLOCK is
record
X1, X2, X3 : FLOAT;
end record;
XS : BLOCK;
pragma COMMON_OBJECT (XS);
The preceding example of the pragma COMMON_OBJECT shows the
allocation of the record variable XS with three components (X1, X2, X3) of
the type FLOAT in the linker storage area XS. The name of the linker storage
area is assumed to be the internal name XS because no external designator is
given.
13–81 Importing and Exporting Objects with the Pragma Common_Object 13.9a.2.3
The code in this example represents the same linker storage area as the
following named Fortran common block:
COMMON /XS/ X1, X2, X3
As specified, this declaration works on OpenVMS systems. For this declaration
to work on Digital UNIX systems, the external designator must be specified,
giving the spelling of the linker storage area expected by Fortran on Digital
UNIX systems (on Digital UNIX systems, Fortran expects lowercase spelling
with an appended underscore: "xs_").
-- Ada declarations for another shared common block
type MAP is array (INTEGER range 1 .. 10) of SHORT_INTEGER;
type NESTED is
record
COMP : INTEGER;
LIST : MAP;
CHAR : CHARACTER;
end record;
pragma COMPONENT_ALIGNMENT (STORAGE_UNIT, NESTED);
type REC is
record
FIRST : NESTED;
SECOND : INTEGER;
end record;
pragma COMPONENT_ALIGNMENT (STORAGE_UNIT, REC);
OBJ : REC;
pragma COMMON_OBJECT (OBJ, "comm_");
The preceding example of the pragma COMMON_OBJECT shows the
allocation of the record variable OBJ in the linker storage area "comm_".
The external designator is explicitly specified so that it matches the name of its
Fortran equivalent and so that it follows the spelling conventions required by
Fortran on Digital UNIX systems. (On Digital UNIX systems, Fortran expects
lowercase spelling with an appended underscore.)
STRUCTURE /NEST/
INTEGER COMP
INTEGER*2 LIST (10)
CHARACTER CHAR
END STRUCTURE
STRUCTURE /STRUCT/
RECORD /NEST/ FIRST
INTEGER SECOND
END STRUCTURE
RECORD /STRUCT/ OBJ
13.9a.2.3 Importing and Exporting Objects with the Pragma Common_Object 13–82
COMMON /COMM/ OBJ
The code in the preceding example represents the same linker storage area as
the following named Fortran common block (COMM).
References: component type 3.7, external designator 13.9a.1, external symbol
13.9a.1, identifier 2.3, internal name 13.9a.1, object 3.2, pragma 2.8, record type 3.7,
string 3.6.3, variable 3.2.1
22
See also Appendix G, AI-00355.
23
See also Appendix G, AI-00356.
24
See also Appendix G, AI-00355.
14–1
DEC Ada does not provide the package LOW_LEVEL_IO for general use;
however, a DEC Ada package LOW_LEVEL_IO exists for the implementation
of the other input-output packages.
Complete descriptions and specifications for the DEC Ada predefined input-
output and exceptions packages appear in the sections that follow. Detailed
information on DEC Ada input-output processing can be found in the DEC Ada
run-time reference manuals.
2 References : direct_io package 14.2 14.2.4, io_exceptions package 14.5, low_level_io
package 14.6, sequential_io package 14.2 14.2.2, text_io package 14.3
aux_io_exceptions package 14.4 14.5a, direct access 14.2, direct_mixed_io package 14.2
14.2b 14.2b.5, element 14.1a, indexed access 14.2a, indexed_io package 14.2a 14.2a.4,
indexed_mixed_io package 14.2a 14.2b 14.2b.9, library package 10.1, mixed-type file
14.2b, relative access 14.2a, relative_io package 14.2a 14.2a.2, relative_mixed_io
package 14.2a 14.2b 14.2b.7, sequential access 14.2, sequential_mixed_io package 14.2
14.2b 14.2b.3
1
See also Appendix G, AI-00355.
2
See also Appendix G, AI-00466.
3
See also Appendix G, AI-00279.
4
See also Appendix G, AI-00320.
5
See also Appendix G, AI-00046 and AI-00247.
6
See also Appendix G, AI-00046.
7
See also Appendix G, AI-00332.
11
See also Appendix G, AI-00046.
12
See also Appendix G, AI-00320.
13
See also Appendix G, AI-00320.
18
See also Appendix G, AI-00320.
19
See also Appendix G, AI-00320.
20
See also Appendix G, AI-00243.
21
See also Appendix G, AI-00050 and AI-00172.
22
See also Appendix G, AI-00051 and AI-00307.
23
See also Appendix G, AI-00307.
24
See also Appendix G, AI-00307.
25
See also Appendix G, AI-00307.
26 Specification corrected according to AI-00215; see
Appendix Appendix G.
27
See also Appendix G, AI-00239, AI-00307, and AI-00316.
10 References : col function 14.3.4, create procedure 14.2.1, end_of_line function 14.3.4,
end_of_page function 14.3.4, external file 14.1, file 14.1, form string 14.1, get procedure
14.3.5, in_file 14.1, io_exceptions package 14.5, line function 14.3.4, line_length
function 14.3.4, name string 14.1, new_line procedure 14.3.4, new_page procedure
14.3.4, open procedure 14.2.1, out_file 14.1, page function 14.3.4, page_length function
14.3.4, put procedure 14.3.5, read procedure 14.2.2 14.2.3, set_input procedure 14.3.2,
set_line_length 14.3.3, set_page_length 14.3.3, set_output 14.3.2, skip_line procedure
14.3.4, skip_page procedure 14.3.4, text_io package 14.3
indexed_io package 14.2a 14.2a.4, indexed_mixed_io package 14.2a 14.2b 14.2b.9, key
14.2a, locking 14.2a, read procedure 14.2a.2 14.2a.4 14.2b.7 14.2b.9, read_existing
procedure 14.2a.2 14.2b.7, relative_io package 14.2a 14.2a.2, relative_mixed_io package
14.2a 14.2b 14.2b.7
A–1
P’AST_ENTRY On OpenVMS systems only.
For a prefix P that denotes a single entry
of an object of a task type or an entry of a
single task:
Yields a value of the type AST_HANDLER
(in the package SYSTEM) that transforms
an AST occurrence into a call of the
given entry. This attribute can only
occur in a compilation unit to which the
package SYSTEM applies, and the pragma
AST_ENTRY must have been specified for
the entry. (See 9.12a.)
4 P’BASE For a prefix P that denotes a type or
subtype:
This attribute denotes the base type of
P. It is only allowed as the prefix of the
name of another attribute: for example,
P’BASE’FIRST. (See 3.3.3.)
P’BIT For a prefix P that denotes an object:
Yields the bit offset within the storage unit
(byte) containing the first bit of the storage
for the object P. The value of this attribute
is of the type universal_integer. (See 13.7.2.)
5 P’CALLABLE For a prefix P that is appropriate for a task
type:
Yields the value FALSE when the execution
of the task P is either completed or
terminated, or when the task is abnormal;
yields the value TRUE otherwise. The value
of this attribute is of the predefined type
BOOLEAN. (See 9.9.)
6 P’CONSTRAINED For a prefix P that denotes an object of a
type with discriminants:
Yields the value TRUE if a discriminant
constraint applies to the object P, or if the
object is a constant (including a formal
parameter or generic formal parameter of
mode in); yields the value FALSE otherwise.
A–2
If P is a generic formal parameter of mode
in out, or if P is a formal parameter of
mode in out or out and the type mark
given in the corresponding parameter
specification denotes an unconstrained
type with discriminants, then the value of
this attribute is obtained from that of the
corresponding actual parameter. The value
of this attribute is of the predefined type
BOOLEAN. (See 3.7.4.)
7 P’CONSTRAINED For a prefix P that denotes a private type or
subtype:
Yields the value FALSE if P denotes an
unconstrained nonformal private type with
discriminants; also yields the value FALSE
if P denotes a generic formal private type
and the associated actual subtype is either
an unconstrained type with discriminants
or an unconstrained array type; yields
the value TRUE otherwise. The value of
this attribute is of the predefined type
BOOLEAN. (See 7.4.2.)
8 P’COUNT For a prefix P that denotes an entry of a
task unit:
Yields the number of entry calls presently
queued on the entry (if the attribute is
evaluated within an accept statement for
the entry P, the count does not include the
calling task). The value of this attribute is
of the type universal_integer. (See 9.9.)
9 P’DELTA For a prefix P that denotes a fixed point
subtype:
Yields the value of the delta specified in
the fixed accuracy definition for the subtype
P. The value of this attribute is of the type
universal_real. (See 3.5.10.)
A–3
10 P’DIGITS For a prefix P that denotes a floating point
subtype:
Yields the number of decimal digits in the
decimal mantissa of model numbers of
the subtype P. (This attribute yields the
number D of section 3.5.7.) The value of this
attribute is of the type universal_integer.
(See 3.5.8.)
11 P’EMAX For a prefix P that denotes a floating point
subtype:
Yields the largest exponent value in the
binary canonical form of model numbers
of the subtype P. (This attribute yields
the product 4*B of section 3.5.7.) The
value of this attribute is of the type
universal_integer. (See 3.5.8.)
12 P’EPSILON For a prefix P that denotes a floating point
subtype:
Yields the absolute value of the difference
between the model number 1.0 and the
next model number above, for the subtype
P. The value of this attribute is of the type
universal_real. (See 3.5.8.)
13 P’FIRST For a prefix P that denotes a scalar type, or
a subtype of a scalar type:
Yields the lower bound of P. The value of
this attribute has the same type as P.
(See 3.5.)
14 P’FIRST For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the lower bound of the first index
range. The value of this attribute has the
same type as this lower bound. (See 3.6.2
and 3.8.2.)
15 P’FIRST(N) For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
A–4
Yields the lower bound of the N-th index
range. The value of this attribute has
the same type as this lower bound. The
argument N must be a static expression of
type universal_integer. The value of N must
be positive (nonzero) and no greater than
the dimensionality of the array. (See 3.6.2
and 3.8.2.)
16 P’FIRST_BIT For a prefix P that denotes a component of a
record object:
Yields the offset, from the start of the
first of the storage units occupied by the
component, of the first bit occupied by the
component. This offset is measured in bits.
The value of this attribute is of the type
universal_integer. (See 13.7.2.)
17 P’FORE For a prefix P that denotes a fixed point
subtype:
Yields the minimum number of characters
needed for the integer part of the decimal
representation of any value of the subtype
P, assuming that the representation does
not include an exponent, but includes a one-
character prefix that is either a minus sign
or a space. (This minimum number does not
include superfluous zeros or underlines, and
is at least two.) The value of this attribute
is of the type universal_integer. (See 3.5.10.)
18 P’IMAGE For a prefix P that denotes a discrete type
or subtype:
This attribute is a function with a single
parameter. The actual parameter X must
be a value of the base type of P. The result
type is the predefined type STRING. The
result is the image of the value of X, that
is, a sequence of characters representing
the value in display form. The image of an
integer value is the corresponding decimal
literal; without underlines, leading zeros,
exponent, or trailing spaces; but with a one
A–5
character prefix that is either a minus sign
or a space.
The image of an enumeration value is
either the corresponding identifier in upper
case or the corresponding character literal
(including the two apostrophes); neither
leading nor trailing spaces are included.
The image of a character other than a
graphic character is implementation-defined.
(See 3.5.5.)
19 P’LARGE For a prefix P that denotes a real subtype:
The attribute yields the largest positive
model number of the subtype P. The value of
this attribute is of the type universal_real.
(See 3.5.8 and 3.5.10.)
20 P’LAST For a prefix P that denotes a scalar type, or
a subtype of a scalar type:
Yields the upper bound of P. The value of
this attribute has the same type as P.
(See 3.5.)
21 P’LAST For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the upper bound of the first index
range. The value of this attribute has the
same type as this upper bound. (See 3.6.2
and 3.8.2.)
22 P’LAST(N) For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the upper bound of the N-th index
range. The value of this attribute has
the same type as this upper bound. The
argument N must be a static expression of
type universal_integer. The value of N must
be positive (nonzero) and no greater than
the dimensionality of the array. (See 3.6.2
and 3.8.2.)
A–6
23 P’LAST_BIT For a prefix P that denotes a component of a
record object:
Yields the offset, from the start of the
first of the storage units occupied by the
component, of the last bit occupied by the
component. This offset is measured in bits.
The value of this attribute is of the type
universal_integer. (See 13.7.2.)
24 P’LENGTH For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the number of values of the first
index range (zero for a null range). The
value of this attribute is of the type
universal_integer. (See 3.6.2.)
25 P’LENGTH(N) For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the number of values of the N-th
index range (zero for a null range). The
value of this attribute is of the type
universal_integer. The argument N must be
a static expression of type universal_integer.
The value of N must be positive (nonzero)
and no greater than the dimensionality of
the array. (See 3.6.2 and 3.8.2.)
26 P’MACHINE_EMAX For a prefix P that denotes a floating point
type or subtype:
Yields the largest value of exponent for the
machine representation of the base type of
P. The value of this attribute is of the type
universal_integer. (See 13.7.3.)
27 P’MACHINE_EMIN For a prefix P that denotes a floating point
type or subtype:
Yields the smallest (most negative) value
of exponent for the machine representation
of the base type of P. The value of this
A–7
attribute is of the type universal_integer.
(See 13.7.3.)
28 P’MACHINE_MANTISSA For a prefix P that denotes a floating point
type or subtype:
Yields the number of digits in the mantissa
for the machine representation of the base
type of P (the digits are extended digits in
the range 0 to P’MACHINE_RADIX 0 1).
The value of this attribute is of the type
universal_integer. (See 13.7.3.)
29 P’MACHINE_OVERFLOWS For a prefix P that denotes a real type or
subtype:
Yields the value TRUE if every predefined
operation on values of the base type of P
either provides a correct result, or raises
the exception NUMERIC_ERROR in
overflow situations; yields the value FALSE
otherwise. The value of this attribute is of
the predefined type BOOLEAN. (See 13.7.3.)
30 P’MACHINE_RADIX For a prefix P that denotes a floating point
type or subtype:
Yields the value of the radix used by the
machine representation of the base type of
P. The value of this attribute is of the type
universal_integer. (See 13.7.3.)
31 P’MACHINE_ROUNDS For a prefix P that denotes a real type or
subtype:
Yields the value TRUE if every predefined
arithmetic operation on values of the base
type of P either returns an exact result or
performs rounding; yields the value FALSE
otherwise. The value of this attribute is of
the predefined type BOOLEAN. (See 13.7.3.)
A–8
P’MACHINE_SIZE For a prefix P that denotes any type or
subtype:
Yields the number of machine bits to
be allocated for variables of the type or
subtype. This value takes into account
any padding bits used by DEC Ada when
allocating a variable on a byte boundary.
The value of this attribute is of the type
universal_integer. (See 13.7.2.)
32 P’MANTISSA For a prefix P that denotes a real subtype:
Yields the number of binary digits in the
binary mantissa of model numbers of the
subtype P. (This attribute yields the number
B of section 3.5.7 for a floating point type,
or of section 3.5.9 for a fixed point type.)
The value of this attribute is of the type
universal_integer. (See 3.5.8 and 3.5.10.)
P’NULL_PARAMETER For a prefix P that denotes any type or
subtype:
Yields an (imaginary) object of type or
subtype P allocated at (machine) address
zero. The attribute is allowed only as the
default expression of a formal parameter or
as an actual expression of a subprogram
call; in either case, the subprogram must be
imported. (See 13.9a.1.2.)
33 P’POS For a prefix P that denotes a discrete type
or subtype:
This attribute is a function with a single
parameter. The actual parameter X must be
a value of the base type of P. The result type
is the type universal_integer. The result
is the position number of the value of the
actual parameter. (See 3.5.5.)
A–9
34 P’POSITION For a prefix P that denotes a component of a
record object:1
Yields the offset, from the start of the first
storage unit occupied by the record, of the
first of the storage units occupied by the
component. This offset is measured in
storage units. The value of this attribute is
of the type universal_integer. (See 13.7.2.)
35 P’PRED For a prefix P that denotes a discrete type
or subtype:
This attribute is a function with a single
parameter. The actual parameter X must be
a value of the base type of P. The result type
is the base type of P. The result is the value
whose position number is one less than that
of X. The exception CONSTRAINT_ERROR
is raised if X equals P’BASE’FIRST.
(See 3.5.5.)
36 P’RANGE For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the first index range of P, that is, the
range P’FIRST .. P’LAST. (See 3.6.2.)
37 P’RANGE(N) For a prefix P that is appropriate for an
array type, or that denotes a constrained
array subtype:
Yields the N-th index range of P, that is, the
range P’FIRST(N) .. P’LAST(N).
(See 3.6.2.)
38 P’SAFE_EMAX For a prefix P that denotes a floating point
type or subtype:
Yields the largest exponent value in the
binary canonical form of safe numbers of
the base type of P. (This attribute yields the
number E of section 3.5.7.) The value of this
attribute is of the type universal_integer.
(See 3.5.8.)
1
See also Appendix G, AI-00258.
A–10
39 P’SAFE_LARGE For a prefix P that denotes a real type or
subtype:
Yields the largest positive safe number
of the base type of P. The value of this
attribute is of the type universal_real.
(See 3.5.8 and 3.5.10.)
40 P’SAFE_SMALL For a prefix P that denotes a real type or
subtype:
Yields the smallest positive (nonzero) safe
number of the base type of P. The value of
this attribute is of the type universal_real.
(See 3.5.8 and 3.5.10.)
41 P’SIZE For a prefix P that denotes an object:
Yields the number of bits allocated to hold
the object. The value of this attribute is of
the type universal_integer. (See 13.7.2.)
42 P’SIZE For a prefix P that denotes any type or
subtype:
Yields the minimum number of bits that
is needed by the implementation to hold
any possible object of the type or subtype
P. The value of this attribute is of the type
universal_integer. (See 13.7.2.)
43 P’SMALL For a prefix P that denotes a real subtype:
Yields the smallest positive (nonzero) model
number of the subtype P. The value of this
attribute is of the type universal_real.
(See 3.5.8 and 3.5.10.)
A–11
44 P’STORAGE_SIZE For a prefix P that denotes an access type or
subtype:
Yields the total number of storage units
reserved for the collection associated
with the base type of P. The value of this
attribute is of the type universal_integer.
(See 13.7.2.)
45 P’STORAGE_SIZE For a prefix P that denotes a task type or a
task object:
Yields the number of storage units reserved
for each activation of a task of the type P
or for the activation of the task object P.
The value of this attribute is of the type
universal_integer. (See 13.7.2.)
46 P’SUCC For a prefix P that denotes a discrete type
or subtype:
This attribute is a function with a single
parameter. The actual parameter X must
be a value of the base type of P. The result
type is the base type of P. The result is
the value whose position number is one
greater than that of X. The exception
CONSTRAINT_ERROR is raised if X equals
P’BASE’LAST. (See 3.5.5.)
47 P’TERMINATED For a prefix P that is appropriate for a task
type:
Yields the value TRUE if the task P
is terminated; yields the value FALSE
otherwise. The value of this attribute is of
the predefined type BOOLEAN. (See 9.9.)
P’TYPE_CLASS For a prefix P that denotes a type or
subtype:
Yields the value of the type class for the
full type of P. If P is a generic formal type,
then the value is that for the corresponding
actual subtype. The value of this attribute
is of the type TYPE_CLASS in the package
SYSTEM. (See 13.7a.2.)
A–12
48 P’VAL For a prefix P that denotes a discrete type
or subtype:
This attribute is a special function with a
single parameter X which can be of any
integer type. The result type is the base
type of P. The result is the value whose
position number is the universal_integer
value corresponding to X. The exception
CONSTRAINT_ERROR is raised if the
universal_integer value corresponding to X is
not in the range P’POS(P’BASE’FIRST) ..
P’POS(P’BASE’LAST). (See 3.5.5.)
49 P’VALUE For a prefix P that denotes a discrete type
or subtype:
This attribute is a function with a single
parameter. The actual parameter X must be
a value of the predefined type STRING. The
result type is the base type of P. Any leading
and any trailing spaces of the sequence
of characters that corresponds to X are
ignored.
For an enumeration type, if the sequence of
characters has the syntax of an enumeration
literal and if this literal exists for the base
type of P, the result is the corresponding
enumeration value. For an integer type, if
the sequence of characters has the syntax
of an integer literal, with an optional single
leading character that is a plus or minus
sign, and if there is a corresponding value
in the base type of P, the result is this
value. In any other case, the exception
CONSTRAINT_ERROR is raised.
(See 3.5.5.)
50 P’WIDTH For a prefix P that denotes a discrete
subtype:
A–13
Yields the maximum image length over
all values of the subtype P (the image is
the sequence of characters returned by
the attribute IMAGE). The value of this
attribute is of the type universal_integer.
(See 3.5.5.)
A–14
B
Predefined Language Pragmas
1 This annex defines the pragmas LIST, PAGE, and OPTIMIZE, and summarizes
the definitions given elsewhere of the remaining language-defined pragmas.
The DEC Ada pragmas IDENT and TITLE are also defined in this annex.
Pragma Meaning
AST_ENTRY On OpenVMS systems only.
Takes the simple name of a single
entry as the single argument; at most
one AST_ENTRY pragma is allowed
for any given entry. This pragma
must be used in combination with the
AST_ENTRY attribute, and is only
allowed after the entry declaration and
in the same task type specification or
single task as the entry to which it
applies. This pragma specifies that the
given entry may be used to handle an
OpenVMS asynchronous system trap
(AST) resulting from an OpenVMS
system service call. The pragma does
not affect normal use of the entry (see
9.12a).
COMMON_OBJECT Takes an internal name denoting
an object, and optionally takes an
external designator (the name of a
linker storage area) and a size as
arguments. This pragma is only
allowed at the place of a declarative
item, and must apply to a variable
declared by an earlier declarative
B–1
item of the same declarative part or
package specification. The variable
must have a size that is known at
compile time, and it must not require
implicit initialization. This pragma is
not allowed for objects declared with
a renaming declaration. This pragma
enables the shared use of objects that
are stored in overlaid storage areas
(see 13.9a.2.3).
COMPONENT_ALIGNMENT Takes an alignment choice and
optionally the simple name of an array
or record type as arguments. When no
simple name is specified, the pragma
must occur within a declarative part or
package specification, and the effect of
the pragma extends to types declared
from the place of the pragma to the
end of the innermost declarative part
or package specification in which
the pragma was declared. When a
simple name is specified, the pragma
and the type declaration must both
occur immediately within the same
declarative part, package specification,
or task specification; the declaration
must occur before the pragma. The
position of the pragma and the
restrictions on the named type are
governed by the same rules as those for
a representation clause. This pragma
specifies the kind of alignment used for
the components of the array or record
types to which it applies (see 13.1a).
2 CONTROLLED Takes the simple name of an access
type as the single argument. This
pragma is only allowed immediately
within the declarative part or package
specification that contains the
declaration of the access type; the
declaration must occur before the
pragma. This pragma is not allowed for
B–2
a derived type. This pragma specifies
that automatic storage reclamation
must not be performed for objects
designated by values of the access type,
except upon leaving the innermost
block statement, subprogram body, or
task body that encloses the access type
declaration, or after leaving the main
program (see 4.8).
3 ELABORATE Takes one or more simple names
denoting library units as arguments.
This pragma is only allowed
immediately after the context clause
of a compilation unit (before the
subsequent library unit or secondary
unit). Each argument must be
the simple name of a library unit
mentioned by the context clause.
This pragma specifies that the
corresponding library unit body
must be elaborated before the
given compilation unit. If the given
compilation unit is a subunit, the
library unit body must be elaborated
before the body of the ancestor library
unit of the subunit (see 10.5).
EXPORT_EXCEPTION On OpenVMS systems only.
Takes an internal name denoting an
exception, and optionally takes an
external designator (the name of a
linker global symbol), a form (ADA
or VMS), and a code (a static integer
expression that is interpreted as a
condition code) as arguments. A code
value must be specified when the
form is VMS (the default if the form
is not specified). This pragma is only
allowed at the place of a declarative
item, and must apply to an exception
declared by an earlier declarative
item of the same declarative part
B–3
or package specification; it is not
allowed for an exception declared
with a renaming declaration or for an
exception declared in a generic unit.
This pragma permits an Ada exception
to be handled by programs written in
another programming language (see
13.9a.3.2).
EXPORT_FUNCTION Takes an internal name denoting
a function, and optionally takes an
external designator (the name of a
linker global symbol), parameter types,
result type, parameter mechanisms,
and result mechanism as arguments.
This pragma is only allowed at the
place of a declarative item, and
must apply to a function declared
by an earlier declarative item of the
same declarative part or package
specification. In the case of a function
declared as a compilation unit, the
pragma is only allowed after the
function declaration and before
any subsequent compilation unit.
This pragma is not allowed for a
function declared with a renaming
declaration, and it is not allowed for a
generic function (it may be given for
a generic instantiation). This pragma
permits an Ada function to be called
from a program written in another
programming language (see 13.9a.1.3).
EXPORT_OBJECT Takes an internal name denoting an
object, and optionally takes an external
designator (the name of a linker global
symbol) and size option (a linker
absolute global symbol that will be
defined in the object module—useful on
OpenVMS systems only) as arguments.
This pragma is only allowed at the
place of a declarative item, and must
apply to a constant or a variable
B–4
declared by an earlier declarative
item of the same declarative part or
package specification; the declaration
must occur at the outermost level of a
library package specification or body.
The object to be exported must have
a size that is known at compile time.
This pragma is not allowed for objects
declared with a renaming declaration,
and is not allowed in a generic unit.
This pragma permits an Ada object to
be referred to by a routine written in
another programming language (see
13.9a.2.2).
EXPORT_PROCEDURE Takes an internal name denoting
a procedure, and optionally takes
an external designator (the name of
a linker global symbol), parameter
types, and parameter mechanisms
as arguments. This pragma is only
allowed at the place of a declarative
item, and must apply to a procedure
declared by an earlier declarative
item of the same declarative part or
package specification. In the case of a
procedure declared as a compilation
unit, the pragma is only allowed
after the procedure declaration and
before any subsequent compilation
unit. This pragma is not allowed for
a procedure declared with a renaming
declaration, and is not allowed for a
generic procedure (it may be given for
a generic instantiation). This pragma
permits an Ada routine to be called
from a program written in another
programming language (see 13.9a.1.3).
EXPORT_VALUED_PROCEDURE Takes an internal name denoting
a procedure, and optionally takes
an external designator (the name of
a linker global symbol), parameter
types, and parameter mechanisms
B–5
as arguments. This pragma is only
allowed at the place of a declarative
item, and must apply to a procedure
declared by an earlier declarative item
of the same declarative part or package
specification. In the case of a procedure
declared as a compilation unit, the
pragma is only allowed after the
procedure declaration and before any
subsequent compilation unit. The first
(or only) parameter of the procedure
must be of mode out. This pragma is
not allowed for a procedure declared
with a renaming declaration and is not
allowed for a generic procedure (it may
be given for a generic instantiation).
This pragma permits an Ada procedure
to behave as a function that both
returns a value and causes side effects
on its parameters when it is called
from a routine written in another
programming language (see 13.9a.1.3).
FLOAT_REPRESENTATION On OpenVMS and Digital UNIX
systems only.
On OpenVMS VAX systems, takes
VAX_FLOAT as the single argument.
On OpenVMS Alpha systems, takes
either VAX_FLOAT or IEEE_FLOAT
as the single argument; the default
is VAX_FLOAT. On Digital UNIX
systems, takes IEEE_FLOAT as the
single argument. This pragma is only
allowed at the start of a compilation,
before the first compilation unit (if
any) of the compilation. It specifies the
choice of representation to be used for
the predefined floating point types in
the package STANDARD (see 3.5.7a).
B–6
IDENT Takes a string literal of 31 or fewer
characters as the single argument. The
pragma IDENT has the following form:
pragma IDENT (string_literal);
This pragma is allowed only in
the outermost declarative part or
declarative items of a compilation unit.
The given string is used to identify
the object module associated with the
compilation unit in which the pragma
IDENT occurs.
IMPORT_EXCEPTION On OpenVMS systems only.
Takes an internal name denoting an
exception, and optionally takes an
external designator (the name of a
linker global symbol), a form (ADA
or VMS), and a code (a static integer
expression that is interpreted as a
condition code) as arguments. A code
value is allowed only when the form
is VMS (the default if the form is
not specified). This pragma is only
allowed at the place of a declarative
item, and must apply to an exception
declared by an earlier declarative item
of the same declarative part or package
specification; it is not allowed for an
exception declared with a renaming
declaration. This pragma permits a
non-Ada exception (most notably, an
OpenVMS condition) to be handled by
an Ada program (see 13.9a.3.1).
IMPORT_FUNCTION Takes an internal name denoting
a function, and optionally takes an
external designator (the name of a
linker global symbol), parameter types,
result type, parameter mechanisms,
and result mechanism as arguments.
On OpenVMS systems, a first optional
parameter is also available as an
B–7
argument. The pragma INTERFACE
must be used with this pragma
(see 13.9). This pragma is only allowed
at the place of a declarative item, and
must apply to a function declared
by an earlier declarative item of the
same declarative part or package
specification. In the case of a function
declared as a compilation unit, the
pragma is only allowed after the
function declaration and before any
subsequent compilation unit. This
pragma is allowed for a function
declared with a renaming declaration;
it is not allowed for a generic function
or a generic function instantiation.
This pragma permits a non-Ada
routine to be used as an Ada function
(see 13.9a.1.1).
IMPORT_OBJECT Takes an internal name denoting
an object, and optionally takes an
external designator (the name of a
linker global symbol) and size (a linker
absolute global symbol that will be
defined in the object module—useful on
OpenVMS systems only) as arguments.
This pragma is only allowed at the
place of a declarative item, and
must apply to a variable declared
by an earlier declarative item of the
same declarative part or package
specification. The variable must have
a size that is known at compile time,
and it cannot have an initial value.
This pragma is not allowed for objects
declared with a renaming declaration.
This pragma permits storage declared
in a non-Ada routine to be referred to
by an Ada program (see 13.9a.2.1).
B–8
IMPORT_PROCEDURE Takes an internal name denoting
a procedure, and optionally takes
an external designator (the name of
a linker global symbol), parameter
types, and parameter mechanisms as
arguments. On OpenVMS systems,
a first optional parameter is also
available as an argument. The pragma
INTERFACE must be used with this
pragma (see 13.9). This pragma is only
allowed at the place of a declarative
item, and must apply to a procedure
declared by an earlier declarative
item of the same declarative part or
package specification. In the case of a
procedure declared as a compilation
unit, the pragma is only allowed after
the procedure declaration and before
any subsequent compilation unit. This
pragma is allowed for a procedure
declared with a renaming declaration;
it is not allowed for a generic procedure
or a generic procedure instantiation.
This pragma permits a non-Ada routine
to be used as an Ada procedure
(see 13.9a.1.1).
IMPORT_VALUED_PROCEDURE Takes an internal name denoting
a procedure, and optionally takes
an external designator (the name of
a linker global symbol), parameter
types, and parameter mechanisms as
arguments. On OpenVMS systems,
a first optional parameter is also
available as an argument. The pragma
INTERFACE must be used with this
pragma (see 13.9). This pragma is only
allowed at the place of a declarative
item, and must apply to a procedure
declared by an earlier declarative item
of the same declarative part or package
specification. In the case of a procedure
declared as a compilation unit, the
B–9
pragma is only allowed after the
procedure declaration and before any
subsequent compilation unit. The first
(or only) parameter of the procedure
must be of mode out. This pragma
is allowed for a procedure declared
with a renaming declaration; it is not
allowed for a generic procedure. This
pragma permits a non-Ada routine that
returns a value and causes side effects
on its parameters to be used as an Ada
procedure (see 13.9a.1.1).
4 INLINE Takes one or more names as
arguments; each name is either the
name of a subprogram or the name of
a generic subprogram. This pragma
is only allowed at the place of a
declarative item in a declarative part
or package specification, or after a
library unit in a compilation, but before
any subsequent compilation unit. This
pragma specifies that the subprogram
bodies should be expanded inline at
each call whenever possible; in the case
of a generic subprogram, the pragma
applies to calls of its instantiations
(see 6.3.2).
INLINE_GENERIC Takes one or more names as
arguments; each name is either the
name of a generic declaration or the
name of an instance of a generic
declaration. This pragma is only
allowed at the place of a declarative
item in a declarative part or package
specification, or after a library unit
in a compilation, but before any
subsequent compilation unit. Each
argument must be the simple name
of a generic subprogram or package,
or a (nongeneric) subprogram or
package that is an instance of a generic
subprogram or package declared by
B–10
an earlier declarative item of the
same declarative part or package
specification. This pragma specifies
that inline expansion of the generic
body is desired for each instantiation
of the named generic declarations or
of the particular named instances;
the pragma does not apply to calls of
instances of generic subprograms
(see 12.1a).
5 INTERFACE Takes a language name and a
subprogram name as arguments. This
pragma is allowed at the place of a
declarative item, and must apply in
this case to a subprogram declared
by an earlier declarative item of the
same declarative part or package
specification. This pragma is also
allowed for a library unit; in this case
the pragma must appear after the
subprogram declaration, and before
any subsequent compilation unit. This
pragma specifies the other language
(and thereby the calling conventions)
and informs the compiler that an
object module will be supplied for the
corresponding subprogram (see 13.9).
In DEC Ada, the pragma INTERFACE
is required in combination with the
pragmas IMPORT_FUNCTION,
IMPORT_PROCEDURE, IMPORT_
VALUED_PROCEDURE, and
INTERFACE_NAME when any of those
pragmas are used (see 13.9a.1).
INTERFACE_NAME Takes an internal name and an
external name as arguments. The
internal name may be an Ada simple
name that denotes a subprogram or
an object. If the declared entity is a
function, the internal name may be a
string literal that denotes an operator
B–11
symbol. The external name may be any
string literal; the literal is used as a
linker global symbol that is associated
with the external subprogram or
object. This pragma is only allowed
at the place of a declarative item,
and must apply to an entity declared
by an earlier declarative item of the
same declarative part or package
specification.
If this pragma applies to a subprogram,
then the pragma INTERFACE must
also apply (see 13.9). If a subprogram
has been declared as a compilation
unit, the pragma is only allowed after
the subprogram declaration and before
any subsequent compilation unit. This
pragma is allowed for subprograms
declared with a renaming declaration.
This pragma is not allowed for a
generic subprogram or a generic
subprogram instantiation.
If this pragma applies to an object,
then the size of the object must be
known at compile time. This pragma is
not allowed for an object declared with
a renaming declaration.
This pragma associates an external
symbol with the internal Ada name for
a subprogram or object (see 13.9b).
6 LIST Takes one of the identifiers ON or
OFF as the single argument. This
pragma is allowed anywhere a pragma
is allowed. It specifies that listing of
the compilation is to be continued or
suspended until a LIST pragma with
the opposite argument is given within
the same compilation. The pragma
itself is always listed if the compiler is
producing a listing.
B–12
LONG_FLOAT On OpenVMS systems only. Also,
the value of the pragma FLOAT_
REPRESENTATION must be VAX_
FLOAT.
Takes either D_FLOAT or G_FLOAT
as the single argument. The default
is G_FLOAT. This pragma is only
allowed at the start of a compilation,
before the first compilation unit
(if any) of the compilation. It specifies
the choice of representation to be used
for the predefined type LONG_FLOAT
in the package STANDARD, and for
floating point type declarations with
digits specified in the range 7 .. 15
(see 3.5.7b).
MAIN_STORAGE On OpenVMS VAX systems only.
Takes one or two nonnegative static
simple expressions of some integer type
as arguments. This pragma is only
allowed in the outermost declarative
part of a library subprogram; at most
one such pragma is allowed in a library
subprogram. It has an effect only when
the subprogram to which it applies is
used as a main program. This pragma
causes a fixed-size stack to be created
for a main task (the task associated
with a main program), and determines
the number of storage units (bytes)
to be allocated for the stack working
storage area or guard pages or both.
The value specified for either or both
the working storage area and guard
pages is rounded up to an integral
number of pages. A value of zero for
the working storage area results in the
use of a default size; a value of zero for
the guard pages results in no guard
storage. A negative value for either
B–13
working storage or guard pages causes
the pragma to be ignored (see 13.2b).
7 MEMORY_SIZE Takes a numeric literal as the single
argument. This pragma is only allowed
at the start of a compilation, before the
first compilation unit (if any) of the
compilation. The effect of this pragma
is to use the value of the specified
numeric literal for the definition of the
named number MEMORY_SIZE
(see 13.7).
8 OPTIMIZE Takes one of the identifiers TIME
or SPACE as the single argument.
This pragma is only allowed within a
declarative part and it applies to the
block or body enclosing the declarative
part. It specifies whether time or space
is the primary optimization criterion.
In DEC Ada, this pragma is only
allowed immediately within a
declarative part of a body declaration.
9 PACK Takes the simple name of a record or
array type as the single argument. The
allowed positions for this pragma, and
the restrictions on the named type,
are governed by the same rules as for
a representation clause. The pragma
specifies that storage minimization
should be the main criterion when
selecting the representation of the
given type (see 13.1).
10 PAGE This pragma has no argument, and is
allowed anywhere a pragma is allowed.
It specifies that the program text which
follows the pragma should start on a
new page (if the compiler is currently
producing a listing).
PASSIVE On OpenVMS Alpha and Digital UNIX
systems only.
B–14
Takes an argument indicating whether
or not to make a containing task
passive. The default (no arguments)
indicates a desire to make the
containing task passive. This pragma
must be specified within a task
specification. The specification can be
for a task type or for a single task. (see
9.8b).
11 PRIORITY Takes a static expression of the
predefined integer subtype PRIORITY
as the single argument. This pragma is
only allowed within the specification of
a task unit or immediately within the
outermost declarative part of a main
program. It specifies the priority of the
task (or tasks of the task type) or the
priority of the main program (see 9.8).
PSECT_OBJECT On OpenVMS systems only.
Has the same syntax and the same
effect as the pragma COMMON_
OBJECT (see 13.9a.2.3).
12 SHARED Takes the simple name of a variable as
the single argument. This pragma is
allowed only for a variable declared by
an object declaration and whose type
is a scalar or access type; the variable
declaration and the pragma must
both occur (in this order) immediately
within the same declarative part or
package specification. This pragma
specifies that every read or update of
the variable is a synchronization point
for that variable. An implementation
must restrict the objects for which
this pragma is allowed to objects
for which each of direct reading and
direct updating is implemented as an
indivisible operation (see 9.11).
SHARE_GENERIC
B–15
Takes one or more names as
arguments; each name is either the
name of a generic declaration or the
name of an instance of a generic
declaration. This pragma is only
allowed at the place of a declarative
item in a declarative part or package
specification, or after a library unit in a
compilation, but before any subsequent
compilation unit. Each argument
either must be the simple name of a
generic subprogram or package, or it
must be a (nongeneric) subprogram
or package that is an instance of a
generic subprogram or package. If the
argument is an instance of a generic
subprogram or package, then it must
be declared by an earlier declarative
item of the same declarative part or
package specification. This pragma
specifies that generic code sharing is
desired for each instantiation of the
named generic declarations or of the
particular named instances (see 12.1b).
13 STORAGE_UNIT Takes a numeric literal as the single
argument. This pragma is only allowed
at the start of a compilation, before the
first compilation unit (if any) of the
compilation. The effect of this pragma
is to use the value of the specified
numeric literal for the definition of the
named number STORAGE_UNIT
(see 13.7).
In DEC Ada, the only argument
allowed for this pragma is 8 (bits).
14 SUPPRESS Takes as arguments the identifier
of a check and optionally also the
name of either an object, a type or
subtype, a subprogram, a task unit, or
a generic unit. This pragma is only
allowed either immediately within a
B–16
declarative part or immediately within
a package specification. In the latter
case, the only allowed form is with a
name that denotes an entity (or several
overloaded subprograms) declared
immediately within the package
specification. The permission to omit
the given check extends from the
place of the pragma to the end of the
declarative region associated with the
innermost enclosing block statement or
program unit. For a pragma given in a
package specification, the permission
extends to the end of the scope of the
named entity.
If the pragma includes a name, the
permission to omit the given check
is further restricted: it is given only
for operations on the named object
or on all objects of the base type of a
named type or subtype; for calls of a
named subprogram; for activations of
tasks of the named task type; or for
instantiations of the given generic unit
(see 11.7).
SUPPRESS_ALL This pragma has no argument and is
only allowed following a compilation
unit. This pragma specifies that
all run-time checks in the unit are
suppressed (see 11.7).
15 SYSTEM_NAME Takes an enumeration literal as the
single argument. This pragma is only
allowed at the start of a compilation,
before the first compilation unit
(if any) of the compilation. The effect of
this pragma is to use the enumeration
literal with the specified identifier
for the definition of the constant
SYSTEM_NAME. This pragma is
only allowed if the specified identifier
corresponds to one of the literals of the
B–17
type NAME declared in the package
SYSTEM (see 13.7).
TASK_STORAGE Takes the simple name of a task
type and a static expression of some
integer type as arguments. This
pragma is allowed anywhere that a
task storage specification is allowed;
that is, the declaration of the task
type to which the pragma applies and
the pragma must both occur (in this
order) immediately within the same
declarative part, package specification,
or task specification. The effect of
this pragma is to use the value of the
expression as the number of storage
units (bytes) to be allocated as guard
storage. The value is rounded up to
an appropriate boundary. A negative
value causes the pragma to be ignored.
A zero value has system-specific
results: on OpenVMS VAX systems,
a value of zero results in no guard
storage; on OpenVMS Alpha and DEC
OSF/1 or ULTRIX systems, a value of
zero results in a minimal guard area
(see 13.2a).
TIME_SLICE On OpenVMS and Digital UNIX
systems only.
Takes a static expression of the
predefined fixed point type DURATION
(in the package STANDARD) as the
single argument. This pragma is only
allowed in the outermost declarative
part of a library subprogram, and
at most one such pragma is allowed
in a library subprogram. It has an
effect only when the subprogram to
which it applies is used as a main
program. This pragma causes the task
scheduler to turn time slicing on or
off and, on some systems, to limit the
B–18
amount of continuous execution time
given to a task (see 9.8a; see also the
appropriate run-time reference manual
for implementation differences across
systems).
TITLE Takes a title or a subtitle string, or
both, as arguments. The pragma
TITLE has the following form:
pragma TITLE (titling-option
[,titling-option]);
titling-option :=
[TITLE =>] string_literal
| [SUBTITLE =>] string_literal
This pragma is allowed anywhere a
pragma is allowed; the given strings
supersede the default title and/or
subtitle portions of a compilation
listing.
VOLATILE Takes the simple name of a variable
as the single argument. This pragma
is only allowed for a variable declared
by an object declaration. The variable
declaration and the pragma must
both occur (in this order) immediately
within the same declarative part or
package specification. The pragma
must appear before any occurrence of
the name of the variable other than
in an address clause or in one of the
DEC Ada pragmas IMPORT_OBJECT,
EXPORT_OBJECT, COMMON_
OBJECT, or PSECT_OBJECT. The
variable cannot be declared by a
renaming declaration. The pragma
VOLATILE specifies that the variable
may be modified asynchronously. This
pragma instructs the compiler to obtain
the value of a variable from memory
each time it is used (see 9.11).
B–19
C
Predefined Language Environment
C–1
type LONG_INTEGER is implementation_defined;
C–2
-- function "+" (LEFT, RIGHT : FLOAT) return FLOAT;
-- function "-" (LEFT, RIGHT : FLOAT) return FLOAT;
-- function "*" (LEFT, RIGHT : FLOAT) return FLOAT;
-- function "/" (LEFT, RIGHT : FLOAT) return FLOAT;
-- function "**" (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT;
10 -- An implementation may provide additional predefined floating point
-- types. It is recommended that the names of such additional types
-- end with FLOAT as in SHORT_FLOAT or LONG_FLOAT. The specification
-- of each operator for the type universal_real, or for any additional
-- predefined floating point type, is obtained by replacing FLOAT by
-- the name of the type in the specification of the corresponding
-- operator of the type FLOAT.
type LONG_FLOAT is implementation_defined;
type LONG_LONG_FLOAT is implementation_defined;
11 -- In addition, the following operators are predefined for
-- universal types:
-- function "*" (LEFT : universal_integer;
-- RIGHT : universal_real) return universal_real;
-- function "*" (LEFT : universal_real;
-- RIGHT : universal_integer) return universal_real;
-- function "/" (LEFT : universal_real;
type {universal_fixed} is {delta unbounded range unbounded .. unbounded};
-- The type universal_fixed is predefined. The only operators
-- declared for this type are
-- function "*" (LEFT : any_fixed_point_type;
-- RIGHT : any_fixed_point_type)
-- return universal_fixed;
-- function "/" (LEFT : any_fixed_point_type;
-- RIGHT : any_fixed_point_type)
-- return universal_fixed;
12 -- The following characters form the standard Latin-1 character set.
-- Character literals corresponding to control characters are not
-- identifiers; they are indicated in italics in this definition.
C–3
13 type CHARACTER is
(nul, soh, stx, etx, eot, enq, ack, bel,
bs, ht, lf, vt, ff, cr, so, si,
dle, dc1, dc2, dc3, dc4, nak, syn, etb,
can, em, sub, esc, fs, gs, rs, us,
’ ’, ’!’, ’"’, ’#’, ’$’, ’%’, ’&’, ’’’,
’(’, ’)’, ’*’, ’+’, ’,’, ’-’, ’.’, ’/’,
’0’, ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’,
’8’, ’9’, ’:’, ’;’, ’<’, ’=’, ’>’, ’?’,
’@’, ’A’, ’B’, ’C’, ’D’, ’E’, ’F’, ’G’,
’H’, ’I’, ’J’, ’K’, ’L’, ’M’, ’N’, ’O’,
’P’, ’Q’, ’R’, ’S’, ’T’, ’U’, ’V’, ’W’,
’X’, ’Y’, ’Z’, ’[’, ’\’, ’]’, ’^’, ’_’,
’‘’, ’a’, ’b’, ’c’, ’d’, ’e’, ’f’, ’g’,
’h’, ’i’, ’j’, ’k’, ’l’, ’m’, ’n’, ’o’,
’p’, ’q’, ’r’, ’s’, ’t’, ’u’, ’v’, ’w’,
’x’, ’y’, ’z’, ’{’, ’|’, ’}’, ’~’, del,
C–4
14 -- The predefined operators for the type CHARACTER are the same
-- as for any enumeration type.
15 package ASCII is
-- Control characters:
NUL : constant CHARACTER := nul;
SOH : constant CHARACTER := soh;
STX : constant CHARACTER := stx;
ETX : constant CHARACTER := etx;
EOT : constant CHARACTER := eot;
ENQ : constant CHARACTER := enq;
ACK : constant CHARACTER := ack;
BEL : constant CHARACTER := bel;
BS : constant CHARACTER := bs;
HT : constant CHARACTER := ht;
LF : constant CHARACTER := lf;
VT : constant CHARACTER := vt;
FF : constant CHARACTER := ff;
CR : constant CHARACTER := cr;
SO : constant CHARACTER := so;
SI : constant CHARACTER := si;
DLE : constant CHARACTER := dle;
DC1 : constant CHARACTER := dc1;
DC2 : constant CHARACTER := dc2;
DC3 : constant CHARACTER := dc3;
DC4 : constant CHARACTER := dc4;
NAK : constant CHARACTER := nak;
SYN : constant CHARACTER := syn;
ETB : constant CHARACTER := etb;
CAN : constant CHARACTER := can;
EM : constant CHARACTER := em;
SUB : constant CHARACTER := sub;
ESC : constant CHARACTER := esc;
FS : constant CHARACTER := fs;
GS : constant CHARACTER := gs;
RS : constant CHARACTER := rs;
US : constant CHARACTER := us;
DEL : constant CHARACTER := del;
C–5
-- Other characters:
EXCLAM : constant CHARACTER := ’!’;
QUOTATION : constant CHARACTER := ’"’;
SHARP : constant CHARACTER := ’#’;
DOLLAR : constant CHARACTER := ’$’;
PERCENT : constant CHARACTER := ’%’;
AMPERSAND : constant CHARACTER := ’&’;
COLON : constant CHARACTER := ’:’;
SEMICOLON : constant CHARACTER := ’;’;
QUERY : constant CHARACTER := ’?’;
AT_SIGN : constant CHARACTER := ’@’;
L_BRACKET : constant CHARACTER := ’[’;
BACK_SLASH : constant CHARACTER := ’\’;
R_BRACKET : constant CHARACTER := ’]’;
CIRCUMFLEX : constant CHARACTER := ’^’;
UNDERLINE : constant CHARACTER := ’_’;
GRAVE : constant CHARACTER := ’‘’;
L_BRACE : constant CHARACTER := ’{’;
BAR : constant CHARACTER := ’|’;
R_BRACE : constant CHARACTER := ’}’;
TILDE : constant CHARACTER := ’~’;
-- Lower case letters:
LC_A : constant CHARACTER := ’a’;
...
LC_Z : constant CHARACTER := ’z’;
end ASCII;
16 -- Predefined subtypes:
subtype NATURAL is INTEGER range 0 .. INTEGER’LAST;
subtype POSITIVE is INTEGER range 1 .. INTEGER’LAST;
17 -- Predefined string type:
type STRING is array(POSITIVE range <>) of CHARACTER;
pragma PACK(STRING);
18 -- The predefined operators for this type are as follows:
-- function "=" (LEFT, RIGHT : STRING) return BOOLEAN;
-- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN;
-- function "<" (LEFT, RIGHT : STRING) return BOOLEAN;
-- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN;
-- function ">" (LEFT, RIGHT : STRING) return BOOLEAN;
-- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN;
C–6
-- function "&" (LEFT : STRING;
-- RIGHT : STRING) return STRING;
-- function "&" (LEFT : CHARACTER;
-- RIGHT : STRING) return STRING;
-- function "&" (LEFT : STRING;
-- RIGHT : CHARACTER) return STRING;
-- function "&" (LEFT : CHARACTER;
-- RIGHT : CHARACTER) return STRING;
19 type DURATION is delta implementation_defined
range implementation_defined;
-- The predefined operators for the type DURATION are the same
-- as for any fixed point type.
20 -- The predefined exceptions:
CONSTRAINT_ERROR : exception;
NUMERIC_ERROR : exception;
PROGRAM_ERROR : exception;
STORAGE_ERROR : exception;
TASKING_ERROR : exception;
end STANDARD;
21 Certain aspects of the predefined entities cannot be completely described in
the language itself. For example, although the enumeration type BOOLEAN
can be written showing the two enumeration literals FALSE and TRUE, the
short-circuit control forms cannot be expressed in the language.
Note:
22 The language definition predefines the following library units:1
- The package CALENDAR (see 9.6)
1
See also Appendix G, AI-00355.
C–7
- The generic package DIRECT_IO (see 14.2.5)
- The package TEXT_IO (see 14.3.10)
- The package IO_EXCEPTIONS (see 14.5)
- The package LOW_LEVEL_IO (see 14.6)
C–8
D
Glossary
This appendix is informative and is not part of the standard definition of the
Ada programming language. Italicized terms in the abbreviated descriptions
below either have glossary entries themselves or are described in entries for
related terms.
Accept statement.
See entry.
Access type.
A value of an access type (an access value) is either a null value, or a value
that designates an object created by an allocator. The designated object can
be read and updated via the access value. The definition of an access type
specifies the type of the objects designated by values of the access type. See
also collection.
Actual parameter.
See parameter.
Aggregate.
The evaluation of an aggregate yields a value of a composite type. The value
is specified by giving the value of each of the components. Either positional
association or named association may be used to indicate which value is
associated with which component.
Allocator.
The evaluation of an allocator creates an object and returns a new access value
which designates the object.
D–1
Array type.
A value of an array type consists of components which are all of the
same subtype (and hence, of the same type). Each component is uniquely
distinguished by an index (for a one-dimensional array) or by a sequence
of indices (for a multidimensional array). Each index must be a value of a
discrete type and must lie in the correct index range.
Assignment.
Assignment is the operation that replaces the current value of a variable by a
new value. An assignment statement specifies a variable on the left, and on the
right, an expression whose value is to be the new value of the variable.
Attribute.
The evaluation of an attribute yields a predefined characteristic of a named
entity; some attributes are functions.
Bit array.
A bit array is an array whose components are not byte aligned, yet which is
also not a bit string.
Bit string.
A bit string is any one-dimensional array of a discrete type whose components
occupy successive single bits.
Block statement.
A block statement is a single statement that may contain a sequence of
statements. It may also include a declarative part, and exception handlers;
their effects are local to the block statement.
Body.
A body defines the execution of a subprogram, package, or task. A body stub
is a form of body that indicates that this execution is defined in a separately
compiled subunit.
D–2
Box.
A box is an Ada delimiter ( <> ) used to denote an undefined discrete range for
array types and generic formal types.
Collection.
A collection is the entire set of objects created by evaluation of allocators for an
access type.
Compilation unit.
A compilation unit is the declaration or the body of a program unit, presented
for compilation as an independent text. It is optionally preceded by a context
clause, naming other compilation units upon which it depends by means of one
or more with clauses.
Component.
A component is a value that is a part of a larger value, or an object that is part
of a larger object.
Composite type.
A composite type is one whose values have components. There are two kinds of
composite type: array types and record types.
Constant.
See object.
Constraint.
A constraint determines a subset of the values of a type. A value in that subset
satisfies the constraint.
Context clause.
See compilation unit.
D–3
Contiguous array.
A contiguous array is one in which the storage of the array components is
allocated without any separation between adjacent components.
Declaration.
A declaration associates an identifier (or some other notation) with an entity.
This association is in effect within a region of text called the scope of the
declaration. Within the scope of a declaration, there are places where it is
possible to use the identifier to refer to the associated declared entity. At such
places the identifier is said to be a simple name of the entity; the name is said
to denote the associated entity.
Declarative Part.
A declarative part is a sequence of declarations. It may also contain related
information such as subprogram bodies and representation clauses.
Denote.
See declaration.
Derived Type.
A derived type is a type whose operations and values are replicas of those of an
existing type. The existing type is called the parent type of the derived type.
Descriptor.
A descriptor is a data structure used for parameter passing. The descriptor
contains the address, data type, and size of the parameter, as well as other
information needed to fully describe the data being passed.
Designate.
See access type, task.
Direct visibility.
See visibility.
Discrete Type.
A discrete type is a type which has an ordered set of distinct values. The
discrete types are the enumeration and integer types. Discrete types are used
for indexing and iteration, and for choices in case statements and record
variants.
D–4
Discriminant.
A discriminant is a distinguished component of an object or value of a record
type. The subtypes of other components, or even their presence or absence, may
depend on the value of the discriminant.
Discriminant constraint.
A discriminant constraint on a record type or private type specifies a value for
each discriminant of the type.
Elaboration.
The elaboration of a declaration is the process by which the declaration
achieves its effect (such as creating an object); this process occurs during
program execution.
Entry.
An entry is used for communication between tasks. Externally, an entry is
called just as a subprogram is called; its internal behavior is specified by one
or more accept statements specifying the actions to be performed when the
entry is called.
Enumeration type.
An enumeration type is a discrete type whose values are represented by
enumeration literals which are given explicitly in the type declaration. These
enumeration literals are either identifiers or character literals.
Evaluation.
The evaluation of an expression is the process by which the value of the
expression is computed. This process occurs during program execution.
Exception.
An exception is an error situation which may arise during program execution.
To raise an exception is to abandon normal program execution so as to signal
that the error has taken place. An exception handler is a portion of program
text specifying a response to the exception. Execution of such a program text
is called handling the exception.
Expanded name.
An expanded name denotes an entity which is declared immediately within
some construct. An expanded name has the form of a selected component:
the prefix denotes the construct (a program unit; or a block, loop, or accept
statement); the selector is the simple name of the entity.
D–5
Expression.
An expression defines the computation of a value.
Formal parameter.
See parameter.
Function.
See subprogram.
Generic unit.
A generic unit is a template either for a set of subprograms or for a set of
packages. A subprogram or package created using the template is called an
instance of the generic unit. A generic instantiation is the kind of declaration
that creates an instance. A generic unit is written as a subprogram or package
but with the specification prefixed by a generic formal part which may declare
generic formal parameters. A generic formal parameter is either a type, a
subprogram, or an object. A generic unit is one of the kinds of program unit.
Global symbol.
A symbol defined in an OpenVMS module (such as a source, object, or image
module) or Digital UNIX object file that is potentially available for reference by
another module or object file. The linker resolves global symbols. (The linker
matches references with definitions).
Handler.
See exception.
D–6
Index.
See array type.
Index constraint.
An index constraint for an array type specifies the lower and upper bounds for
each index range of the array type.
Indexed component.
An indexed component denotes a component in an array. It is a form of name
containing expressions which specify the values of the indices of the array
component. An indexed component may also denote an entry in a family of
entries.
Instance.
See generic unit.
Instantiation.
An instantiation is the creation of a particular instance of a generic unit. In
other words, the template defined by the generic package or subprogram is
named, and all generic parameters are replaced by actual parameters.
Integer type.
An integer type is a discrete type whose values represent all integer numbers
within a specific range.
Lexical element.
A lexical element is an identifier, a literal, a delimiter, or a comment.
Limited type.
A limited type is a type for which neither assignment nor the predefined
comparison for equality is implicitly declared. All task types are limited. A
private type can be defined to be limited. An equality operator can be explicitly
declared for a limited type.
Linker.
A system program that creates an executable program from one or more object
modules (OpenVMS) or object files (Digital UNIX) produced by a language
compiler or assembler. The linker resolves external references, acquires
referenced library routines, and performs other processing required to create
executable images (OpenVMS) or object files (Digital UNIX).
D–7
Literal.
A literal represents a value literally, that is, by means of letters and other
characters. A literal is either a numeric literal, an enumeration literal, a
character literal, or a string literal.
Membership test.
A membership test is a basic operation that indicates whether a given value is
contained in a given range or subtype.
Mode.
See parameter.
Model number.
A model number is an exactly representable value of a real type. Operations
of a real type are defined in terms of operations on the model numbers of the
type. The properties of the model numbers and of their operations are the
minimal properties preserved by all implementations of the real type.
Name.
A name is a construct that stands for an entity: it is said that the name
denotes the entity, and that the entity is the meaning of the name. See also
declaration, prefix.
Named association.
A named association specifies the association of an item with one or more
positions in a list, by naming the positions.
Noncontiguous array.
A noncontiguous array is a descriptor class. A noncontiguous array is one
in which the storage of the array components may be allocated with a fixed,
nonzero number of bytes separating logically adjacent components.
Object.
An object contains a value. A program creates an object either by elaborating
an object declaration or by evaluating an allocator. The declaration or allocator
specifies a type for the object: the object can only contain values of that type.
D–8
Object module (OpenVMS term).
The binary output of an OpenVMS language processor (such as an assembler
or compiler), which is used as input to the OpenVMS Linker.
Operation.
An operation is an elementary action associated with one or more types. It is
either implicitly declared by the declaration of the type, or it is a subprogram
that has a parameter or result of the type.
Operator.
An operator is an operation which has one or two operands. A unary operator
is written before an operand; a binary operator is written between two
operands. This notation is a special kind of function call. An operator can
be declared as a function. Many operators are implicitly declared by the
declaration of a type (for example, most type declarations imply the declaration
of the equality operator for values of the type).
Overloading.
An identifier can have several alternative meanings at a given point in the
program text: this property is called overloading. For example, an overloaded
enumeration literal can be an identifier that appears in the definitions of two
or more enumeration types. The effective meaning of an overloaded identifier
is determined by the context. Subprograms, aggregates, allocators, and string
literals can also be overloaded.
Packable.
A type is packable if storage for objects of the type can be aligned on an
arbitrary bit boundary.
Package.
A package specifies a group of logically related entities, such as types, objects
of those types, and subprograms with parameters of those types. It is written
as a package declaration and a package body. The package declaration
has a visible part, containing the declarations of all entities that can be
explicitly used outside the package. It may also have a private part containing
structural details that complete the specification of the visible entities, but
which are irrelevant to the user of the package. The package body contains
implementations of subprograms (and possibly tasks as other packages) that
have been specified in the package declaration. A package is one of the kinds
of program unit.
D–9
Parameter.
A parameter is one of the named entities associated with a subprogram, entry,
or generic unit, and used to communicate with the corresponding subprogram
body, accept statement or generic body. A formal parameter is an identifier
used to denote the named entity within the body. An actual parameter is
the particular entity associated with the corresponding formal parameter
by a subprogram call, entry call, or generic instantiation. The mode of a
formal parameter specifies whether the associated actual parameter supplies
a value for the formal parameter, or the formal supplies a value for the
actual parameter, or both. The association of actual parameters with formal
parameters can be specified by named associations, by positional associations,
or by a combination of these.
Parent type.
See derived type.
Positional association.
A positional association specifies the association of an item with a position in a
list, by using the same position in the text to specify the item.
Pragma.
A pragma conveys information to the compiler.
Prefix.
A prefix is used as the first part of certain kinds of name. A prefix is either a
function call or a name.
Private part.
See package.
Private type.
A private type is a type whose structure and set of values are clearly defined,
but not directly available to the user of the type. A private type is known
only by its discriminants (if any) and by the set of operations defined for it. A
private type and its applicable operations are defined in the visible part of a
package, or in a generic formal part. Assignment, equality, and inequality are
also defined for private types, unless the private type is limited.
Procedure.
See subprogram.
D–10
Program.
A program is composed of a number of compilation units, one of which is a
subprogram called the main program. Execution of the program consists of
execution of the main program, which may invoke subprograms declared in the
other compilation units of the program.
Program unit.
A program unit is any one of a generic unit, package, subprogram, or task unit.
Qualified expression.
A qualified expression is an expression preceded by an indication of its type or
subtype. Such qualification is used when, in its absence, the expression might
be ambiguous (for example as a consequence of overloading).
Raising an exception.
See exception.
Range.
A range is a contiguous set of values of a scalar type. A range is specified by
giving the lower and upper bounds for the values. A value in the range is said
to belong to the range.
Range constraint.
A range constraint of a type specifies a range, and thereby determines the
subset of the values of the type that belong to the range.
Real type.
A real type is a type whose values represent approximations to the real
numbers. There are two kinds of real type: fixed point types are specified
by absolute error bound; floating point types are specified by a relative error
bound expressed as a number of significant decimal digits.
D–11
Record type.
A value of a record type consists of components which are usually of different
types or subtypes. For each component of a record value or record object, the
definition of the record type specifies an identifier that uniquely determines
the component within the record.
Renaming declaration.
A renaming declaration declares another name for an entity.
Rendezvous.
A rendezvous is the interaction that occurs between two parallel tasks when
one task has called an entry of the other task, and a corresponding accept
statement is being executed by the other task on behalf of the calling task.
Representation clause.
A representation clause directs the compiler in the selection of the mapping
of a type, an object, or a task onto features of the underlying machine that
executes a program. In some cases, representation clauses completely specify
the mapping; in other cases, they provide criteria for choosing a mapping.
Satisfy.
See constraint, subtype.
Scalar type.
An object or value of a scalar type does not have components. A scalar type is
either a discrete type or a real type. The values of a scalar type are ordered.
Scope.
See declaration.
Selected component.
A selected component is a name consisting of a prefix and of an identifier
called the selector. Selected components are used to denote record components,
entries, and objects designated by access values; they are also used as expanded
names.
Selector.
See selected component.
D–12
Short circuit control form.
A short circuit control form is one of the reserved word pairs and then and or
else. Each has the same precedence as a logical operator.
Simple name.
See declaration, name.
Simple record.
A simple record type is one that does not have a variant part and in which any
constraint for each component and subcomponent is static. A simple record
subtype is either a simple record type or a static constrained subtype of a
record type (with discriminants) in which any constraint for each component
and subcomponent of the record type is static.
Statement.
A statement specifies one or more actions to be performed during the execution
of a program.
Subcomponent.
A subcomponent is either a component, or a component of another
subcomponent.
Subprogram.
A subprogram is either a procedure or a function. A procedure specifies a
sequence of actions and is invoked by a procedure call statement. A function
specifies a sequence of actions and also returns a value called the result, and
so a function call is an expression. A subprogram is written as a subprogram
declaration, which specifies its name, formal parameters, and (for a function)
its result; and a subprogram body which specifies the sequence of actions. The
subprogram call specifies the actual parameters that are to be associated with
the formal parameters. A subprogram is one of the kinds of program unit.
D–13
Subtype.
A subtype of a type characterizes a subset of the values of the type. The subset
is determined by a constraint on the type. Each value in the set of values of
a subtype belongs to the subtype and satisfies the constraint determining the
subtype.
Subunit.
See body.
Task.
A task operates in parallel with other parts of the program. It is written as
a task specification (which specifies the name of the task and the names and
formal parameters of its entries), and a task body which defines its execution.
A task unit is one of the kinds of program unit. A task type is a type that
permits the subsequent declaration of any number of similar tasks of the type.
A value of a task type is said to designate a task.
Thread.
A single, sequential flow of control within a program. Within a single thread,
there is a single point of execution. Most traditional programs consist of a
single thread.
Type.
A type characterizes both a set of values, and a set of operations applicable to
those values. A type definition is a language construct that defines a type. A
particular type is either an access type, an array type, a private type, a record
type, a scalar type, or a task type.
Use clause.
A use clause achieves direct visibility of declarations that appear in the visible
parts of named packages.
Variable.
See object.
Variant part.
A variant part of a record specifies alternative record components, depending
on a discriminant of the record. Each value of the discriminant establishes a
particular alternative of the variant part.
D–14
Visibility.
At a given point in a program text, the declaration of an entity with a certain
identifier is said to be visible if the entity is an acceptable meaning for an
occurrence at that point of the identifier. The declaration is visible by selection
at the place of the selector in a selected component or at the place of the name
in a named association. Otherwise, the declaration is directly visible, that is, if
the identifier alone has that meaning.
Visible part.
See package.
With clause.
See compilation unit.
D–15
E
Syntax Summary
Note
This syntax summary is not part of the standard definition of the Ada
programming language.
2.1
graphic_character ::= basic_graphic_character
| lower_case_letter | other_special_character
basic_graphic_character ::=
upper_case_letter | digit
| special_character | space_character
basic_character ::=
basic_graphic_character | format_effector
2.3
identifier ::=
letter {[underline] letter_or_digit}
letter_or_digit ::= letter | digit
letter ::= upper_case_letter | lower_case_letter
2.4
numeric_literal ::= decimal_literal | based_literal
2.4.1
decimal_literal ::= integer [.integer] [exponent]
integer ::= digit {[underline] digit}
exponent ::= E [+] integer | E - integer
E–1
2.4.2
based_literal ::=
base # based_integer [.based_integer] # [exponent]
base ::= integer
based_integer ::=
extended_digit {[underline] extended_digit}
extended_digit ::= digit | letter
2.5
character_literal ::= ’graphic_character’
2.6
string_literal ::= "{graphic_character}"
2.8
pragma ::=
pragma identifier [(argument_association
{, argument_association})];
argument_association ::=
[argument_identifier =>] name
| [argument_identifier =>] expression
3.1
basic_declaration ::=
object_declaration | number_declaration
| type_declaration | subtype_declaration
| subprogram_declaration | package_declaration
| task_declaration | generic_declaration
| exception_declaration | generic_instantiation
| renaming_declaration | deferred_constant_declaration
3.2
object_declaration ::=
identifier_list : [constant] subtype_indication
[:= expression];
| identifier_list : [constant] constrained_array_definition
[:= expression];
number_declaration ::=
identifier_list : constant := universal_static_expression;
identifier_list ::= identifier {, identifier}
E–2
3.3.1
type_declaration ::= full_type_declaration
| incomplete_type_declaration | private_type_declaration
full_type_declaration ::=
type identifier [discriminant_part] is type_definition;
type_definition ::=
enumeration_type_definition | integer_type_definition
| real_type_definition | array_type_definition
| record_type_definition | access_type_definition
| derived_type_definition
3.3.2
subtype_declaration ::=
subtype identifier is subtype_indication;
subtype_indication ::= type_mark [constraint]
type_mark ::= type_name | subtype_name
constraint ::=
range_constraint | floating_point_constraint
| fixed_point_constraint | index_constraint
| discriminant_constraint
3.4
derived_type_definition ::= new subtype_indication
3.5
range_constraint ::= range range
range ::= range_attribute
| simple_expression .. simple_expression
3.5.1
enumeration_type_definition ::=
(enumeration_literal_specification
{, enumeration_literal_specification})
enumeration_literal_specification ::= enumeration_literal
enumeration_literal ::= identifier | character_literal
3.5.4
integer_type_definition ::= range_constraint
3.5.6
real_type_definition ::=
floating_point_constraint | fixed_point_constraint
E–3
3.5.7
floating_point_constraint ::=
floating_accuracy_definition [range_constraint]
floating_accuracy_definition ::=
digits static_simple_expression
3.5.9
fixed_point_constraint ::=
fixed_accuracy_definition [range_constraint]
fixed_accuracy_definition ::=
delta static_simple_expression
3.6
array_type_definition ::=
unconstrained_array_definition
| constrained_array_definition
unconstrained_array_definition ::=
array(index_subtype_definition
{, index_subtype_definition}) of
component_subtype_indication
constrained_array_definition ::=
array index_constraint of component_subtype_indication
index_subtype_definition ::= type_mark range <>
index_constraint ::= (discrete_range {, discrete_range})
discrete_range ::= discrete_subtype_indication | range
3.7
record_type_definition ::=
record
component_list
end record
component_list ::=
component_declaration {component_declaration}
| {component_declaration} variant_part
| null;
component_declaration ::=
identifier_list : component_subtype_definition
[:= expression];
component_subtype_definition ::= subtype_indication
E–4
3.7.1
discriminant_part ::=
(discriminant_specification {; discriminant_specification})
discriminant_specification ::=
identifier_list : type_mark [:= expression]
3.7.2
discriminant_constraint ::=
(discriminant_association {, discriminant_association})
discriminant_association ::=
[discriminant_simple_name {| discriminant_simple_name} =>]
expression
3.7.3
variant_part ::=
case discriminant_simple_name is
variant
{variant}
end case;
variant ::=
when choice {| choice} =>
component_list
choice ::= simple_expression
| discrete_range | others | component_simple_name
3.8
access_type_definition ::= access subtype_indication
3.8.1
incomplete_type_declaration ::=
type identifier [discriminant_part];
3.9
declarative_part ::=
{basic_declarative_item} {later_declarative_item}
basic_declarative_item ::= basic_declaration
| representation_clause | use_clause
later_declarative_item ::= body
| subprogram_declaration | package_declaration
| task_declaration | generic_declaration
| use_clause | generic_instantiation
body ::= proper_body | body_stub
E–5
proper_body ::=
subprogram_body | package_body | task_body
4.1
name ::= simple_name
| character_literal | operator_symbol
| indexed_component | slice
| selected_component | attribute
simple_name ::= identifier
prefix ::= name | function_call
4.1.1
indexed_component ::= prefix(expression {, expression})
4.1.2
slice ::= prefix(discrete_range)
4.1.3
selected_component ::= prefix.selector
selector ::= simple_name
| character_literal | operator_symbol | all
4.1.4
attribute ::= prefix’attribute_designator
attribute_designator ::=
simple_name [(universal_static_expression)]
4.3
aggregate ::=
(component_association {, component_association})
component_association ::=
[choice {| choice} => ] expression
4.4
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
relation ::=
simple_expression [relational_operator simple_expression]
| simple_expression [not] in range
| simple_expression [not] in type_mark
simple_expression ::=
[unary_adding_operator] term {binary_adding_operator term}
E–6
term ::= factor {multiplying_operator factor}
factor ::= primary [** primary] | abs primary | not primary
primary ::=
numeric_literal | null | aggregate | string_literal
| name | allocator | function_call | type_conversion
| qualified_expression | (expression)
4.5
logical_operator ::= and | or | xor
relational_operator ::= = | /= | < | <= |> | >=
binary_adding_operator ::= + | - | &
unary_adding_operator ::= + | -
multiplying_operator ::= * | / | mod | rem
highest_precedence_operator ::= ** | abs | not
4.6
type_conversion ::= type_mark(expression)
4.7
qualified_expression ::=
type_mark’(expression) | type_mark’aggregate
4.8
allocator ::=
new subtype_indication | new qualified_expression
5.1
sequence_of_statements ::= statement {statement}
statement ::=
{label} simple_statement | {label} compound_statement
simple_statement ::= null_statement
| assignment_statement | procedure_call_statement
| exit_statement | return_statement
| goto_statement | entry_call_statement
| delay_statement | abort_statement
| raise_statement | code_statement
compound_statement ::=
if_statement | case_statement
| loop_statement | block_statement
| accept_statement | select_statement
E–7
label ::= <<label_simple_name>>
null_statement ::= null;
5.2
assignment_statement ::=
variable_name := expression;
5.3
if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
condition ::= boolean_expression
5.4
case_statement ::=
case expression is
case_statement_alternative
{case_statement_alternative}
end case;
case_statement_alternative ::=
when choice {| choice } =>
sequence_of_statements
5.5
loop_statement ::=
[loop_simple_name:]
[iteration_scheme] loop
sequence_of_statements
end loop [loop_simple_name];
iteration_scheme ::= while condition
| for loop_parameter_specification
E–8
loop_parameter_specification ::=
identifier in [reverse] discrete_range
5.6
block_statement ::=
[block_simple_name:]
[declare
declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]
end [block_simple_name];
5.7
exit_statement ::=
exit [loop_name] [when condition];
5.8
return_statement ::= return [expression];
5.9
goto_statement ::= goto label_name;
6.1
subprogram_declaration ::= subprogram_specification;
subprogram_specification ::=
procedure identifier [formal_part]
| function designator [formal_part] return type_mark
designator ::= identifier | operator_symbol
operator_symbol ::= string_literal
formal_part ::=
(parameter_specification {; parameter_specification})
parameter_specification ::=
identifier_list : mode type_mark [:= expression]
E–9
mode ::= [in] | in out | out
6.3
subprogram_body ::=
subprogram_specification is
[declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]
end [designator];
6.4
procedure_call_statement ::=
procedure_name [actual_parameter_part];
function_call ::=
function_name [actual_parameter_part]
actual_parameter_part ::=
(parameter_association {, parameter_association})
parameter_association ::=
[formal_parameter =>] actual_parameter
formal_parameter ::= parameter_simple_name
actual_parameter ::=
expression | variable_name | type_mark(variable_name)
7.1
package_declaration ::= package_specification;
package_specification ::=
package identifier is
{basic_declarative_item}
[private
{basic_declarative_item}]
end [package_simple_name]
package_body ::=
package body package_simple_name is
[declarative_part]
[begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]]
end [package_simple_name];
7.4
private_type_declaration ::=
type identifier [discriminant_part] is [limited] private;
E–10
deferred_constant_declaration ::=
identifier_list : constant type_mark;
8.4
use_clause ::= use package_name {, package_name};
8.5
renaming_declaration ::=
identifier : type_mark renames object_name;
| identifier : exception renames exception_name;
| package identifier renames package_name;
| subprogram_specification renames subprogram_or_entry_name;
9.1
task_declaration ::= task_specification;
task_specification ::=
task [type] identifier [is
{entry_declaration}
{representation_clause}
end [task_simple_name]]
task_body ::=
task body task_simple_name is
[declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]
end [task_simple_name];
9.5
entry_declaration ::=
entry identifier [(discrete_range)] [formal_part];
entry_call_statement ::=
entry_name [actual_parameter_part];
accept_statement ::=
accept entry_simple_name [(entry_index)] [formal_part] [do
sequence_of_statements
end [entry_simple_name]];
entry_index ::= expression
9.6
delay_statement ::= delay simple_expression;
9.7
select_statement ::= selective_wait
| conditional_entry_call | timed_entry_call
E–11
9.7.1
selective_wait ::=
select
select_alternative
{or
select_alternative}
[else
sequence_of_statements]
end select;
select_alternative ::=
[when condition =>]
selective_wait_alternative
selective_wait_alternative ::= accept_alternative
| delay_alternative | terminate_alternative
accept_alternative ::=
accept_statement [sequence_of_statements]
delay_alternative ::=
delay_statement [sequence_of_statements]
terminate_alternative ::= terminate;
9.7.2
conditional_entry_call ::=
select
entry_call_statement
[sequence_of_statements]
else
sequence_of_statements
end select;
9.7.3
timed_entry_call ::=
select
entry_call_statement
[sequence_of_statements]
or
delay_alternative
end select;
E–12
9.10
abort_statement ::= abort task_name {, task_name};
10.1
compilation ::= {compilation_unit}
compilation_unit ::=
context_clause library_unit
| context_clause secondary_unit
library_unit ::=
subprogram_declaration | package_declaration
| generic_declaration | generic_instantiation
| subprogram_body
secondary_unit ::= library_unit_body | subunit
library_unit_body ::= subprogram_body | package_body
10.1.1
context_clause ::= {with_clause {use_clause}}
with_clause ::=
with unit_simple_name {, unit_simple_name};
10.2
body_stub ::=
subprogram_specification is separate;
| package body package_simple_name is separate;
| task body task_simple_name is separate;
subunit ::= separate (parent_unit_name) proper_body
11.1
exception_declaration ::= identifier_list : exception;
11.2
exception_handler ::=
when exception_choice {| exception_choice} =>
sequence_of_statements
exception_choice ::= exception_name | others
11.3
raise_statement ::= raise [exception_name];
12.1
generic_declaration ::= generic_specification;
generic_specification ::=
generic_formal_part subprogram_specification
| generic_formal_part package_specification
E–13
generic_formal_part ::=
generic {generic_parameter_declaration}
generic_parameter_declaration ::=
identifier_list : [in [out]] type_mark [:= expression];
| type identifier is generic_type_definition;
| private_type_declaration
| with subprogram_specification [is name];
| with subprogram_specification [is <>];
generic_type_definition ::=
(<>) | range <> | digits <> | delta <>
| array_type_definition | access_type_definition
12.3
generic_instantiation ::=
package identifier is
new generic_package_name [generic_actual_part];
| procedure identifier is
new generic_procedure_name [generic_actual_part];
| function designator is
new generic_function_name [generic_actual_part];
generic_actual_part ::=
(generic_association {, generic_association})
generic_association ::=
[generic_formal_parameter =>] generic_actual_parameter
generic_formal_parameter ::=
parameter_simple_name | operator_symbol
generic_actual_parameter ::= expression | variable_name
| subprogram_name | entry_name | type_mark
13.1
representation_clause ::=
type_representation_clause | address_clause
type_representation_clause ::= length_clause
| enumeration_representation_clause
| record_representation_clause
13.2
length_clause ::= for attribute use simple_expression;
13.1a
alignment_choice ::=
COMPONENT_SIZE | COMPONENT_SIZE_4
| DEFAULT | STORAGE_UNIT
E–14
13.2b
main_storage_option ::=
[WORKING_STORAGE =>] static_simple_expression
| [TOP_GUARD =>] static_simple_expression
13.3
enumeration_representation_clause ::=
for type_simple_name use aggregate;
13.4
record_representation_clause ::=
for type_simple_name use
record [alignment_clause]
{component_clause}
end record;
alignment_clause ::= at mod static_simple_expression;
component_clause ::=
component_name at static_simple_expression
range static_range;
13.5
address_clause ::=
for simple_name use at simple_expression;
13.8
code_statement ::= type_mark’record_aggregate;
13.9a
external_designator ::= [EXTERNAL =>] external_symbol
external_symbol ::= identifier | string_literal
import_export_pragma_name ::=
COMMON_OBJECT
| EXPORT_EXCEPTION -- OpenVMS systems only
| EXPORT_FUNCTION | EXPORT_OBJECT
| EXPORT_PROCEDURE | EXPORT_VALUED_PROCEDURE
| IMPORT_EXCEPTION -- OpenVMS systems only
| IMPORT_FUNCTION | IMPORT_OBJECT
| IMPORT_PROCEDURE | IMPORT_VALUED_PROCEDURE
| PSECT_OBJECT -- OpenVMS systems only
internal_name ::=
[INTERNAL =>] simple_name
| [INTERNAL =>] operator_symbol -- EXPORT_FUNCTION and
-- IMPORT_FUNCTION only
E–15
13.9a.1.1
class_name ::= UBS | UBSB | UBA | S | SB | A | NCA
mechanism ::=
mechanism_name | (mechanism_association {, mechanism_association })
mechanism_association ::=
[formal_parameter =>] mechanism_name
mechanism_name ::=
VALUE
| REFERENCE
| DESCRIPTOR [([CLASS =>] class_name)] -- OpenVMS
-- systems only
parameter_types ::= null | type_mark {, type_mark}
13.9b (pragma INTERFACE_NAME)
external_name ::= string_literal
B (pragma TITLE)
titling_option ::=
[TITLE =>] string_literal
| [SUBTITLE =>] string_literal
E–16
abort_statement 9.10
simple_statement 5.1
abs ...
factor 4.4
highest_precedence_operator 4.5
accept ...
accept_statement 9.5
accept_alternative 9.7.1
selective_wait_alternative 9.7.1
accept_statement 9.5
accept_alternative 9.7.1
compound_statement 5.1
access ...
access_type_definition 3.8
access_type_definition 3.8
generic_type_definition 12.1
type_definition 3.3.1
actual_parameter 6.4
parameter_association 6.4
actual_parameter_part 6.4
entry_call_statement 9.5
function_call 6.4
procedure_call_statement 6.4
address_clause 13.5
representation_clause 13.1
aggregate 4.3
code_statement 13.8
enumeration_representation_clause 13.3
primary 4.4
qualified_expression 4.7
alignment_choice 13.1a
alignment_clause 13.4
record_representation_clause 13.4
all ...
selector 4.1.3
allocator 4.8
primary 4.4
and ...
expression 4.4
logical_operator 4.5
E–17
argument_association 2.8
pragma 2.8
array ...
constrained_array_definition 3.6
unconstrained_array_definition 3.6
array_type_definition 3.6
generic_type_definition 12.1
type_definition 3.3.1
assignment_statement 5.2
simple_statement 5.1
at ...
address_clause 13.5
alignment_clause 13.4
component_clause 13.4
attribute 4.1.4
length_clause 13.2
name 4.1
range 3.5
attribute_designator 4.1.4
attribute 4.1.4
base 2.4.2
based_literal 2.4.2
based_integer 2.4.2
based_literal 2.4.2
based_literal 2.4.2
numeric_literal 2.4
basic_character 2.1
basic_declaration 3.1
basic_declarative_item 3.9
basic_declarative_item 3.9
declarative_part 3.9
package_specification 7.1
basic_graphic_character 2.1
basic_character 2.1
graphic_character 2.1
begin ...
block_statement 5.6
package_body 7.1
subprogram_body 6.3
task_body 9.1
E–18
binary_adding_operator 4.5
simple_expression 4.4
block_statement 5.6
compound_statement 5.1
body 3.9
later_declarative_item 3.9
body ...
body_stub 10.2
package_body 7.1
task_body 9.1
body_stub 10.2
body 3.9
case ...
case_statement 5.4
variant_part 3.7.3
case-statement 5.4
compound_statement 5.1
case_statement_alternative 5.4
case_statement 5.4
character_literal 2.5
enumeration_literal 3.5.1
name 4.1
selector 4.1.3
choice 3.7.3
case_statement_alternative 5.4
component_association 4.3
variant 3.7.3
class_name 13.9a.1.1
code_statement 13.8
simple_statement 5.1
compilation 10.1
compilation_unit 10.1
compilation 10.1
component_association 4.3
aggregate 4.3
component_clause 13.4
record_representation_clause 13.4
component_declaration 3.7
component_list 3.7
E–19
component_list 3.7
record_type_definition 3.7
variant 3.7.3
component_subtype_definition 3.7
component_declaration 3.7
compound_statement 5.1
statement 5.1
condition 5.3
exit_statement 5.7
if_statement 5.3
iteration_scheme 5.5
select_alternative 9.7.1
conditional_entry_call 9.7.2
select_statement 9.7
constant ...
deferred_constant_declaration 7.4
number_declaration 3.2
object_declaration 3.2
constrained_array_definition 3.6
array_type_definition 3.6
object_declaration 3.2
constraint 3.3.2
subtype_indication 3.3.2
context_clause 10.1.1
compilation_unit 10.1
decimal_literal 2.4.1
numeric_literal 2.4
declarative_part 3.9
block_statement 5.6
package_body 7.1
subprogram_body 6.3
task_body 9.1
declare ...
block_statement 5.6
deferred_constant_declaration 7.4
basic_declaration 3.1
delay ...
delay_statement 9.6
delay_alternative 9.7.1
selective_wait_alternative 9.7.1
timed_entry_call 9.7.3
E–20
delay_statement 9.6
delay_alternative 9.7.1
simple_statement 5.1
delta ...
fixed_accuracy_definition 3.5.9
generic_type_definition 12.1
derived_type_definition 3.4
type_definition 3.3.1
designator 6.1
generic_instantiation 12.3
subprogram_body 6.3
subprogram_specification 6.1
digit ...
basic_graphic_character 2.1
extended_digit 2.4.2
integer 2.4.1
letter_or_digit 2.3
digits ...
floating_accuracy_definition 3.5.7
generic_type_definition 12.1
discrete_range 3.6
choice 3.7.3
entry_declaration 9.5
index_constraint 3.6
loop_parameter_specification 5.5
slice 4.1.2
discriminant_association 3.7.2
discriminant_constraint 3.7.2
discriminant_constraint 3.7.2
constraint 3.3.2
discriminant_part 3.7.1
full_type_declaration 3.3.1
incomplete_type_declaration 3.8.1
private_type_declaration 7.4
discriminant_specification 3.7.1
discriminant_part 3.7.1
do ...
accept_statement 9.5
E ...
exponent 2.4.1
E–21
else ...
conditional_entry_call 9.7.2
expression 4.4
if_statement 5.3
selective_wait 9.7.1
elsif ...
if_statement 5.3
end ...
accept_statement 9.5
block_statement 5.6
case_statement 5.4
conditional_entry_call 9.7.2
if_statement 5.3
loop_statement 5.5
package_body 7.1
package_specification 7.1
record_representation_clause 13.4
record_type_definition 3.7
selective_wait 9.7.1
subprogram_body 6.3
task_body 9.1
task_specification 9.1
timed_entry_call 9.7.3
variant_part 3.7.3
entry ...
entry_declaration 9.5
entry_call_statement 9.5
conditional_entry_call 9.7.2
simple_statement 5.1
timed_entry_call 9.7.3
entry_declaration 9.5
task_specification 9.1
entry_index 9.5
accept_statement 9.5
enumeration_literal 3.5.1
enumeration_literal_specification 3.5.1
enumeration_literal_specification 3.5.1
enumeration_type_definition 3.5.1
enumeration_representation_clause 13.3
type_representation_clause 13.1
enumeration_type_definition 3.5.1
type_definition 3.3.1
E–22
exception ...
block_statement 5.6
exception_declaration 11.1
package_body 7.1
renaming_declaration 8.5
subprogram_body 6.3
task_body 9.1
exception_choice 11.2
exception_handler 11.2
exception_declaration 11.1
basic_declaration 3.1
exception_handler 11.2
block_statement 5.6
package_body 7.1
subprogram_body 6.3
task_body 9.1
exit ...
exit_statement 5.7
exit_statement 5.7
simple_statement 5.1
exponent 2.4.1
based_literal 2.4.2
decimal_literal 2.4.1
expression 4.4
actual_parameter 6.4
argument_association 2.8
assignment_statement 5.2
attribute_designator 4.1.4
case_statement 5.4
component_association 4.3
component_declaration 3.7
condition 5.3
discriminant_association 3.7.2
discriminant_specification 3.7.1
entry_index 9.5
generic_actual_parameter 12.3
generic_parameter_declaration 12.1
indexed_component 4.1.1
number_declaration 3.2
object_declaration 3.2
parameter_specification 6.1
primary 4.4
qualified_expression 4.7
return_statement 5.8
type_conversion 4.6
E–23
extended_digit 2.4.2
based_integer 2.4.2
external_designator 13.9a
external_name 13.9b
external_symbol 13.9a
factor 4.4
term 4.4
fixed_accuracy_definition 3.5.9
fixed_point_constraint 3.5.9
fixed_point_constraint 3.5.9
constraint 3.3.2
real_type_definition 3.5.6
floating_accuracy_definition 3.5.7
floating_point_constraint 3.5.7
floating_point_constraint 3.5.7
constraint 3.3.2
real_type_definition 3.5.6
for ...
address_clause 13.5
enumeration_representation_clause 13.3
iteration_scheme 5.5
length_clause 13.2
record_representation_clause 13.4
formal_parameter 6.4
parameter_association 6.4
formal_part 6.1
accept_statement 9.5
entry_declaration 9.5
subprogram_specification 6.1
format_effector ...
basic_character 2.1
full_type_declaration 3.3.1
type_declaration 3.3.1
function ...
generic_instantiation 12.3
subprogram_specification 6.1
function_call 6.4
prefix 4.1
primary 4.4
generic ...
generic_formal_part 12.1
E–24
generic_actual_parameter 12.3
generic_association 12.3
generic_actual_part 12.3
generic_instantiation 12.3
generic_association 12.3
generic_actual_part 12.3
generic_declaration 12.1
basic_declaration 3.1
later_declarative_item 3.9
library_unit 10.1
generic_formal_parameter 12.3
generic_association 12.3
generic_formal_part 12.1
generic_specification 12.1
generic_instantiation 12.3
basic_declaration 3.1
later_declarative_item 3.9
library_unit 10.1
generic_parameter_declaration 12.1
generic_formal_part 12.1
generic_specification 12.1
generic_declaration 12.1
generic_type_definition 12.1
generic_parameter_declaration 12.1
goto ...
goto_statement 5.9
goto_statement 5.9
simple_statement 5.1
graphic_character 2.1
character_literal 2.5
string_literal 2.6
highest_precedence_operator 4.5
E–25
identifier 2.3
argument_association 2.8
designator 6.1
entry_declaration 9.5
enumeration_literal 3.5.1
full_type_declaration 3.3.1
generic_instantiation 12.3
generic_parameter_declaration 12.1
identifier_list 3.2
incomplete_type_declaration 3.8.1
loop_parameter_specification 5.5
package_specification 7.1
pragma 2.8
private_type_declaration 7.4
renaming_declaration 8.5
simple_name 4.1
subprogram_specification 6.1
subtype_declaration 3.3.2
task_specification 9.1
identifier_list 3.2
component_declaration 3.7
deferred_constant_declaration 7.4
discriminant_specification 3.7.1
exception_declaration 11.1
generic_parameter_declaration 12.1
number_declaration 3.2
object_declaration 3.2
parameter_specification 6.1
if ...
if_statement 5.3
if_statement 5.3
compound_statement 5.1
import_export_pragma_name 13.9a
in ...
generic_parameter_declaration 12.1
loop_parameter_specification 5.5
mode 6.1
relation 4.4
incomplete_type_declaration 3.8.1
type_declaration 3.3.1
index_constraint 3.6
constrained_array_definition 3.6
constraint 3.3.2
index_subtype_definition 3.6
unconstrained_array_definition 3.6
E–26
indexed_component 4.1.1
name 4.1
integer 2.4.1
base 2.4.2
decimal_literal 2.4.1
exponent 2.4.1
integer_type_definition 3.5.4
type_definition 3.3.1
internal_name 13.9a
is ...
body_stub 10.2
case_statement 5.4
full_type_declaration 3.3.1
generic_instantiation 12.3
generic_parameter_declaration 12.1
package_body 7.1
package_specification 7.1
private_type_declaration 7.4
subprogram_body 6.3
subtype_declaration 3.3.2
task_body 9.1
task_specification 9.1
variant_part 3.7.3
iteration_scheme 5.5
loop_statement 5.5
label 5.1
statement 5.1
later_declarative_item 3.9
declarative_part 3.9
length_clause 13.2
type_representation_clause 13.1
letter 2.3
extended_digit 2.4.2
identifier 2.3
letter_or_digit 2.3
letter_or_digit 2.3
identifier 2.3
library_unit 10.1
compilation_unit 10.1
library_unit_body 10.1
secondary_unit 10.1
E–27
limited ...
private_type_declaration 7.4
logical_operator 4.5
loop ...
loop_statement 5.5
loop_parameter_specification 5.5
iteration_scheme 5.5
loop_statement 5.5
compound_statement 5.1
lower_case_letter ...
graphic_character 2.1
letter 2.3
main_storage_option 13.2b
mechanism 13.9a.1.1
mechanism_association 13.9a.1.1
mechanism_name 13.9a.1.1
mod ...
alignment_clause 13.4
multiplying_operator 4.5
mode 6.1
parameter_specification 6.1
multiplying_operator 4.5
term 4.4
E–28
name 4.1
abort_statement 9.10
actual_parameter 6.4
argument_association 2.8
assignment_statement 5.2
component_clause 13.4
entry_call_statement 9.5
exception_choice 11.2
exit_statement 5.7
function_call 6.4
generic_actual_parameter 12.3
generic_instantiation 12.3
generic_parameter_declaration 12.1
goto_statement 5.9
prefix 4.1
primary 4.4
procedure_call_statement 6.4
raise_statement 11.3
renaming_declaration 8.5
subunit 10.2
type_mark 3.3.2
use_clause 8.4
new ...
allocator 4.8
derived_type_definition 3.4
generic_instantiation 12.3
not ...
factor 4.4
highest_precedence_operator 4.5
relation 4.4
null ...
component_list 3.7
null_statement 5.1
primary 4.4
null_statement 5.1
simple_statement 5.1
number_declaration 3.2
basic_declaration 3.1
numeric_literal 2.4
primary 4.4
object_declaration 3.2
basic_declaration 3.1
of ...
constrained_array_definition 3.6
unconstrained_array_definition 3.6
E–29
operator_symbol 6.1
designator 6.1
generic_formal_parameter 12.3
name 4.1
selector 4.1.3
or ...
expression 4.4
logical_operator 4.5
selective_wait 9.7.1
timed_entry_call 9.7.3
other_special_character ...
graphic_character 2.1
others ...
choice 3.7.3
exception_choice 11.2
out ...
generic_parameter_declaration 12.1
mode 6.1
package ...
body_stub 10.2
generic_instantiation 12.3
package_body 7.1
package_specification 7.1
renaming declaration 8.5
package_body 7.1
library_unit_body 10.1
proper_body 3.9
package_declaration 7.1
basic_declaration 3.1
later_declarative_item 3.9
library_unit 10.1
package_specification 7.1
generic_specification 12.1
package_declaration 7.1
parameter_association 6.4
actual_parameter_part 6.4
parameter_types 13.9a.1.1
parameter_specification 6.1
formal_part 6.1
pragma 2.8
pragma ...
pragma 2.8
E–30
prefix 4.1
attribute 4.1.4
indexed_component 4.1.1
selected_component 4.1.3
slice 4.1.2
primary 4.4
factor 4.4
private ...
package_specification 7.1
private_type_declaration 7.4
private_type_declaration 7.4
generic_parameter_declaration 12.1
type_declaration 3.3.1
procedure ...
generic_instantiation 12.3
subprogram_specification 6.1
procedure_call_statement 6.4
simple_statement 5.1
proper_body 3.9
body 3.9
subunit 10.2
qualified_expression 4.7
allocator 4.8
primary 4.4
raise ...
raise_statement 11.3
raise_statement 11.3
simple_statement 5.1
range 3.5
component_clause 13.4
discrete_range 3.6
range_constraint 3.5
relation 4.4
range ...
component_clause 13.4
generic_type_definition 12.1
index_subtype_definition 3.6
range_constraint 3.5
range_constraint 3.5
constraint 3.3.2
fixed_point_constraint 3.5.9
floating_point_constraint 3.5.7
integer_type_definition 3.5.4
E–31
real_type_definition 3.5.6
type_definition 3.3.1
record ...
record_representation_clause 13.4
record_type_definition 3.7
record_representation_clause 13.4
type_representation_clause 13.1
record_type_definition 3.7
type_definition 3.3.1
relation 4.4
expression 4.4
relational_operator 4.5
relation 4.4
rem ...
multiplying_operator 4.5
renames ...
renaming_declaration 8.5
renaming_declaration 8.5
basic_declaration 3.1
representation_clause 13.1
basic_declarative_item 3.9
task_specification 9.1
return ...
return_statement 5.8
subprogram_specification 6.1
return_statement 5.8
simple_statement 5.1
reverse ...
loop_parameter_specification 5.5
secondary_unit 10.1
compilation_unit 10.1
select ...
conditional_entry_call 9.7.2
selective_wait 9.7.1
timed_entry_call 9.7.3
select_alternative 9.7.1
selective_wait 9.7.1
select_statement 9.7
compound_statement 5.1
E–32
selected_component 4.1.3
name 4.1
selective_wait 9.7.1
select_statement 9.7
selective_wait_alternative 9.7.1
select_alternative 9.7.1
selector 4.1.3
selected_component 4.1.3
separate ...
body_stub 10.2
subunit 10.2
sequence_of_statements 5.1
accept_alternative 9.7.1
accept_statement 9.5
block_statement 5.6
case_statement_alternative 5.4
conditional_entry_call 9.7.2
delay_alternative 9.7.1
exception_handler 11.2
if_statement 5.3
loop_statement 5.5
package_body 7.1
selective_wait 9.7.1
subprogram_body 6.3
task_body 9.1
timed_entry_call 9.7.3
simple_expression 4.4
address_clause 13.5
alignment_clause 13.4
choice 3.7.3
component_clause 13.4
delay_statement 9.6
fixed_accuracy_definition 3.5.9
floating_accuracy_definition 3.5.7
length_clause 13.2
range 3.5
relation 4.4
E–33
simple_name 4.1
accept_statement 9.5
address_clause 13.5
attribute_designator 4.1.4
block_statement 5.6
body_stub 10.2
choice 3.7.3
discriminant_association 3.7.2
enumeration_representation_clause 13.3
formal_parameter 6.4
generic_formal_parameter 12.3
label 5.1
loop_statement 5.5
name 4.1
package_body 7.1
package_specification 7.1
record_representation_clause 13.4
selector 4.1.3
task_body 9.1
task_specification 9.1
variant_part 3.7.3
with_clause 10.1.1
simple_statement 5.1
statement 5.1
slice 4.1.2
name 4.1
space_character ...
basic_graphic_character 2.1
special_character ...
basic_graphic_character 2.1
statement 5.1
sequence_of_statements 5.1
string_literal 2.6
operator_symbol 6.1
primary 4.4
subprogram_body 6.3
library_unit 10.1
library_unit_body 10.1
proper_body 3.9
subprogram_declaration 6.1
basic_declaration 3.1
later_declarative_item 3.9
library_unit 10.1
E–34
subprogram_specification 6.1
body_stub 10.2
generic_parameter_declaration 12.1
generic_specification 12.1
renaming_declaration 8.5
subprogram_body 6.3
subprogram_declaration 6.1
subtype ...
subtype_declaration 3.3.2
subtype_declaration 3.3.2
basic_declaration 3.1
subtype_indication 3.3.2
access_type_definition 3.8
allocator 4.8
component_subtype_definition 3.7
constrained_array_definition 3.6
derived_type_definition 3.4
discrete_range 3.6
object_declaration 3.2
subtype_declaration 3.3.2
unconstrained_array_definition 3.6
subunit 10.2
secondary_unit 10.1
task ...
body_stub 10.2
task_body 9.1
task_specification 9.1
task_body 9.1
proper_body 3.9
task_declaration 9.1
basic_declaration 3.1
later_declarative_item 3.9
task_specification 9.1
task_declaration 9.1
term 4.4
simple_expression 4.4
terminate ...
terminate_alternative 9.7.1
terminate_alternative 9.7.1
selective_wait_alternative 9.7.1
then ...
expression 4.4
if_statement 5.3
E–35
timed_entry_call 9.7.3
select_statement 9.7
titling_option B (pragma TITLE)
type ...
full_type_declaration 3.3.1
generic_parameter_declaration 12.1
incomplete_type_declaration 3.8.1
private_type_declaration 7.4
task_specification 9.1
type_conversion 4.6
primary 4.4
type_declaration 3.3.1
basic_declaration 3.1
type_definition 3.3.1
full_type_declaration 3.3.1
type_mark 3.3.2
actual_parameter 6.4
code_statement 13.8
deferred_constant_declaration 7.4
discriminant_specification 3.7.1
generic_actual_parameter 12.3
generic_parameter_declaration 12.1
index_subtype_definition 3.6
parameter_specification 6.1
qualified_expression 4.7
relation 4.4
renaming_declaration 8.5
subprogram_specification 6.1
subtype_indication 3.3.2
type_conversion 4.6
type_representation_clause 13.1
representation_clause 13.1
unary_adding_operator 4.5
simple_expression 4.4
unconstrained_array_definition 3.6
array_type_definition 3.6
underline ...
based_integer 2.4.2
identifier 2.3
integer 2.4.1
upper_case_letter ...
basic_graphic_character 2.1
letter 2.3
E–36
use ...
address_clause 13.5
enumeration_representation_clause 13.3
length_clause 13.2
record_representation_clause 13.4
use_clause 8.4
use_clause 8.4
basic_declarative_item 3.9
context_clause 10.1.1
later_declarative_item 3.9
variant 3.7.3
variant_part 3.7.3
variant_part 3.7.3
component_list 3.7
when ...
case_statement_alternative 5.4
exception_handler 11.2
exit_statement 5.7
select_alternative 9.7.1
variant 3.7.3
while ...
iteration_scheme 5.5
with ...
generic_parameter_declaration 12.1
with_clause 10.1.1
with_clause 10.1.1
context_clause 10.1.1
xor ...
expression 4.4
logical_operator 4.5
" ...
string_literal 2.6
# ...
based_literal 2.4.2
& ...
binary_adding_operator 4.5
’ ...
attribute 4.1.4
character_literal 2.5
code_statement 13.8
qualified_expression 4.7
E–37
() ...
accept_statement 9.5
actual_parameter 6.4
actual_parameter_part 6.4
aggregate 4.3
attribute_designator 4.1.4
discriminant_constraint 3.7.2
discriminant_part 3.7.1
entry_declaration 9.5
enumeration_type_definition 3.5.1
formal_part 6.1
generic_actual_part 12.3
generic_type_definition 12.1
index_constraint 3.6
indexed_component 4.1.1
pragma 2.8
primary 4.4
qualified_expression 4.7
slice 4.1.2
subunit 10.2
type_conversion 4.6
unconstrained_array_definition 3.6
* ...
multiplying_operator 4.5
** ...
factor 4.4
highest_precedence_operator 4.5
+ ...
binary_adding_operator 4.5
exponent 2.4.1
unary_adding_operator 4.5
, ...
abort_statement 9.10
actual_parameter_part 6.4
aggregate 4.3
discriminant_constraint 3.7.2
enumeration_type_definition 3.5.1
generic_actual_part 12.3
identifier_list 3.2
index_constraint 3.6
indexed_component 4.1.1
pragma 2.8
unconstrained_array_definition 3.6
use_clause 8.4
with_clause 10.1.1
E–38
– ...
binary_adding_operator 4.5
exponent 2.4.1
unary_adding_operator 4.5
. ...
based_literal 2.4.2
decimal_literal 2.4.1
selected_component 4.1.3
.. ...
range 3.5
/ ...
multiplying_operator 4.5
/= ...
relational_operator 4.5
: ...
block_statement 5.6
component_declaration 3.7
deferred_constant_declaration 7.4
discriminant_specification 3.7.1
exception_declaration 11.1
generic_parameter_declaration 12.1
loop_statement 5.5
number_declaration 3.2
object_declaration 3.2
parameter_specification 6.1
renaming_declaration 8.5
:= ...
assignment_statement 5.2
component_declaration 3.7
discriminant_specification 3.7.1
generic_parameter_declaration 12.1
number_declaration 3.2
object_declaration 3.2
parameter_specification 6.1
; ...
abort_statement 9.10
accept_statement 9.5
address_clause 13.5
alignment_clause 13.4
assignment_statement 5.2
block_statement 5.6
body_stub 10.2
case_statement 5.4
code_statement 13.8
E–39
component_clause 13.4
component_declaration 3.7
component_list 3.7
conditional_entry_call 9.7.2
deferred_constant_declaration 7.4
delay_statement 9.6
discriminant_part 3.7.1
entry_call_statement 9.5
entry_declaration 9.5
enumeration_representation_clause 13.3
exception_declaration 11.1
exit_statement 5.7
formal_part 6.1
full_type_declaration 3.3.1
generic_declaration 12.1
generic_instantiation 12.3
generic_parameter_declaration 12.1
goto_statement 5.9
if_statement 5.3
incomplete_type_declaration 3.8.1
length_clause 13.2
loop_statement 5.5
null_statement 5.1
number_declaration 3.2
object_declaration 3.2
package_body 7.1
package_declaration 7.1
pragma 2.8
private_type_declaration 7.4
procedure_call_statement 6.4
E–40
raise_statement 11.3
record_representation_clause 13.4
renaming_declaration 8.5
return_statement 5.8
selective_wait 9.7.1
subprogram_body 6.3
subprogram_declaration 6.1
subtype_declaration 3.3.2
task_body 9.1
task_declaration 9.1
terminate_alternative 9.7.1
timed_entry_call 9.7.3
use_clause 8.4
variant_part 3.7.3
with_clause 10.1.1
< ...
relational_operator 4.5
<< ...
label 5.1
<= ...
relational_operator 4.5
<> ...
generic_parameter_declaration 12.1
generic_type_definition 12.1
index_subtype_definition 3.6
= ...
relational_operator 4.5
=> ...
argument_association 2.8
case_statement_alternative 5.4
component_association 4.3
discriminant_association 3.7.2
exception_handler 11.2
generic_association 12.3
parameter_association 6.4
select_alternative 9.7.1
variant 3.7.3
> ...
relational_operator 4.5
>= ...
relational_operator 4.5
E–41
>> ...
label 5.1
| ...
case_statement_alternative 5.4
component_association 4.3
discriminant_association 3.7.2
exception_handler 11.2
variant 3.7.3
E–42
F
Implementation-Dependent Characteristics
Note
This appendix is not part of the standard definition of the Ada
programming language.
DEC Ada also restricts the predefined language pragmas INLINE and
INTERFACE. See Annex B for a descriptive pragma summary.
DEC Ada does not provide the low level input-output package described in this
section.
As specified in section 14.4, DEC Ada raises the following language-defined
exceptions for error conditions that occur during input-output operations:
• STATUS_ERROR
• MODE_ERROR
• NAME_ERROR
• USE_ERROR
• END_ERROR
• DATA_ERROR
• LAYOUT_ERROR
DEC Ada does not raise the language-defined exception DEVICE_ERROR.
Device-related errors cause the exception USE_ERROR to be raised.
The exception USE_ERROR is raised under the following conditions:
• If the capacity of the external file has been exceeded
• In all CREATE operations if the mode specified is IN_FILE
• In all CREATE operations if the file attributes specified by the FORM
parameter are not supported by the package
Systems on which it
Integer type Range applies
SHORT_SHORT_INTEGER –128 .. 127 All
SHORT_INTEGER –32768 .. 32767 All
INTEGER –2147483648 .. 2147483647 All
LONG_INTEGER –2147483648 .. 2147483647 OpenVMS VAX
–263 .. 263 –1 Alpha
For the applicable input-output packages, the ranges of values for the types
COUNT and POSITIVE_COUNT are as follows:
COUNT 0 .. INTEGER’LAST
POSITIVE_COUNT 1 .. INTEGER’LAST
For the package TEXT_IO, the range of values for the type FIELD is as follows:
FIELD 0 .. INTEGER’LAST
Systems on which
Type Default Representation it applies Section
FLOAT F_floating OpenVMS 3.5.7
IEEE single float Digital UNIX
LONG_FLOAT G_floating OpenVMS 3.5.7
IEEE double float Digital UNIX
LONG_LONG_FLOAT H_floating OpenVMS VAX 3.5.7
G_floating Alpha
IEEE double float Digital UNIX
The values of the floating point attributes for the different floating point
representations appear in the following tables.
DEC
systems
on which it
Limit applies Value
In a subprogram or entry declaration, maximum All 32
number of formal parameters that are of an
unconstrained record type
Maximum identifier length (number of characters) All 255
Maximum number of characters in a source line All 255
Maximum collection size (number of bytes) OpenVMS 231 –1
Digital
UNIX 263 –1
Maximum number of discriminants for a record type All 245
Maximum number of formal parameters in an entry or All 246
subprogram declaration
Maximum number of dimensions in an array type All 255
Maximum number of library units and subunits in a All 4095
compilation closure1
Maximum number of library units and subunits in an All 16383
execution closure2
Maximum number of objects declared with the pragma All 32757
COMMON_OBJECT or PSECT_OBJECT
Maximum number of enumeration literals in an All 65535
enumeration type definition
Maximum number of lines in a source file All 65534
Maximum number of bits in any object All 231 01
Maximum size of the static portion of a stack frame All 230
(approximate)
1 The compilation closure of a given unit is the total set of units that the given unit depends on,
directly and indirectly.
2 The execution closure of a given unit is the compilation closure plus all associated secondary units
(library bodies and subunits).
Under the rules of the American National Standards Institute (ANSI), the Ada
Joint Program Office (AJPO) of the United States Department of Defense, as
the sponsor of the United States Ada language standard, is responsible for the
ongoing maintenance and interpretation of that standard.
Under the rules of the International Standards Organization (ISO),
ISO-IEC/JTC1/SC22/WG9 (WG9) is responsible for the development and
ongoing maintenance and interpretation of the international Ada language
standard, coordination with related standards, and so on. Under WG9, an
Ada Rapporteur Group (ARG) has been formed to make recommendations on
maintenance and interpretation of the standard to WG9.
Both the ANSI (AJPO) and ISO (WG9/ARG) groups coordinate their efforts,
and, in particular, seek to retain Ada’s strength as an internationally single
standard and to avoid any divergence in the interpretation of the ISO and
ANSI Ada language standards.
A number of language interpretations (called Ada commentaries) have
been made (or recommended) between publication of the standards and the
publication of this version of the DEC Ada Language Reference Manual. These
commentaries have been coordinated between, and are endorsed by, both the
ANSI and ISO groups. The summary part of each commentary is presented
here for convenience.
For information on how to obtain the full text of the commentaries, contact the
AJPO (see the Postscript at the end of this manual for the mailing address),
the WG9, or the Ada Information Clearinghouse (AdaIC).
G–1
The Ada Information Clearinghouse is operated by the IIT Research Institute
for the AJPO. Its post office mailing addresses and phone numbers are as
follows:
AdaIC AdaIC
3D139 (1211 Fern St., C-107) 4600 Forbes Blvd.
The Pentagon Lanham, MD 20706
Washington, DC 20301-3081 (301) 459-3711
(703) 685-1477
G–2
If a discriminant constraint is given for an access type, the constraint applies
to the designated type. The second part of the compatibility check is optional
in this case (even if the designated type is completely declared, e.g., even if the
constraint occurs in an object declaration or allocator).
When the initial values of discriminants are given by the evaluation of default
expressions, the corresponding constraint is checked for compatibility.
AI-00008/05: Negative exponents in based notation [2.4.2(04)]
The exponent of a based literal must not have a minus sign if the based literal
is an integer literal.
AI-00014/10: Evaluating default discriminant expressions [3.7.2(08)]
Default discriminant expressions are not evaluated when an explicit
initialization expression is provided in an object declaration or a component
declaration.
AI-00012/06: Declaration of homographs by derivation and instantiation
[8.3(17), 12.3(22)]
Derived subprograms can be homographs, and so can subprograms declared in
an instance.
AI-00015/12: When the prefix of ’ADDRESS contains a function name
[4.1.4(03), 13.7.2(06)]
The name of an attribute designator can be taken into account when deciding
whether the prefix of an attribute is a name or a function call, but the attribute
designator cannot be considered when resolving identifiers that are used in the
prefix. In particular, the fact that the prefix of ’ADDRESS (as well as the
prefix of ’SIZE, ’CONSTRAINED, and ’STORAGE_SIZE) can be an object but
not a function call does not affect the resolution of a name that occurs in the
prefix.
AI-00016/10: Using a renamed package prefix inside a package
[4.1.3(15), 4.1.3(18)]
An expanded name is legal if the prefix denotes a package and the selector is
a simple name declared within the visible part of the package, regardless of
whether the prefix is a name declared by a renaming declaration.
AI-00018/06: Checking aggregate index and subcomponent values [4.3.2(11)]
The check that the value of an index in an array aggregate belongs to an index
subtype can be made before or after all choices have been evaluated. Similarly,
the check that a subcomponent value belongs to the subcomponent’s subtype
can be performed before or after all subcomponent expressions have been
evaluated.
G–3
AI-00019/07: Checking for too many components in positional aggregates
[4.3.2(11)]
CONSTRAINT_ERROR is raised if the bounds of a positional aggregate do not
belong to the corresponding index subtype.
AI-00020/07: Real literals with fixed point multiplication and division
[4.5.5(10)]
A real literal is not allowed as an operand of a fixed point multiplication or
division. The possibility of adopting a more liberal rule in a future version of
the language will be studied.
AI-00023/06: Static numeric subtypes [4.9(11), 3.5.4(04), 3.5.7(10), 3.5.9(08)]
Declarations containing integer and real type definitions declare static
subtypes, e.g., given
type T is range 1 .. 10;
T is a static subtype.
AI-00024/09: Type conversions as out parameters for non-scalar types
[6.4.1(04)]
If an out parameter has the form of a type conversion and the type mark
denotes an array type, the type conversion is performed before the call
(see 4.6(11, 13) for the semantics of such a conversion). If the type mark
denotes an access type, the value of the variable is converted before the call to
the base type of the formal parameter; the designated object need not satisfy a
constraint imposed by the formal parameter.
AI-00025/08: Checking out parameter constraints for private types [6.4.1(09)]
When a subprogram parameter has a private type, the constraint checks
that are performed before or after the call are those appropriate for the type
declared in the private type’s full declaration.
AI-00026/07: Effect of full type decl on CONSTRAINED attribute
[7.4.2(09)]
After the full declaration of a private type P, P’CONSTRAINED is not allowed
unless P’s full declaration derives from a private type.
AI-00027/07: Visibility of type mark in explicit conversion or qualified
expression [8.3(18)]
The type mark that occurs in an explicit conversion or in a qualified expression
must denote a visible declaration.
G–4
AI-00030/07: All guards need not be evaluated first [9.7.1(05)]
In the execution of a selective wait statement, the evaluation of conditions,
delay expressions, and entry indices is performed in some order that is not
defined by the language, except that a delay expression or an entry index
cannot be evaluated until after the condition for the corresponding alternative
is evaluated and found to be true.
AI-00031/06: Out-of-range argument to pragma PRIORITY [9.8(01)]
If the argument to pragma PRIORITY does not lie in the range of the subtype
PRIORITY, the pragma has no effect.
AI-00032/09: Preemptive scheduling is required [9.8(04)]
If an implementation supports more than one priority level, or interrupts, then
it must also support a preemptive scheduling policy.
AI-00034/06: Value of COUNT in an accept statement [9.9(06)]
In an accept statement for a member of an entry family, the member being
called (and consequently, the task calling the member) is not known until the
entry index has been evaluated. This means that if the entry index contains
a COUNT attribute, its value is not affected by what member of the family is
eventually determined to be called.
AI-00035/06: Body stubs are not allowed in package specifications
[10.2(03)]
Body stubs are not allowed in package specifications.
AI-00037/12: Instantiating when discriminants have defaults [12.3.2(04)]
An actual subtype in a generic instantiation can be an unconstrained type with
discriminants that have defaults even if an occurrence of the formal type (as
an unconstrained subtype indication) is at a place where either a constraint or
default discriminants would be required for a type with discriminants.
AI-00038/06: Declarations associated with default names [12.3.6(02)]
The normal visibility rules apply to identifiers used in default subprogram
names, i.e., these identifiers are associated with declarations visible at the
point of the generic declaration, not those visible at each place of instantiation.
AI-00039/12: Forcing occurrences and premature uses of a type
[13.1(06), 13.1(07), 7.4.1(04)]
Each operand of a relational operator (and similarly, the operand of a type
conversion or membership test) is considered to be implicitly qualified with
the name of the corresponding operand type; such implicit occurrences are
considered to be occurrences of the type name with respect to the rules given in
13.1(6), 13.1(7), and 7.4.1(4). This means that such occurrences can be illegal
if the implicit type name is an incompletely declared private type (7.4.1(4)),
G–5
or they can make the subsequent occurrence of a representation clause illegal
(13.1(6, 7)).
AI-00040/07: Multiple specification of T’SIZE, T’STORAGE_SIZE, T’SMALL
[13.1(03), 13.6(01)]
For a given type, the ’SIZE, ’STORAGE_SIZE, and ’SMALL attributes can
each be specified at most once by an explicit representation clause.
AI-00045/05: Subtype SYSTEM.PRIORITY [13.7(02)]
The subtype SYSTEM.PRIORITY can be non-static. The subtype can have a
null range.
AI-00046/06: Lifetime of a temporary file and its name [14.2.1(03), 14.2.1(22)]
1) An implementation is allowed to delete a temporary file immediately after
closing it.
2) The NAME function is allowed to raise USE_ERROR if its argument is
associated with an external file that has no name, in particular, a temporary
file.
AI-00047/08: Effect of RESET on line and page length [14.3.1(04)]
Calling RESET resets the line and page lengths to UNBOUNDED.
AI-00048/12: Default files can be closed, deleted, and re-opened [14.3.2(01),
14.3.1(05)]
The CLOSE operation can be applied to a file object that is also serving as
the default input or default output file. The effect is to close the default file.
A subsequent OPEN operation can have the effect of opening the default file
as well. Similarly, a DELETE operation can be applied to a file object that is
serving as the default file.
The exception MODE_ERROR is raised by OPEN if the specified mode is
OUT_FILE and the file object being opened is serving as the default input file.
Similarly, MODE_ERROR is raised if the specified mode is IN_FILE and the
file object being opened is serving as the default output file.
AI-00050/11: When does GET_LINE call SKIP_LINE? [14.3.6(13)]
GET_LINE reads characters until either the end of the string is met or until
END_OF_LINE is true. If the end of the string has been met, SKIP_LINE is
not called even if END_OF_LINE is true. In particular, no characters are read
if the string is null.
G–6
AI-00051/07: Reading ‘‘integer literals’’ [14.3.7(06)]
Integer GET reads according to the syntax of an optionally signed numeric
literal that does not contain a point. It raises DATA_ERROR if the characters
read do not form a legal integer literal. For example, if integer GET attempts
to read 0.3, 0E–3, or 20#0#, reading stops before the decimal point for 0.3, after
the 3 for 0E–3, and after the second # for 20#0#; DATA_ERROR is raised for
0E–3 since legal integer literals are not allowed to have exponents containing
minus signs. DATA_ERROR is also raised for 20#0#, since 20 is not an allowed
base value.
AI-00099/12: ’SMALL can be specified for a derived fixed point type
[13.2(12)]
A representation clause specifying small for a derived fixed point type is
allowed if the resulting model numbers are (representable) values of the parent
type and the value specified for small is not greater than the delta of the
derived type.
AI-00103/06: Accuracy of a relation between two static universal real
operands [4.10(04)]
The relational and membership operations for static universal real operands
must be evaluated exactly.
AI-00113/12: A subunit’s with clause can name its ancestor library unit
[10.5(02)]
A with clause for a subunit can name the subunit’s ancestor library name.
AI-00120/05: Overload resolution for assignment statements [8.7(03)]
The type of the right-hand side of an assignment statement can be used to
determine an overload resolution of the left-hand side.
AI-00128/04: No membership tests or short-circuit operations in static
expressions [4.9(02)]
Membership tests and short-circuit control forms are not allowed in static
expressions because neither of these are operators.
AI-00132/05: Static constraints and component clauses [13.4(07)]
A record component clause is only allowed for a record component having a
constraint if the constraint is static and, if the component has subcomponents
that are constrained, each subcomponent constraint is static.
G–7
AI-00137/05: Exponentiation with floating point operand [4.5.6(06)]
Since the model interval for X*X*X*X is sometimes smaller than the interval
for (X*X)*(X*X), an implementation cannot compute X**4 as sqr(sqr(X)), where
sqr(Y) computes Y*Y. In general, exponentiation to the Nth power must be
implemented using N 0 1 multiplications to ensure the required accuracy is
obtained.
AI-00138/10: Representation clauses for derived types [3.4(10), 3.4(22),
13.1(03), 13.6(01)]
If an aspect of a parent type’s representation has been specified by an implicit
or explicit representation clause and no explicit representation clause is given
for the same aspect of the derived type, the representation of the derived and
parent types are the same with respect to this aspect.
An explicit length clause for STORAGE_SIZE of a task type, for SIZE
(of any type), or for SMALL of a fixed point type, an explicit enumeration
representation clause, an explicit record representation clause, or an explicit
address clause for a task type can be given for a derived type (prior to a forcing
occurrence for the type) even if a representation clause has also been given
(explicitly or implicitly) for the same aspect of the parent type’s representation.
(But only a length clause is allowed for a derived type if the parent type has
derivable subprograms.)
An expression in an implicit representation clause is not evaluated when the
implicit clause is elaborated.
AI-00139/04: The declaration of ‘‘additional operations’’ for access types
[7.4.2(07)]
A consequence of the rule in 7.4.2(7, 8) is that an object A1 can be declared
such that the name A1(1) is illegal when A1.all(1) would be legal. Similar
examples exist for slices, for the attributes ’FIRST, ’LAST, ’LENGTH, and
’RANGE, and for selection of a record component (e.g., R1.C1 can be illegal
when R1.all.C1 is legal).
AI-00143/04: Model numbers for delta 1.0 range –7.0 .. 8.0 [3.5.9(06)]
Given
type F is delta 1.0 range -7.0 .. 8.0;
The model numbers for F do not include the value 8.0 and F’MANTISSA must
be 3.
G–8
AI-00144/10: A fixed point type declaration cannot raise an exception
[3.5.9(09)]
A fixed point type declaration cannot raise an exception. Declarations such as:
type F is delta 2**(-15) range -1.0 .. 1.0;
are legal even if F’SIZE is equal to 16 so 1.0 is not a representable value.
AI-00145/04: Dynamic computation of ’MANTISSA for fixed point subtypes
[3.5.9(14)]
If F is a non-static fixed point subtype, F’MANTISSA must, in general, be
computed at runtime.
AI-00146/10: Model numbers for a fixed point subtype with length clause
[3.5.9(14), 3.5.9(16)]
If a length clause specifying small has been given for a fixed point type, T, then
the value of small for any subtype of T is given by T’SMALL.
AI-00147/05: Declaring a fixed point type that occupies one word
[3.5.9(18)]
A fixed point type that occupies a full word can be declared as:
DEL : constant := 1.0/2**(WORD_LENGTH - 1);
type FRACTION is delta DEL range -1.0 .. 1.0 - DEL;
AI-00148/05: Legality of –1 .. 10 in loops [3.6.1(02)]
The range –1 .. 10 is illegal as the discrete range in an iteration rule,
constrained array type definition, and entry family declaration, since –1 is
an expression having a form prohibited by 3.6.1(2), and the other rules of the
language do not determine a unique type for the bounds. The possibility of
adopting a more liberal rule in a future version of the language will be studied.
Note, however, that instead of writing –1 .. 10, one can always write INTEGER
range –1 .. 10 or declare –1 as a constant and use the constant name in place
of the expression, –1; often it will be appropriate to use the attribute ’RANGE
in place of an explicit range such as –1 .. 10.
AI-00149/09: Activating a task before elaboration of its body [3.9(06)]
If an attempt is made to activate a task before its body has been elaborated,
PROGRAM_ERROR is raised.
If more than one task is to be activated, the check for unelaborated bodies is
performed before an attempt is made to activate any task. Consequently, if
PROGRAM_ERROR is raised, no tasks have been activated.
G–9
AI-00150/04: Allocated objects belong to the designated subtype
[4.8(05)]
CONSTRAINT_ERROR is raised if an object specified by an allocator does not
belong to the designated subtype for the allocator.
AI-00151/05: Case expression of a type derived from a generic formal type
[5.4(03)]
A type derived from a generic formal type cannot be used in the expression of
a case statement.
AI-00153/05: Membership tests cannot use an incompletely declared private
type [7.4.1(04)]
The type mark for a private type cannot be used in a membership test before
the end of the full declaration of the type. This restriction also applies to the
use of a name that denotes a subtype of the private type and the use of a name
that denotes any type or subtype that has a subcomponent of the private type.
AI-00154/06: Additional operations for composite and access types
[7.4.2(08), 7.4.2(07)]
This Commentary gives details showing which operations are declared for
certain composite and access types immediately after their declaration and
which are declared later in a package body.
AI-00155/08: Evaluation of an attribute prefix having an undefined value
[3.2.1(18), 7.4.3(04)]
The execution of a program is erroneous if the name of a deferred constant
is evaluated before the full declaration of the constant has been elaborated.
Evaluation of the name of a scalar variable is not erroneous, even if the
variable has an undefined value, if the name occurs as the prefix for the
attribute ADDRESS, FIRST_BIT, LAST_BIT, POSITION, or SIZE. (In these
cases, the value of the variable is not needed.)
AI-00157/05: Overloading resolution and parenthesized expressions
[8.7(07)]
The rule requiring aggregates to be given in named notation if they contain
a single component association (4.3(4)) is to be considered a syntax rule for
purposes of overloading resolution, and in particular, can be used to help
resolve the type of a parenthesized expression.
AI-00158/05: The main program is elaborated before it is called [10.5(01)]
The main program is elaborated before it is called.
AI-00163/05: Implicit conversion preserves staticness [4.9(06)]
A static expression is static even if an implicit conversion is applied to it.
G–10
AI-00167/05: It is possible to access a task from outside its master
[9.4(00)]
A task can be accessed from outside its master, since a function can return a
task object as its value, even a task that was activated inside the function.
AI-00169/06: Legality of incomplete null multidimensional array aggregates
[4.3(06)]
A multidimensional aggregate is illegal if a value is omitted in the specification
of any dimension.
AI-00170/07: Renaming a slice [8.5(05)]
A slice must not be renamed if renaming is prohibited for any of its
components.
AI-00172/06: GET_LINE for interactive devices [14.3.6(13)]
An implementation is allowed to assume that certain external files do not
contain page terminators. Such external files might be used to represent
interactive input devices. (To ensure that such files have no page terminators,
an implementation may refuse to recognize any input sequence as a page
terminator.) Under such an assumption, GET_LINE and SKIP_LINE can
return as soon as a line terminator is read.
AI-00173/05: Completion of execution by exception propagation
[9.4(05)]
The execution of a task, block statement, or subprogram is completed if an
exception is raised by the elaboration of its declarative part. The execution
of a task, block statement, or subprogram is completed if an exception is
raised before the first statement following the declarative part and there is no
corresponding handler, or if there is one, when it has finished the execution of
the corresponding handler. (TASKING_ERROR is the only exception that can
be raised under these circumstances. It can be raised by unsuccessful attempts
to activate one or more dependent tasks after elaboration of the declarative
part and before beginning execution of the sequence of statements.)
AI-00177/04: Use of others in a multidimensional aggregate [4.3.2(08)]
An others choice is allowed if an aggregate is not a subaggregate and is
the expression of a component association of an enclosing (array or record)
aggregate. An others choice is also allowed if an aggregate is a subaggregate
of a multidimensional array aggregate that is in one of the contexts specified
by 4.3.2(5-8).
AI-00179/08: The definition of the attribute FORE [3.5.10(08)]
The attribute ’FORE is defined in terms of the decimal representation of model
numbers.
G–11
AI-00180/07: Elaboration checks for INTERFACE subprograms
[3.9(05), 13.9(03)]
If a subprogram is named in an INTERFACE pragma, no check need be made
that the subprogram body has been elaborated before it is called.
AI-00181/04: NUMERIC_ERROR for nonstatic universal operands
[4.10(05)]
When evaluating a nonstatic universal expression, NUMERIC_ERROR can be
raised if any operand or the result is a real value that lies outside the range
of safe numbers of the most accurate predefined floating point type (excluding
universal_real) or an integer value that lies outside the range SYSTEM.MIN_
INT .. SYSTEM.MAX_INT.
AI-00186/08: Pragmas recognized by an impl do not force default
representation [13.1(06), 2.8(09)]
The intent of 2.8(9) is that an invalid pragma have the same effect as if it
were absent. To ensure that this intent is realized, a pragma defined by the
Standard or by an implementation is not allowed to contain an occurrence of a
name or expression that forces the determination of the default representation
of a type, since such occurrences would make later representation clauses
for the type illegal. Consequently, a representation clause for a type can
be accepted even if the clause is given after a pragma that contains an
expression that normally would force the default representation of the type
to be determined (since such a pragma will be considered invalid, and ignored).
(See AI-00322 for a similar rule for pragmas whose identifiers are not defined
either by the Standard or by the implementation.)
AI-00187/06: Using a name decl by a renaming decl as an expanded name
selector [4.1.3(15)]
A name declared by a renaming declaration can be used as a selector in an
expanded name.
AI-00190/06: A static expression cannot have a generic formal type
[4.9(02), 4.3.2(03)]
A static expression is not allowed to have a generic formal type (including a
type derived from a generic formal type, directly or indirectly). (Consequently,
if an array’s index subtype is a generic formal type, aggregates for that
dimension of the array can have only a single component association and
this component association must have a single choice.)
AI-00192/05: Allowed names of library units [8.6(02)]
The name of a library unit cannot be a homograph of a name that is already
declared in package STANDARD.
G–12
AI-00193/05: The value of ’FIRST’s argument in overloading resolution
[8.7(08)]
Any overloaded identifiers occurring in the argument for ’FIRST(N),
’LAST(N), and ’RANGE(N) must be resolved independently of the context
in which these attributes are used.
AI-00195/09: The intended use of CLOCK [9.6(05)]
CLOCK returns a value that reflects the time of day in the external
environment.
AI-00196/05: Use of 86_400.0 in TIME_OF [9.6(06)]
If TIME_OF is called with a seconds value of 86_400.0, the value returned is
equal to TIME_OF for the next day with a seconds value of 0.0. In addition,
the SECONDS function always returns a value less than 86_400.0, even if the
SECONDS argument of TIME_OF was 86_400.0.
AI-00197/07: With SYSTEM clause not needed for pragma PRIORITY
[9.8(00)]
Use of the pragma PRIORITY does not require the package SYSTEM to be
named in a with clause for the enclosing compilation unit.
AI-00198/09: Termination of unactivated tasks [9.3(04), 9.10(05),
9.3(08)]
If a task is abnormally completed, then any task it has created but not yet
activated becomes terminated and is never activated.
If PROGRAM_ERROR is raised before attempting to activate one or more tasks
because the body of at least one of these tasks has not yet been elaborated
(see AI-00149), all the unactivated tasks become terminated.
AI-00199/08: Implicit declaration of library subprograms [10.1(06)]
A subprogram body given in a compilation unit (following the context clause)
is interpreted as a secondary unit if the program library already contains a
subprogram declaration or generic subprogram declaration having the same
identifier as the body. Otherwise, the subprogram body is interpreted as a
library unit.
Successfully compiling a subprogram body that is a library unit means the
unit is added to the library, replacing any previously existing library unit
having the same identifier. (The previously existing library unit can only be a
package declaration, a generic package declaration, a generic instantiation, or
a previously compiled subprogram body that is a library unit.)
G–13
AI-00200/08: Dependences created by inline of generic instantiations
[10.3(07), 6.3.2(03)]
If inline inclusion of a subprogram call is achieved due to pragma INLINE,
an implementation is allowed to create a dependence of the calling unit on
the subprogram body; when such a dependence exists, the unit containing
the call is obsolete if the subprogram body is obsolete. Such dependences
can be created even when the subprogram is created as a result of a generic
instantiation.
AI-00201/07: The relation between TICK, CLOCK, and the delay statement
[9.6(01), 9.6(05), 9.6(04), 13.7.1(07)]
The value returned by successive calls to the CLOCK function can be expected
to change at the frequency indicated by SYSTEM.TICK.
There is no required relation between SYSTEM.TICK and
DURATION’SMALL.
Delay statements need not be executed with an accuracy that is related to
SYSTEM.TICK or DURATION’SMALL; in particular, delay statements can
be executed more accurately than SYSTEM.TICK implies. Execution with less
accuracy than SYSTEM.TICK requires justification in terms of AI-00325.
AI-00205/06: The formula for MANTISSA is correct [3.5.7(06)]
The number of mantissa bits for D decimal digits of accuracy is correctly given
by the formula in the Standard, namely, the integer next above
(D*log(10)/log(2)) + 1.
AI-00209/06: Exact evaluation of static universal real expressions
[4.10(04)]
An implementation can refuse to evaluate a static universal real expression
only if there are insufficient resources to evaluate the expression exactly, e.g.,
if there is insufficient memory available. Inexact results must not be delivered.
AI-00210/04: Loop name in an exit statement as an expanded name
[5.7(02)]
An expanded name is allowed as the loop name in an exit statement.
AI-00215/05: Type of EXP should be FIELD [14.3.8(20)]
The type of the EXP parameter for PUT is FIELD, not INTEGER.
AI-00217/05: The safe numbers of a floating point subtype [3.5.7(09)]
The safe numbers of a floating point subtype are the safe numbers of its base
type.
G–14
AI-00219/06: Use of & and ’IMAGE in static expressions [4.9(02)]
In a static expression, every factor, term, simple expression, and relation must
have a scalar type.
AI-00225/09: Secondary units for generic subprograms [10.1(06)]
If a subprogram body given in a compilation unit has the same identifier as a
library unit and the library unit is a generic subprogram declaration, then the
subprogram body is interpreted as a secondary unit.
AI-00226/06: Applicability of context clauses to subunits [10.1.1(04)]
The context clause of a library unit that is a declaration applies not only to the
secondary unit that defines the corresponding body, but also to any subunits of
the secondary unit.
AI-00231/03: Full declarations of incomplete types can have discriminants
[3.8.1(04)]
The full declaration of an incomplete type can be a derived type with
unconstrained discriminants when no discriminant part is given in the
incomplete type’s declaration.
AI-00232/05: Full declarations that implicitly declare unconstrained types
[7.4.1(03)]
A full declaration of a private type can declare a constrained array subtype or
a constrained type with discriminants.
AI-00234/05: Lower bound for ’IMAGE of enumeration values
[3.5.5(10)]
The lower bound of the string returned by the predefined attribute IMAGE is
one.
AI-00235/05: Redundant parentheses enclosing universal_fixed expressions
[4.5.5(11)]
An expression having type universal_fixed can be enclosed in parentheses
before being converted to some other numeric type.
AI-00236/12: Pragma ELABORATE for bodiless packages with tasks
[10.5(04)]
If a package declares a task object but no package body is required or provided
by a programmer, 9.3(5) says an implicit body is provided. The effect of a
pragma ELABORATE that names such a package is to require that the
implicitly provided package body be elaborated, thereby activating the task
declared in the package.
G–15
AI-00237/06: Instances having implicit package bodies [12.3(17),
9.3(05)]
Given a generic package declaration that does not require a body and that
has no explicit body, when the generic package is instantiated, if the instance
specification requires a body, then an implicit instance body is created and is
elaborated when the instantiation is elaborated.
AI-00239/11: ENUMERATION_IO and IMAGE for non-graphic characters
[14.3.9(06), 14.3.9(09), 3.5.5(11)]
If ENUM_IO is an instantiation of ENUMERATION_IO for a character type
that contains a non-graphic character, e.g.,
package ENUM_IO is new ENUMERATION_IO (CHARACTER);
then for each non-graphic character (such as ASCII.NUL), ENUM_IO.PUT
should output the corresponding sequence of characters used in the type
definition (e.g., PUT(ASCII.NUL) should output the string ‘‘NUL’’ if SET has
the value UPPER_CASE and WIDTH is less than 4). Furthermore, ENUM_
IO.GET should be able to read the sequence of characters output by ENUM_
IO.PUT for a non-graphic character, returning in its ITEM parameter the
corresponding enumeration value.
Similarly, the image of a non-graphic character (i.e., the result returned for the
attribute designator IMAGE) should be the sequence of characters used in the
type definition of CHARACTER (e.g., CHARACTER’IMAGE(ASCII.NUL)
= ‘‘NUL’’),and ’VALUE should accept such a string as representing the
corresponding enumeration value.
An implementation conforms to the Standard in this respect if the result
produced by ’IMAGE for a non-graphic character is accepted by ’VALUE, and
if the result (if any) produced by PUT can be read by GET; GET is also allowed
to raise DATA_ERROR when attempting to read any string produced by PUT
for a non-graphic character.
This interpretation is non-binding, i.e., implementers are encouraged to
conform to it but are not required to do so by the validation tests. A future
version of the Standard may incorporate this interpretation.
AI-00240/05: Integer type definitions cannot contain a RANGE attribute
[3.5.4(03)]
A range attribute is not allowed in an integer type definition.
G–16
AI-00242/09: Subprogram names allowed in pragma INLINE [6.3.2(03),
2.8(09)]
If the pragma INLINE appears at the place of a declarative item, every name
in the pragma must denote at least one subprogram or generic subprogram
declared explicitly earlier in the same declarative part or package specification.
If the pragma appears after a given library unit, the pragma must contain just
the name of the library unit, and the library unit must be a subprogram or a
generic subprogram. If a pragma INLINE appears at the place of a declarative
item and a name in the pragma is overloaded, the pragma applies just to
those subprograms whose declarations occur (explicitly) earlier in the same
declarative part or package specification. If a name in a pragma INLINE is
declared by a renaming declaration, and the denoted subprogram is explicitly
declared earlier in the same declarative part or package specification, inline
expansion is desired for every call of the denoted subprogram (whether the call
uses the new or the old name). If a pragma INLINE applies to a subprogram,
inline expansion is desired for every call of the subprogram, whether or not the
call uses a name declared by a renaming declaration.
AI-00243/05: Overriding width format in TEXT_IO [14.3.5(07)]
If the specification of WIDTH or FORE in a call of PUT is insufficiently large,
the output is given with no leading spaces.
AI-00244/04: Record aggregates with multiple choices in a component
association [4.3.1(01)]
In a record aggregate, a component association having multiple choices
denoting components of the same type is considered equivalent to a sequence of
single choice component associations representing the same components.
AI-00245/08: Type conversion conformance for renamed subprogram/entry
calls [6.4.1(03), 8.5(08)]
When a type conversion is used as an actual parameter corresponding to an in
out or out formal parameter and the subprogram being called was declared
by a renaming declaration (renaming either a subprogram or entry), the name
given as the type mark (in the type conversion) must conform to the name
given for the corresponding parameter of the denoted subprogram or entry (not
the name given in the renaming declaration).
AI-00247/05: A non-null FORM argument can be required by an
implementation [14.2.1(03)]
An implementation can require that a non-null FORM argument be given to
CREATE and/or OPEN by raising USE_ERROR if one is not provided.
G–17
AI-00251/05: Are types derived from generic formal types static subtypes?
[4.9(11)]
Types derived from generic formal types are not static subtypes.
AI-00257/04: Restricting generic unit bodies to compilations [10.3(09)]
10.3(9) allows an implementation to require that bodies and subunits of a
generic unit appear in the same compilation. An implementation is allowed to
apply this rule selectively, i.e., the conditions under which an implementation
requires placement in a single compilation may depend on characteristics of
the generic specification, body, or subunit.
AI-00258/06: ’POSITION etc. for renamed components [13.7.2(07),
A(34)]
The prefix for ’POSITION, ’FIRST_BIT, and ’LAST_BIT must have the form
R.C, where R is a name denoting a record and C is the name of a component of
the record.
AI-00260/06: Limited ‘‘full types’’ [7.4.4(04)]
A full type declaration declares a limited type if an assignment operation is
not visible for the type of some subcomponent at the place of the full type
declaration.
A formal parameter whose type mark denotes an incompletely declared private
type cannot have mode OUT if the parameter’s full type declaration declares a
limited type.
AI-00261/03: ‘‘any error’’ –> ‘‘any illegal construct’’ [10.3(03)]
An attempt to compile an illegal compilation unit has no effect on the program
library (see also AI-00255).
AI-00263/06: A named number is not an object [3.2(08), 13.5(04), 13.7.3(03),
13.7.3(05)]
A number declaration declares a named number, which is not an object.
The elaboration of a number declaration proceeds by evaluating the
initialization expression and creating a named number. The value of the
initialization expression then becomes the value of the named number.
AI-00265/05: Index subtype of an array aggregate [4.3.2(11)]
The index subtype of an array type declared by a constrained array definition
is the subtype defined by the corresponding discrete range.
G–18
AI-00266/09: A body cannot be compiled for a library unit instantiation
[10.1(06)]
If a generic package is instantiated as a library unit, it is illegal to attempt to
compile a package body having the same identifier as that of the instantiation.
After instantiating a generic subprogram as a library unit, any attempt to
compile a subprogram body having the same identifier as that of the library
unit instantiation causes the instantiation to be deleted from the library and
replaced with the new library unit subprogram.
AI-00267/06: Evaluating expressions in case statements [3.5.4(10), 5.4(06),
11.6(06)]
An exception is raised if the value of the expression in a case statement does
not belong to the base type of the expression.
AI-00268/06: Activation of already abnormal tasks [9.3(03)]
If a task is aborted before it is activated, no exception is raised when an
attempt is made to activate the task.
AI-00276/07: Rendezvous that are ‘‘immediately possible’’ vs. timed entry
calls [9.7.3(04), 9.7.2(01)]
A timed entry call with a zero or negative delay issues an entry call that is
canceled only if a rendezvous is not immediately possible. 9.7.2(4) specifies
the conditions under which an entry call is immediately possible. In a
distributed implementation of Ada, it may take a non-negligible amount of
time to determine whether an entry call is ‘‘immediately’’ possible.
AI-00279/09: Exceptions raised by calls of I/O subprograms [14.1(11)]
Any exception can be raised when evaluating the actual parameters of a call
of an input-output subprogram. In addition, STORAGE_ERROR can be raised
by the call itself before execution of the body has begun. But once execution of
the body of an input-output subprogram has been started, the only exceptions
that can be propagated to the caller are the exceptions defined in the package
IO_EXCEPTIONS and the exceptions PROGRAM_ERROR and STORAGE_
ERROR. In particular, if CONSTRAINT_ERROR, NUMERIC_ERROR, or
TASKING_ERROR is not raised by the evaluation of any argument, then
none of these exceptions will be raised by the call. Furthermore, PROGRAM_
ERROR can only be raised due to errors made by the user of the input-output
subprogram.
AI-00282/06: Compatibility of constraint defined by discrete range [3.6.1(04)]
The constraint defined by a discrete range is compatible with a subtype if
each bound of the discrete range belongs to the subtype, or if the discrete
range defines a null range; otherwise the constraint is not compatible with the
subtype.
G–19
AI-00286/11: Declarations visible in a generic subprogram decl and body
[12.1(05), 8.4(05), 8.3(15)]
Except within the body of a generic subprogram, the declaration of a generic
unit is not a declaration for which overloading is allowed. In particular, any
declarations occurring in an outer declarative region or made potentially visible
by a use clause are not directly visible in the generic formal part if they have
the same identifier as the subprogram.
Within the body of a generic subprogram, overloading is defined for the generic
subprogram declaration in the same way as for a nongeneric subprogram. In
particular, overloadable declarations occurring in an outer declarative region or
made potentially visible by a use clause can be directly visible in the body even
though they are not directly visible in the generic formal part.
AI-00287/05: Resolving overloaded entry calls [9.5(05), 8.7(13)]
A call to an overloaded entry is resolved using the same kind of information
as is used for resolving overloaded procedure calls (the name of the entry, the
number of parameters, the types and the order of the actual parameters, and
the names of the formal parameters).
AI-00288/06: Effect of priorities during activation [9.8(04)]
A task activation should be performed with the priority of the task being
activated or the priority of the task causing the activation, whichever is higher.
AI-00289/05: Ancestor unit names in separate clauses must be simple names
[10.2(05)]
If P is a library unit, then the name in a ‘‘separate’’ clause for a subunit of P
must be P and not STANDARD.P.
AI-00292/05: Derived types with address clauses for entries [3.4(10), 13.5(08)]
An address clause applied to an entry of a task type also applies to a type
derived (directly or indirectly) from the task type.
AI-00293/05: Null others choice for array aggregates [4.3(06)]
The others choice in an array aggregate can specify no components.
AI-00294/05: The name given in pragma CONTROLLED [4.8(11)]
The type name given in a pragma CONTROLLED cannot be declared by a
subtype declaration nor can it be a first named subtype since a derived type is
not allowed.
AI-00295/05: Evaluating the variable in an actual parameter type conversion
[6.4.1(04)]
For an actual parameter (of any type) of mode in out or out that is a type
conversion, the variable name is evaluated before the call and therefore
determines the denoted entity.
G–20
AI-00298/05: Interaction between pragmas ELABORATE and INTERFACE
[10.5(04), 13.9(03)]
A pragma ELABORATE can be applied to a library unit whose body is supplied
by a pragma INTERFACE.
AI-00300/07: Prefixes of attributes in length clauses [13.2(02)]
The prefix of the attribute that appears in a length clause must be a simple
name. An expanded name, or the name T’BASE, is not allowed.
AI-00305/05: T’ADDRESS when T is a task type yields the task object
address [13.7.2(03)]
If T denotes a task type, then within the body of task unit T, the T in
T’ADDRESS is considered to refer to the name of the task object that
designates the task currently executing the body, i.e., T’ADDRESS returns
the address of the object.
AI-00306/15: Pragma INTERFACE; allowed names and illegalities
[2.8(09), 13.9(03)]
If a pragma INTERFACE names a language that is acceptable to an
implementation, the subprogram name must denote one or more subprograms
declared explicitly earlier in the same declarative part or package specification.
(The pragma has no effect if no named subprogram satisfies the requirements.)
The pragma is applied to all such subprograms other than enumeration literals
and subprograms declared by generic instantiation.
If a subprogram named in the pragma was declared by a renaming declaration,
the pragma applies to the denoted subprogram, but only if the denoted
subprogram otherwise satisfies the above requirements.
It is illegal to apply a pragma INTERFACE to a subprogram for which a
pragma INTERFACE has already been applied.
If a pragma INTERFACE applies to a subprogram, it is illegal to provide a
body for the subprogram.
AI-00307/04: GET at end of file and from a null string [14.3.7(06), 14.3.7(14),
14.3.8(09), 14.3.8(18), 14.3.9(06), 14.3.9(11)]
END_ERROR is raised (not DATA_ERROR) when attempting to read integer,
real, or enumeration values from a string that is null or that only contains
blanks. END_ERROR (not DATA_ERROR) is raised when attempting to
read integer, real, or enumeration values from a file that has no remaining
elements or whose only remaining elements are blanks, line terminators, or
page terminators.
G–21
AI-00308/05: Checking default initialization of discriminants for compatibility
[3.2.1(16)]
When an object of a type with discriminants is created either by an object
declaration or an allocator, and the values of the object’s discriminants are
determined by default, each discriminant value is checked for compatibility, as
defined in 3.7.2(5). CONSTRAINT_ERROR is raised if this check fails.
AI-00310/04: OTHERS choices and static index constraints [4.3.2(03)]
An others choice is static if the corresponding index subtype is static and if the
corresponding index bounds were specified with a static discrete range in the
applicable index constraint.
AI-00311/06: No NUMERIC_ERROR for null strings [11.1(06)]
When computing the upper bound of a null string literal, NUMERIC_ERROR
must not be raised, even if the lower bound has no predecessor (but see
AI-00325).
AI-00312/04: NUMERIC_ERROR when evaluating null aggregates and slices
[11.1(06)]
When determining the length of a null aggregate or slice, it is usually easy
for an implementation to avoid raising NUMERIC_ERROR. This exception
should be raised in these circumstances only when relevant restrictions in the
execution or compilation environment make it impractical or impossible to
avoid raising the exception (see AI-00325).
AI-00313/03: Non-null bounds belong to the index subtype [4.3.2(11), 4.6(13)]
CONSTRAINT_ERROR is raised if a non-null choice of an aggregate does not
belong to the corresponding index subtype.
For conversion to an unconstrained array type, CONSTRAINT_ERROR is
raised if a non-null dimension of the operand has bounds that do not belong to
the corresponding index subtype of the target type.
AI-00314/05: The safe numbers for IBM-370 floating point [3.5.7(09)]
The safe and model numbers for IBM-370 32-bit floating point have the
following characteristics:
DIGITS=6
MANTISSA = 21
EMAX = 84
SAFE_EMAX = 252
AI-00316/05: Definition of blank, inclusion of horizontal tab [14.3.9(06)]
A blank is defined as a space or a horizontal tabulation character.
G–22
AI-00319/09: Checking for subtype incompatibility [3.7.2(05),
3.8.1(04)]
No object can have a subcomponent with an incompatible discriminant or index
constraint. In particular, even when a discriminant constraint is applied to
a private type before its full declaration or to an incomplete type (before its
full declaration) and a discriminant is used to constrain a subcomponent, no
object of the type can be created if it would have a subcomponent with an
incompatible discriminant or index constraint.
AI-00320/06: Sharing external files [14.3.5(03), 14.2.4(00),
14.3.4(00), 14.2.2(00)]
If several file objects are associated with the same external file, some effects
are implementation dependent. For example, if two sequential file objects are
associated with the same external file, applying a read or write operation to
one file object can change the effect of applying these operations (or the end
of file operation) to the other file object. Other effects are specified by the
language. In particular, if two text file objects are associated with a single
external file (e.g., a terminal), the page, line, and column numbers for the
output file object cannot be updated implicitly after reading from the input file
object, and vice versa.
AI-00321/02: Forcing occurrence of index subtype [13.1(06)]
A forcing occurrence of the name of an array type or subtype forces the default
determination of each index subtype, and similarly, for forcing occurrences of
any type or subtype having a subcomponent of such an array type.
AI-00322/02: Forcing occurrences in unknown pragmas [13.1(06),
2.8(09)]
An occurrence of a name within an expression is not a forcing occurrence if
the expression occurs in a pragma whose identifier is not defined either by the
Standard or by the implementation.
AI-00324/06: Checking the subtype of a non-null access value [3.8(06)]
An access value of type T belongs to every subtype of T if T’s designated type is
neither an array type nor a type with discriminants.
AI-00325/05: Implementation-dependent limitations [1.1.2(00)]
Implementation-dependent limitations must be justified. An implementation-
dependent limitation is justified if it is impossible or impractical to remove it,
given an implementation’s execution environment.
AI-00328/08: Legality of uninstantiated generic units [12.2(01)]
The legality of a generic unit must be checked even if the generic unit is never
instantiated.
G–23
AI-00330/12: Explicit declaration of enumeration literals [8.3(17), 3.5.1(03),
3.3.3(01)]
If an enumeration literal is declared with an enumeration type definition,
then a function having the same identifier as the enumeration literal and the
same parameter and result type profile cannot also be declared immediately
within the same declarative region. Similarly, a non-overloadable declaration
of the enumeration literal’s identifier is not allowed immediately within the
declarative region containing the enumeration type definition.
AI-00331/07: The effect of a constraint in an allocator [4.8(05)]
When a discriminant or index constraint is imposed on the type mark in an
allocator and the type mark denotes an access type, the constraint does not
affect the subtype of the allocated object (which in this case has an access
value).
Similarly, when the type mark in an allocator denotes a scalar type, the
subtype denoted by the type mark does not affect the subtype of the allocated
(scalar) object.
AI-00332/04: NAME_ERROR or USE_ERROR raised when I/O not supported
[14.2.1(04), 14.2.1(07), 14.4(04), 14.4(05)]
CREATE and OPEN can raise USE_ERROR or NAME_ERROR if file creation
or opening is not allowed for any file.
AI-00336/05: Address clause for subprogram bodies [13.5(05)]
An address clause cannot be given for a subprogram whose body acts as its
declaration.
AI-00339/04: Allow non-English characters in comments [2.7(01),
2.1(01)]
An implementation is allowed (but not required) to accept an extended
character set (i.e., graphic characters whose codes do not belong to the ISO
seven-bit coded character set (ISO standard 646)) as long as the additional
characters appear only in comments.
AI-00343/05: Decimal fixed point representations [3.5.9(10)]
An implementation can use decimal or binary representations for fixed point
values as long as all model numbers are represented exactly.
AI-00350/04: Lexical elements not changed by allowable character
replacements [6.3.1(05), 2.10(05)]
Lexical elements differing only in their use of allowable replacements of
characters (as defined in 2.10) are considered as the same. In particular, use
of the allowable replacements does not affect the conformance of formal parts,
discriminant parts, or actual parameters.
G–24
AI-00354/03: On the elaboration of library units [10.5(02)]
There is no requirement that the body of a library unit be elaborated as soon
as possible after the library unit is elaborated. In particular, the pragma
ELABORATE should be used if it is important that a library package’s body be
elaborated before another package is elaborated.
AI-00355/06: Pragma ELABORATE for predefined library packages
[10.5(04), 9.6(07), 13.7(02), 13.10.1(01), 13.10.2(01), 14.1(01), 14.3(01), 14.6(05),
C(22)]
An attempt to use an entity declared within a predefined library unit or a unit
declared within a predefined library package must raise PROGRAM_ERROR
if a required body has not been elaborated (3.9(5-8)). An implementation is
not allowed to raise PROGRAM_ERROR for this reason, however, if a pragma
ELABORATE has been given for the library unit. (In particular, if the library
unit body provided by the implementation depends on other (implementation-
defined) library units, the implementation must ensure prior elaboration of the
required bodies, e.g., by providing appropriate ELABORATE pragmas.)
AI-00356/08: Access values that designate deallocated objects
[3.2.1(18), 4.8(07), 13.10.1(06)]
The storage occupied by a designated object can be reclaimed immediately
after applying an instance of the unchecked deallocation procedure to an access
variable that designates the object.
If two objects having non-null access values designate the same object and
an instance of the unchecked deallocation procedure is applied to one of the
objects, the other object is considered to have an undefined value; any attempt
to use such a value makes execution of the program erroneous.
Similarly, if a name declared by a renaming declaration denotes a subcompo-
nent of an object that is later freed by calling an instance of the unchecked
deallocation procedure, the name is considered to have an undefined value; any
attempt to evaluate the name (e.g., by assigning a value to it) makes execution
of the program erroneous.
AI-00357/05: CLOSE or RESET of a sequential file from OUT_FILE mode
[14.2.1(09), 14.2.1(15)]
If a sequential input-output file having mode OUT_FILE is closed or reset, the
most recently written element since the last open or reset is the last element
that can be read from the file. If no elements have been written, the closed
or reset file is empty. (As a consequence, opening a sequential input-output
file with mode OUT_FILE or resetting a sequential input-output file to mode
OUT_FILE has the effect of deleting the previous contents of the file.)
G–25
AI-00358/10: Discriminant checks for non-existent subcomponents [3.7.2(05),
3.7(08)]
When checking the compatibility of a discriminant constraint, 3.7.2(5) requires
that a discriminant’s value be substituted in component subtype definitions
that depend on the discriminant. This substitution is performed only for those
subcomponents that exist in the subtype defined by the constraint.
AI-00362/03: ‘‘component of a record’’ for representation attributes
[13.7.2(08)]
The prefix of ’POSITION, ’FIRST_BIT, or ’LAST_BIT must denote a
component of a record object.
AI-00365/05: Actual parameter names are evaluated in generic instantiations
[12.3(17)]
In a generic instantiation, the names appearing as actual parameters are
evaluated.
AI-00366/07: The value of SYSTEM.TICK for different execution environments
[13.7.1(07)]
SYSTEM.TICK should have a value that reflects the precision of the clock in
the main program’s execution environment. If SYSTEM.TICK does not have
an appropriate value, the effect of executing the program is not defined.
AI-00367/06: Deriving from types declared in a generic package
[3.4(11), 12.1(05)]
The rules concerning derivable subprograms in the visible part of a nongeneric
package are applicable in the visible part of a generic package. (The effect
of a derived type declaration in an instance of a generic unit is discussed in
AI-00398.)
AI-00370/06: Visibility of subprogam names within instantiations
[8.3(16)]
Any declaration with the same designator as a subprogram instantiation is not
visible, even by selection, within the instantiation.
AI-00371/05: Representation clauses containing forcing occurrences
[13.1(07), 2.8(09)]
An expression in a representation clause is illegal if it contains a forcing
occurrence for the type whose representation is being specified.
AI-00374/06: An attempt to access an undefined constant is erroneous
[3.2.1(18)]
The execution of a program is erroneous if it attempts to evaluate a scalar
constant with an undefined value.
G–26
AI-00375/05: Restricting the allowed values of a floating point subtype
[3.5.7(17)]
If a floating point constraint in a subtype indication includes a range
constraint, the range of the values that belong to the subtype (i.e., that satisfy
the constraint) is defined by the range constraint. If no range constraint is
present, the range of values that belong to the subtype is not affected, even
though the accuracy of the subtype may be reduced.
AI-00376/04: Universal real operands with fixed point * and / [4.5.5(10)]
An expression having type universal_real is not allowed as an operand of a
fixed point multiplication or division operation. The possibility of adopting a
more liberal rule in a future version of the language will be studied.
This commentary extends the conclusions of AI-00020 to cover all expressions
of type universal_real, not just those having the form of a real literal.
AI-00379/03: Address clauses for entries of task types [13.5(08)]
If an interrupt is linked to an entry of more than one task object (of the same
type), the program is erroneous.
AI-00384/05: Use of an incomplete private type in a formal type declaration
[7.4.1(04)]
An incompletely declared private type cannot be used in the declaration of a
generic formal type.
AI-00387/05: Raising CONSTRAINT_ERROR instead of NUMERIC_ERROR
[11.1(06), 3.5.4(10), 3.5.6(06), 4.5(07), 4.5.5(12), 4.5.7(07), 4.10(05)]
Wherever the Standard requires that NUMERIC_ERROR be raised (other than
by a raise statement), CONSTRAINT_ERROR should be raised instead. This
interpretation is non-binding.
AI-00388/06: Pragmas are allowed in a generic formal part [2.8(04)]
Pragmas are allowed in a generic formal part.
AI-00396/03: Correction to discussion of AI-00025 [6.4.1(09)]
The discussion section of AI-00025/07 should be corrected. Instead of saying,
‘‘The effect of the call, CALL_Q_NOW.CALL_Q.Q(Y), is to assign an invalid
value to P.Z’’
the discussion should say,
‘‘The effect of elaborating CALL_Q_NOW is to assign an invalid value to
P.Z’’.
G–27
AI-00397/04: Checking the designated subtype for an allocator [4.8(13),
4.8(05)]
When evaluating an allocator, a check is made that the designated object
belongs to the allocator’s designated subtype. CONSTRAINT_ERROR is raised
if this check fails. This check can be made any time before evaluation of the
allocator is complete. In particular, it is not defined whether this check is
performed before creation of a designated object, evaluation of any default
initialization expressions, or evaluation of any expressions contained in the
allocator.
AI-00398/08: Operations declared for types declared in instances
[12.3(05), 3.4(11)]
If the parent type in a derived type definition is a generic formal type, the
operations declared for the derived type in the template are determined by the
class of the formal type. The operations declared for the derived type in the
instance are determined by the type denoted by the formal parameter.
Similarly, if the component type of an array type is a generic formal type or if
the designated type of an access type is a generic formal type, the operations
declared for the array and access type in the template depend on the class of
the formal type. If the array and access type declarations do not occur in the
generic formal part, then the operations declared for these types in a generic
instance are determined by the type denoted by the formal parameter in the
instance.
If the designated type in an access type declaration is an incomplete type,
additional operations can be declared for the access type by the full declaration
of the incomplete type (7.4.2(7-8)). If the full declaration declares a type
derived from a generic formal type, the additional operations (if any) declared
for the access type in the template are determined by the class of the formal
type. The additional operations declared for the access type in the instance are
determined by the type denoted by the formal parameter.
Similar rules apply when the parent type, component type, or designated type
is derived, directly or indirectly, from a generic formal type.
AI-00405/06: One nonstatic operand for a universal real relation
[4.10(04)]
If the operands of a relational operator or membership test have the type
universal_real and one or more of the operands is nonstatic, the static operands
must be evaluated exactly. Doing so, however, does not impose a run-time
overhead.
G–28
AI-00406/05: Evaluating parameters of a call before raising
PROGRAM_ERROR [3.9(05)]
It is not defined whether the check that the body of a subprogram has been
elaborated is made before or after the actual parameters of a call have been
evaluated.
Similarly, it is not defined whether the check that the body of a generic unit
has been elaborated is made before or after the generic actual parameters of
an instantiation have been evaluated.
AI-00407/06: The operations of a subtype with reduced accuracy
[3.5.8(16), 3.5.10(15), 4.5.7(00), 5.2(03)]
When assigning a fixed or floating point value to a variable, the stored value
need only be represented as a model number of the variable’s subtype.
Furthermore, if no exception is raised by the assignment, the stored value
belongs to the subtype of the variable.
If a real subtype is used as the type mark in a membership test, qualification,
or explicit conversion, the corresponding operation is performed with the
accuracy of the base type and the range of the subtype.
For a real subtype, the value of the attributes FIRST or LAST is represented
with at least the accuracy of the base type. The values of other attributes of a
real subtype are given exactly.
AI-00408/11: Effect of compiling generic unit bodies separately [10.3(06)]
An implementation is allowed to create a dependence on a generic unit body
such that successfully compiling (or recompiling) the body separately makes
previously compiled units obsolete if they contain an instantiation of the
generic unit. A similar dependence can be created for separately compiled
subunits of a generic unit.
AI-00409/05: Static subtype names created by instantiation [12.3(05), 4.9(11)]
A subtype can be nonstatic in a generic template and static in a corresponding
instance.
AI-00412/06: Expanded names for generic formal parameters
[4.1.3(15), 4.1.3(18), 12.1(05)]
A formal parameter of a generic unit can be denoted by an expanded name.
AI-00418/06: Self-referencing with clauses [10.1(03)]
Circular dependences among library units are not allowed, i.e., the library unit
being compiled cannot have the same name as a previously compiled library
unit if a with clause for the unit being compiled establishes a direct or indirect
dependence on the previously compiled unit.
G–29
AI-00422/06: Representation clauses for derived enumeration and record
types [13.1(03), 13.3(02), 13.4(02)]
An enumeration representation clause or a record representation clause can
be given for an enumeration type or a record type declared by a derived type
declaration.
The index subtype for the aggregate used in an enumeration representation
clause is the base type of the enumeration type.
A record representation clause for a first named subtype can specify the
representation of any component that belongs to the record’s base type, even if
the subtype is constrained.
AI-00425/05: Restrictions on arguments of implementation-defined pragmas
[2.8(08)]
An implementation can impose restrictions on the arguments of its
implementation-defined pragmas (e.g., it can require that an argument be
a static expression).
AI-00426/05: Operations on undefined array values [3.2.1(18),
4.5.1(03)]
If both operands of a predefined logical operator do not have the same number
of components, CONSTRAINT_ERROR is raised, even if one of the operands
has a scalar component with an undefined value.
AI-00430/05: Using an enumeration literal does not raise PROGRAM_ERROR
[3.5.1(03), 3.9(08)]
The use of an enumeration literal (i.e., a call of the corresponding parameter-
less function) does not raise PROGRAM_ERROR.
AI-00431/05: Boolean operators producing out of range results
[4.5.1(03)]
Predefined logical operations on boolean arrays are performed on a component-
by-component basis, using the predefined logical operation for the component
type (even if a user-defined logical operation for the component type is visible
and hides the predefined one).
AI-00441/06: A task without dependents can be completed but not
terminated [9.4(06)]
A task that has no dependent tasks can be completed but not yet terminated,
i.e., T’CALLABLE can be FALSE when T’TERMINATED is not yet TRUE.
AI-00444/05: Conditional entry calls can be queued momentarily
[9.7.2(01)]
A conditional entry call may (momentarily) increase the COUNT attribute of
an entry, even if the conditional call is not accepted.
G–30
AI-00446/05: Raising an exception in an abnormally completed task
[9.10(06), 11.4(01)]
An exception can be propagated to an abnormally completed task that is
engaged in a rendezvous or that is waiting for a task to be activated. If this
occurs, the exception has no effect.
AI-00449/04: Evaluating default discriminant expressions [3.3.2(06)]
Default discriminant expressions are not evaluated when a subtype indication
is elaborated.
AI-00455/05: Raising an exception before the sequence of statements
[11.4.1(03)]
If an exception is raised due to the attempt to activate a task and the exception
is raised after elaboration of a declarative part and just before execution of a
sequence of statements, the sequence of statements is not executed and control
is transferred in the same manner as for an exception raised in the sequence of
statements.
AI-00464/05: Delay statements executed by the environment task
[9.6(01)]
Delay statements can be executed by the environment task when a library
package is elaborated. Such statements delay the environment task.
AI-00466/04: I/O performed by library tasks [14.1(07)]
The language does not define what happens to external files after the
completion of the main program and before completion of all the library tasks.
AI-00467/04: Correction to AI-00179/06 [3.5.10(08)]
In the discussion section of AI-00179/06, the upper bound of SG’s range
constraint and the model interval in the subsequent discussion are incorrect
because the model numbers for subtype SG are the same as the model numbers
for type G.
AI-00468/04: Correction to AI-00187/04 discussion [4.1.3(15)]
The discussion section of AI-00187/04 should be corrected to point out that a
name declared by a renaming declaration is not allowed as the prefix of an
expanded name if the selector is not declared in the visible part of the package
denoted by the prefix.
AI-00471/04: Correction to AI-00144/08 examples [3.5.9(09)]
In the examples, the value of delta is given incorrectly as an integer
expression, 2**(–15); the expression should be 2.0**(–15).
G–31
AI-00475/05: Multiplication of fixed point values by negative integers
[4.5.5(08)]
If the integer in an integer multiplication of a fixed point value is negative,
the multiplication is equivalent to changing the sign of the fixed point value
followed by repeated addition.
AI-00483/04: Correction to question in AI-00409/03 [12.3(05)]
The instantiation of SET_OF in the question is illegal because the formal
generic type is an integer type. The formal type should be declared as a
discrete type.
AI-00486/04: Correction to AI-00047/06 example [14.3.1(04)]
The call to SET_PAGE_LENGTH in the question’s example should refer to file
FT, not the default output file.
AI-00493/05: Operator symbols that represent the same operator
[6.3.1(04)]
Two string literals serving as operator symbols represent the same operator
if the string literals are identical or if the only difference is that some letters
appear in upper case rather than lower case.
AI-00502/05: Error in AI-00170/06 [8.5(05)]
The declaration of type SINT in the question’s example should be replaced with
a subtype declaration so SINT has the type INTEGER.
AI-00503/04: Error in AI-00258/05 [13.7.2(07)]
The renaming declaration for Ren_C2 in AI-00258/05 is illegal since a type
mark is required instead of a subtype indication. An appropriate subtype
declaration should be added to the example.
AI-00508/03: The safe numbers of a fixed point subtype [3.5.9(11)]
The safe numbers of a fixed point subtype are the safe numbers of its
base type.
AI-00511/05: Error in AI-00388/04 [2.8(04)]
The example given in the response is syntactically incorrect unless ‘‘package
P’’ is replaced with either ‘‘procedure P’’ or ‘‘package P is end’’.
AI-00516/05: The safe interval for a fixed/integer result [4.5.7(04)]
When a fixed point value is divided by an integer value, the result model
interval is determined by considering the integer value to be a model interval
consisting of a single integer value.
G–32
AI-00866/03: The Latin-1 character set is used in source code and literals
[2.1(01), 2.5(01), 2.7(01), C(13)]
The Ada character set is based on ISO 8859/1, Latin-1. This commentary
replaces and extends AI-00339, which applied only to character codes used in
comments.
An implementation is allowed to provide pragmas or operating modes in which
the graphic characters used in identifiers and string literals are defined in a
locally appropriate manner (e.g., Latin-2).
G–33
Index
An entry exists in this index for each technical term or phrase that is defined in the
reference manual. The term or phrase is in boldface and is followed by the section
number where it is defined, also in boldface, for example:
Record aggregate 4.3.1
References to other sections that provide additional information are shown after a
semicolon, for example:
Record aggregate 4.3.1; 4.3
References to other related entries in the index follow in brackets, and a line that is
indented below a boldface entry gives the section numbers where particular uses of
the term or phrase can be found; for example:
Record aggregate 4.3.1; 4.3
[see also: aggregate]
as a basic operation 3.3.3; 3.7.4
in a code statement 13.8
The index also contains entries for different parts of a phrase, entries that correct
alternative terminology, and entries directing the reader to information otherwise
hard to find, for example:
Check
[see: suppress pragma]
The entries for the DEC Ada technical terms, phrases, references, and so on have
been incorporated into the index following the established conventions. Additions to
an existing entry have been added to the end of the entry; additional main entries
have been inserted directly into the existing index. All DEC Ada additions are
distinguished by colored print.
Index–1
Abandon elaboration or evaluation (of in a select alternative 9.7.1
declarations or statements) including an exit statement 5.7
[see: exception, raise statement] including a goto statement 5.9
including a return statement 5.8
Abnormal task 9.10; 9.9 raising an exception 11.5
[see also: abort statement] to communicate values 9.11
as recipient of an entry call 9.7.2,
9.7.3, 11.5; 9.5 Access to external files 14.2
raising tasking_error in a calling
task 11.5; 9.5 Access type 3.8; 3.3, D
[see also: allocator, appropriate for a
Abort statement 9.10 type, class of type, collection, derived
[see also: abnormal task, statement, type of an access type, null access
task] value, object designated by . . . ]
as a simple statement 5.1 as a derived type 3.4
as a generic formal type 12.1.2,
Abs unary operator 4.5.6; 4.5 12.3.5
[see also: highest precedence deallocation [see: unchecked_
operator] deallocation]
as an operation of a fixed point designating a limited type 7.4.4
type 3.5.10 designating a task type
as an operation of a floating point determining task dependence
type 3.5.8 9.4
as an operation of an integer type formal parameter 6.2
3.5.5 name in a controlled pragma 4.8
in a factor 4.4 object initialization 3.2.1
Absolute global symbol D; 13.9a.2.1, operation 3.8.2
13.9a.2.2, 13.9a.2.3 prefix 4.1
value designating an object 3.2,
Absolute value operation 4.5.6 4.8
value designating an object with
Accept alternative (of a selective wait)
discriminants 5.2
9.7.1
with a discriminant constraint
for an interrupt entry 13.5.1
3.7.2
Accept statement 9.5; 9, D with an index constraint 3.6.1
[see also: entry call statement, simple input-output of 14.1
name in . . . , statement, task]
Access type definition 3.8; 3.3.1, 12.1.2
accepting a conditional entry call
as a generic type definition 12.1
9.7.2
accepting a timed entry call 9.7.3 Access_check
and optimization with exceptions [see: constraint_error, suppress]
11.6 [see also: address (predefined
as a compound statement 5.1 attribute); bit (DEC Ada predefined
as part of a declarative region 8.1 attribute)]
entity denoted by an expanded
name 4.1.3
in an abnormal task 9.10
Index–2
Accuracy Adding operator
of a numeric operation 4.5.7 [see: binary adding operator, unary
of a numeric operation of a adding operator]
universal type 4.10
ADD_INTERLOCKED (DEC Ada
Activation predefined procedure)
[see: task activation] [see:system.add_interlocked]
Actual object Addition operation 4.5.3
[see: generic actual object] accuracy for a real type 4.5.7
Actual parameter 6.4.1; D; (of an ADDRESS (predefined attribute) 13.7.2;
operator) 6.7; (of a subprogram) 6.4; 6.2, 3.5.5, 3.5.8, 3.5.10, 3.6.2, 3.7.4, 3.8.2, 7.4.2,
6.3 9.9, 13.7, A
[see also: entry call, formal [see also: address clause,
parameter, function call, procedure system.address]
call statement, subprogram call]
characteristics and overload ADDRESS (predefined type)
resolution 6.6 [see: system.address]
in a generic instantiation Address clause 13.5; 13.1, 13.7
[see: generic actual parameter] [see also: storage address,
of an array type 3.6.1 system.address]
of a record type 3.7.2 as a representation clause 13.1
of a task type 9.2 for an entry 13.5.1
that is an array aggregate 4.3.2 DEC Ada interpretation of
that is a loop parameter 5.5 expressions F.7
Actual parameter part 6.4 DEC Ada restrictions on 13.5
in a conditional entry call 9.7.2 ADDRESS_OPERATIONS (DEC Ada
in an entry call statement 9.5 predefined package) 13.7a.1
in a function call 6.4
in a procedure call statement 6.4 ADDRESS_SIZE (DEC Ada predefined
in a timed entry call 9.7.3 constant)
[see:system.address_size]
Actual part
[see: actual parameter part, generic ADDRESS_ZERO (DEC Ada predefined
actual part] constant)
[see: system.address_zero]
Actual subprogram
[see: generic actual subprogram] AFT (predefined attribute) for a fixed
point type 3.5.10; A
Actual type
[see: generic actual type] Aft field of text_io output 14.3.8, 14.3.10
Index–3
in an allocator 4.8 Allowed 1.6
in a code statement 13.8
in an enumeration representation Alternate key in an indexed access file
clause 13.3 14.2a
in a qualified expression 4.7 Alternative
must not be the argument of a [see: accept alternative, case
conversion 4.6 statement alternative, closed
of a derived type 3.4 alternative, delay alternative,
ALIGNED_WORD (DEC Ada predefined open alternative, select alternative,
type) selective wait, terminate alternative]
[see: system.aligned_word] Ambiguity
Alignment clause (in a record [see: overloading]
representation clause) 13.4 Ampersand
All in a selected component 4.1.3 [see: catenation]
character 2.1
Allocation delimiter 2.2
of array and record components
13.1, 13.4 Ancestor library unit 10.2
of variables forced to memory And operator
with representation attribute [see: logical operator]
address 13.7.2
And then control form
Allocation of processing [see: short circuit control form]
resources 9.8
AND_ATOMIC (DEC Ada predefined
Allocator 4.8; 3.8, D procedure)
[see also: access type, collection, [see:system.and_atomic]
exception raised during . . . , initial
value, object, overloading of . . . ] Anonymous type 3.3.1; 3.5.4, 3.5.7,
as a basic operation 3.3.3; 3.8.2 3.5.9, 3.6, 9.1
as a primary 4.4
Anonymous base type
creating an object with a
[see: first named subtype]
discriminant 4.8; 5.2
for an array type 3.6.1 ANSI (american national standards
for a generic formal access type institute) 2.1
12.1.2
for a private type 7.4.1 Apostrophe character 2.1
for a record type 3.7.2 in a character literal 2.5
for a task type 9.2; 9.3
Apostrophe delimiter 2.2
must not be the argument of a
in an attribute 4.1.4
conversion 4.6
of a qualified expression 4.7
raising storage_error due to
the size of the collection being Apply 10.1.1
exceeded 11.1
setting a task value 9.2
without storage check 11.7
Index–4
Appropriate for a type 4.1 as the type of a formal parameter
for an array type 4.1.1, 4.1.2 6.2
for a record type 4.1.3 conversion 4.6
for a task type 4.1.3 for a prefix of an indexed
component 4.1.1
Arbitrary selection of select alternatives for a prefix of a slice 4.1.2
9.7.1 operation 3.6.2; 4.5.2, 4.5.3
Argument association in a pragma 2.8 operation on an array of boolean
components 4.5.1, 4.5.6
Argument identifier in a pragma 2.8 with a component type with
discriminants 3.7.2
Arithmetic operator 4.5
with a limited component type
[see also: binary adding operator,
7.4.4
exponentiating operator, multiplying
maximum number of dimensions
operator, predefined operator, unary
in DEC Ada F
adding operator]
as an operation of a fixed point Array type definition 3.6; 3.3.1, 12.1.2,
type 3.5.10 12.3.4
as an operation of a floating point [see also: constrained array definition,
type 3.5.8 elaboration of . . . , unconstrained
as an operation of an integer type array definition]
3.5.5 as a generic type definition 12.1
rounding for real types 13.7.3
Arrow compound delimiter 2.2
Array aggregate 4.3.2; 4.3
[see also: aggregate] ASCII (american standard code for
as a basic operation 3.3.3; 3.6.2 information interchange) 2.1
in an enumeration representation ASCII (predefined library package) 3.5.2;
clause 13.3 2.6, C
Array assignment 5.2.1 [see also: graphical symbol]
Index–5
to an object designated by an of a fixed point type 3.5.10
access value 3.8 of a floating point type 3.5.8
to a shared variable 9.11 of an object of a task type 9.9
of a private type 7.4.2; 3.7.4
Assignment statement 5.2; D of a record type 3.7.4
[see also: statement] of a static subtype in a static
as a simple statement 5.1 expression 4.9
ASSIGN_TO_ADDRESS (DEC Ada of a task type 9.9
generic procedure) of a type 3.3
[see: system.assign_to_address] of a type as a generic actual
function 12.3.6
Associated declarative region of a of a type with discriminants 3.7.4
declaration or statement 8.1 renamed as a function 8.5
that is a function 3.5.5
Association
[see: component association, Attribute designator 4.1.4
discriminant association,
generic association, parameter AUX_IO_EXCEPTIONS (DEC Ada
association] predefined input-output package) 14.4;
14.2a.3, 14.2a.5, 14.2b.8, 14.2b.10
AST_ENTRY (DEC Ada predefined specification 14.5a
attribute) 9.12a; A
AST_ENTRY (DEC Ada predefined
pragma) 9.12a; B
AST_HANDLER (DEC Ada predefined
type) Bar
[see: system.ast_handler] [see: vertical bar]
Asynchronous system trap (AST) BASE (predefined attribute) 3.3.3; A
(OpenVMS) D for an access type 3.8.2
[see also: ast_entry, system.ast_ for an array type 3.6.2
handler] for a discrete type 3.5.5
Attribute 4.1.4; D for a fixed point type 3.5.10
[see also: predefined attribute, for a floating point type 3.5.8
representation attribute] for a private type 7.4.2
as a basic operation 3.3.3 for a record type 3.7.4
as a name 4.1 Base type (of a subtype) 3.3
as a primary 4.4 as a static subtype 4.9
in a length clause 13.2 as target type of a conversion 4.6
in a static expression in a generic due to elaboration of a type
unit 12.1 definition 3.3.1
of an access type 3.5.8 name [see: name of a base type]
of an array type 3.6.2 of an array type 3.6; 4.1.2
of a derived type 3.4 of a derived subtype 3.4
of a discrete type or subtype 3.5.5
of an entry 9.9
Index–6
of a discriminant determining the Basic graphic character 2.1
set of choices of a variant part [see also: basic character, digit,
3.7.3 graphic character, space character,
of a fixed point type 3.5.9 special character, upper case letter]
of a floating point type 3.5.7
of a formal parameter of a generic Basic operation 3.3.3
formal subprogram 12.1.3 [see also: operation, scope of . . . ,
of an integer type 3.5.4 visibility . . . ]
of a parent subtype 3.4 accuracy for a real type 4.5.7
of a qualified expression 4.7 implicitly declared 3.1, 3.3.3
of a type mark 3.3.2 of an access type 3.8.2
of a type mark in a membership of an array type 3.6.2
test 4.5.2 of a derived type 3.4
of the discrete range in a loop of a discrete type 3.5.5
parameter specification 5.5 of a fixed point type 3.5.10
of the expression in a case of a floating point type 3.5.8
statement 5.4 of a limited type 7.4.4
of the result of a generic formal of a private type 7.4.2
function 12.1.3 of a record type 3.7.4
of the result subtype of a function of a task type 9.9
5.8 propagating an exception 11.6
of the subtype indication in an raising an exception 11.4.1
access type definition 3.8 that is an attribute 4.1.4
of the type in the declaration of a Belong
generic formal object 12.1.1 to a range 3.5
of the type mark in a renaming to a subtype 3.3
declaration 8.5 to a subtype of an access type 3.8
Based literal 2.4.2; 14.3.7 Binary adding operator 4.5; 4.5.3, C
[see also: colon character, sharp [see also: arithmetic operator,
character] overloading of an operator]
as a numeric literal 2.4 for time predefined type 9.6
Basic character 2.1 in a simple expression 4.4
[see also: basic graphic character, overloaded 6.7
character] Binary operation 4.5
Basic character set 2.1 Bit
is sufficient for a program text [see: storage bits]
2.10
BIT (DEC Ada predefined attribute)
Basic declaration 3.1 13.7.2; A
as a basic declarative item 3.9
Bit array D; 13.9a.1.2
Basic declarative item 3.9
in a package specification 7.1; 7.2 BIT_ARRAY (DEC Ada predefined type)
[see: system.bit_array]
Bit string 13.9a.1.2; D
Index–7
Blank skipped by a text_io procedure Boolean operator
14.3.5 [see: logical operator]
Block name 5.6 Boolean type 3.5.3
declaration 5.1 [see also: derived type of a boolean
implicitly declared 3.1 type, predefined type]
operation 3.5.5; 4.5.1, 4.5.2, 4.5.6
Block statement 5.6; D operation comparing real
[see also: completed block statement, operands 4.5.7
statement]
as a compound statement 5.1 Bound
as a declarative region 8.1 [see: error bound, first attribute, last
entity denoted by an expanded attribute]
name 4.1.3
having dependent tasks 9.4 Bound of an array 3.6, 3.6.1
including an exception handler [see also: index range, slice]
11.2; 11 aggregate 4.3.2
including an implicit declaration ignored due to index_check
5.1 suppression 11.7
including a suppress pragma 11.7 initialization in an allocator
raising an exception 11.4.1, 11.4.2 constrains the allocated object 4.8
that is a formal parameter 6.2
Body 3.9; D that is the result of an operation
[see also: declaration, generic 4.5.1, 4.5.3, 4.5.6
body, generic package body,
generic subprogram body, library Bound of a range 3.5; 3.5.4
unit, package body, proper body, of a discrete range in a slice 4.1.2
subprogram body, task body] of a discrete range is of universal_
as a later declarative item 3.9 integer type 3.6.1
of a static discrete range 4.9
Body stub 10.2; D
acting as a subprogram Bound of a scalar type 3.5
declaration 6.3 Bound of a slice 4.1.2
as a body 3.9
as a portion of a declarative Box D
region 8.1
Box compound delimiter 2.2
must be in the same declarative
in a generic parameter
region as the declaration 3.9, 7.1
declaration 12.1, 12.1.2, 12.1.3;
BOOLEAN (predefined type) 3.5.3; C 12.3.3
derived 3.4; 3.5.3 in an index subtype definition 3.6
result of a condition 5.3
Bracket
result of an explicitly declared
[see: label bracket, left parenthesis,
equality operator 6.7
parenthesized expression, right
Boolean expression parenthesis, string bracket]
[see: condition, expression]
Index–8
special character, parenthesis,
CALENDAR (predefined library package) percent, period, plus, point character,
9.6; C pound sterling, quotation, semicolon,
sharp, space, special character, star,
Call underline, vertical bar]
[see: conditional entry call, entry call in a lexical element 2, 2.2
statement, function call, procedure names of characters 2.1
call statement, subprogram call, timed replacement in program text 2.10
entry call] image of a nongraphic 3.5.5
CALLABLE (predefined attribute) CHARACTER (predefined type) 3.5.2; C
for an abnormal task 9.10 as the component type of the type
for a task object 9.9; A string 3.6.3
Calling conventions Character literal 2.5; 3.5.2, 4.2
[see: subprogram declaration] [see also: scope of . . . , space
of a subprogram written in character literal, visibility of . . . ]
another language 13.9 as a basic operation 3.3.3
Cancelation of an entry call statement as an enumeration literal 3.5.1
9.7.2, 9.7.3 as a name 4.1
as a selector 4.1.3
Carriage return format effector 2.1 declared by an enumeration
literal specification 3.1
Case of a letter
in a static expression 4.9
[see: letter, lower case letter, upper
in homograph declarations 8.3
case letter]
must be visible at the place of a
Case statement 5.4 string literal 4.2
[see also: statement]
Character type 3.5.2; 2.5
as a compound statement 5.1
operation 3.5.5
Case statement alternative 5.4
Check
Catenation operation 4.5.3 [see: suppress pragma]
for an array type 3.6.2
Choice 3.7.3
in a replacement of a string
[see also: exception choice]
literal 2.10
in an aggregate 4.3
Catenation operator 4.5; 2.6, 3.6.3, in an array aggregate 4.3.2
4.5.3, C in a case statement alternative
[see also: predefined operator] 5.4
in a component association 4.3,
Cell in a relative access file 14.2a 4.3.1, 4.3.2
in a record aggregate 4.3.1
Character 2.1
in a variant of a record type
[see also: ampersand, apostrophe,
definition 3.7.3
basic character, colon, divide, dot,
equal, exclamation mark character, Circularity in dependences
graphic character, greater than, between compilation units 10.5
hyphen, less than, minus, other
Index–9
Class of type 3.3; 12.1.2 Collection (of an access type) 3.8; 4.8, D
[see also: access type, composite type, [see also: access type, allocator, length
private type, scalar type, task type] clause, object, storage units allocated,
of a derived type 3.4 storage_size attribute]
of a derived access type 13.2; 3.4
Clause
[see: address clause, alignment Colon character 2.1
clause, component clause, context [see also: based literal]
clause, enumeration representation replacing sharp character 2.10
clause, length clause, record
representation clause, representation Colon delimiter 2.2
clause, use clause, with clause] Column 14.3.4
CLEAR_INTERLOCKED (DEC Ada Comma
predefined procedure) character 2.1
[see: system.clear_interlocked] delimiter 2.2
CLOCK (predefined function) 9.6 Comment 2.7; 2.2
[see also: system.tick] in a conforming construct 6.3.1
CLOSE (input-output procedure) COMMON_OBJECT (DEC Ada
in an instance of direct_io 14.2.1; predefined pragma) 13.9a.2.3; 13.9a,
14.2.5 13.9a.2, B
in an instance of sequential_io maximum number of objects
14.2.1; 14.2.3 declared with F
in text_io 14.2.1; 14.3.10
in an instance of indexed_io Communication
14.2.1; 14.2a.5 between tasks [see: accept
in an instance of relative_io statement, entry, rendezvous]
14.2a.1; 14.2a.3 of values between tasks 9.5, 9.11
in direct_mixed_io 14.2.1; 14.2b.6
Comparison
in indexed_mixed_io 14.2.1;
[see: relational operator]
14.2b.10
in relative_mixed_io 14.2.1; Compatibility (of constraints) 3.3.2
14.2b.8 [see also: constraint]
in sequential_mixed_io 14.2.1; failure not causing constraint_
14.2b.4 error 11.7
of a discrete range with an index
Closed alternative (of a selective wait)
subtype 3.6.1
9.7.1; 11.1
of discriminant constraints 3.7.2
[see also: alternative]
of fixed point constraints 3.5.9
Closed file 14.1 of floating point constraints 3.5.7
of index constraints 3.6.1
Code statement 13.8 of range constraints 3.5
[see also: statement]
as a simple statement 5.1
COL (text_io function) 14.3.4; 14.3.10
raising an exception 14.4
Index–10
Compilation 10.1; 10, 10.4 object, record type, selected
as a sequence of lexical elements component, subcomponent]
2 combined by aggregate 4.3
including an inline pragma 6.3.2 depending on a discriminant
3.7.1; 11.1
Compilation order name starting with a prefix 4.1
[see: order of compilation] of an array 3.6 [see also: array
Compilation unit 10.1; 10, 10.4, D type]
[see also: library unit, secondary unit] of a constant 3.2.1
compiled after library units of a derived type 3.4
named in its context clause 10.3 of an object 3.2
followed by an inline pragma of a private type 7.4.2
6.3.2 of a record 3.7 [see also: record
with a context clause 10.1.1 type]
with a use clause 8.4 of a variable 3.2.1
simple name as a choice 3.7.3
Compile time evaluation of expressions subtype 3.7
10.6; 4.9 subtype itself a composite type
3.6.1, 3.7.2
Compiler 10.4
that is a task object 9.3
Compiler listing whose type is a limited type 7.4.4
[see: list pragma, page pragma] biasing of 13.4
Index–11
Component list 3.7 Compound statement 5.1
in a record type definition 3.7 [see also: statement]
in a variant 3.7.3 including the destination of a goto
statement 5.9
Component subtype definition 3.7
[see also: dependence on a Concatenation
discriminant] [see: catenation]
in a component declaration 3.7
Condition 5.3
Component type [see also: expression]
catenation with an array type determining an open alternative
4.5.3 of a selective wait 9.7.1
object initialization [see: initial in an exit statement 5.7
value] in an if statement 5.3
of an expression in an array in a while iteration scheme 5.5
aggregate 4.3.2
of an expression in a record Condition value D; 13.9a.3.1, 13.9a.3.2
aggregate 4.3.1 Conditional compilation 10.6
of a generic formal array type
12.3.4 Conditional entry call 9.7.2; 9.7
operation determining a and renamed entries 8.5
composite type operation 4.5.1, subject to an address clause
4.5.2 13.5.1
Index–12
Constant declaration 3.2.1 on a formal parameter of a
[see also: deferred constant generic formal subprogram 12.1.3
declaration] on a generic actual parameter
as a full declaration 7.4.3 12.3.1
with an array type 3.6.1 on a generic formal object 12.1.1
with a record type 3.7.2 on a generic formal parameter
12.1; 12.3.1
CONSTRAINED (predefined attribute) on an object designated by an
for an object of a type with access value 3.8
discriminants 3.7.4; A on a renamed object 8.5
for a private type 7.4.2, A on a subcomponent subject to a
Constrained array definition 3.6 component clause must be static
in an object declaration 3.2, 3.2.1 13.4
on a subtype of a generic formal
Constrained array type 3.6 type 12.1.2
[see also: array type, constraint] on a type mark in a generic
parameter declaration 12.3.1
Constrained subtype 3.3; 3.2.1, 3.6,
on a variable 3.2.1, 3.3, 3.6
3.6.1, 3.7, 3.7.2, 6.4.1, 12.3.4
on the result of a generic formal
[see also: constraint, subtype, type,
function 12.1.3
unconstrained subtype]
due to elaboration of a type CONSTRAINT_ERROR (predefined
definition 3.3.1 exception) 11.1
due to the elaboration of a derived [see also: suppress pragma]
type definition 3.4 raised by an accept statement 9.5
object declarations 3.2.1 raised by an actual parameter
of a subtype indication in an not in the subtype of the formal
allocator 4.8 parameter 6.4.1
raised by an allocator 4.8
Constraint (on an object of a type) 3.3,
raised by an assignment 5.2; 3.5.4
3.3.2; D
raised by an attribute 3.5.5
[see also: accuracy constraint,
raised by a component of an array
compatibility, constrained subtype,
aggregate 4.3.2
dependence on a discriminant,
raised by a component of a record
discriminant constraint, elaboration
aggregate 4.3.1
of . . . , fixed point constraint, floating
raised by an entry call statement
point constraint, index constraint,
9.5
range constraint, satisfy, subtype,
raised by a formal parameter
unconstrained subtype]
not in the subtype of the actual
explicitly specified by use of a
parameter 6.4.1
qualification 4.7
raised by an index value out of
in a subtype indication in an
bounds 4.1.1, 4.1.2
allocator 4.8
raised by a logical operation on
not considered in overload
arrays of different lengths 4.5.1
resolution 8.7
raised by a name with a prefix
on a derived subtype 3.4
evaluated to a null access value
on a formal parameter 6.2
4.1
Index–13
raised by a qualification 4.7 applied to an undefined value
raised by a result of a conversion 3.2.1
4.6 as a basic operation 3.3.3; 3.3,
raised by a return statement 5.8 3.5.5, 3.5.8, 3.5.10, 3.6.2, 3.7.4,
raised by incompatible 3.8.2, 7.4.2
constraints 3.3.2 between array types 4.6
raised by integer exponentiation between numeric types 3.3.3,
with a negative exponent 4.5.6 3.5.5, 4.6
raised by matching failure in an from universal_fixed type 4.5.5
array assignment 5.2.1 in a static expression 4.9
raised by naming of a variant not of a universal type expression 5.2
present in a record 4.1.3 of the bounds of a loop parameter
raised by the elaboration of a 5.5
generic instantiation 12.3.1, to a derived type 3.4
12.3.2, 12.3.4, 12.3.5 to a real type 4.5.7
raised by the initialization of an
object 3.2.1 Convertible universal operand 4.6
raised by the result of a Copy (parameter passing) 6.2
catenation 4.5.3
raised by a negative value of the COUNT (predefined attribute) for an
storage_size attribute in a length entry 9.9; A
clause 13.2
COUNT (predefined integer type) 14.2,
Context clause 10.1.1; D 14.2.5, 14.3.10; 14.2.4, 14.3, 14.3.3, 14.3.4,
[see also: use clause, with clause] 14.4
determining order of elaboration
COUNT (DEC Ada input-output type)
of compilation units 10.5
14.2a
in a compilation unit 10.1
in an instance of relative_io
including a use clause 8.4
14.2a.3
inserted by the environment 10.4
in relative_mixed_io 14.2b.8
of a subunit 10.2
CREATE (input-output procedure)
Context of overload resolution 8.7
in an instance of direct_io 14.2.1;
[see also: overloading]
14.2.5
Contiguous array D; 13.9a.1.4 in an instance of sequential_io
14.2.1; 14.2.3
Control form in text_io 14.2.1, 14.3.1; 14.3.10
[see: short circuit control form] raising an exception 14.4
CONTROLLED (predefined pragma) 4.8; in an instance of indexed_io
B 14.2.1; 14.2a.1, 14.2a.5
in an instance of relative_io
Conversion operation 4.6 14.2.1; 14.2a.1, 14.2a.3
[see also: explicit conversion, in direct_mixed_io 14.2.1; 14.2b.1,
implicit conversion, numeric type, 14.2b.6
subtype conversion, type conversion, in indexed_mixed_io 14.2.1;
unchecked conversion] 14.2b.1, 14.2b.10
Index–14
in relative_mixed_io 14.2.1; Dead code elimination
14.2b.1, 14.2b.8 [see: conditional compilation]
in sequential_mixed_io 14.2.1;
14.2b.1, 14.2b.4 Deallocation
[see: access type, unchecked_
Current column number 14.3; 14.3.1, deallocation]
14.3.4, 14.3.5, 14.3.6
Decimal literal 2.4.1; 14.3.7, 14.3.8 as a
Current element of a relative or indexed numeric literal 2.4
access file 14.2a
defined and undefined 14.2a Decimal number (in text_io) 14.3.7
locking of 14.2a Decimal point
Current index of a direct access file 14.2, [see: fixed point, floating point, point
14.2.1; 14.2.4 character]
Index–15
of an enumeration literal 3.5.1 Declared immediately within
of a formal parameter 6.1 [see: occur immediately within]
of a loop parameter 5.5
overloaded 6.6 Default determination of a
raising an exception 11.4.2; 11.4 representation for an entity 13.1
to which a representation clause Default expression
applies 13.1 [see: default initial value, default
Declarative item 3.9 initialization, discriminant
[see also: basic declarative item, later specification, formal parameter,
declarative item] generic formal object, initial value]
in a code procedure body 13.8 cannot include a forcing
in a declarative part 3.9; 6.3.2 occurrence 13.1
in a package specification 6.3.2 for a component 3.3; 7.4.3, 7.4.4
in a visible part 7.4 for a component of a derived type
that is a use clause 8.4 object 3.4
for a discriminant 3.7.1; 3.2.1,
Declarative part 3.9; D 3.7.2, 12.3.2
[see also: elaboration of . . . ] for a formal parameter 6.1, 6.4.2;
in a block statement 5.6 6.4, 6.7, 7.4.3
in a package body 7.1; 7.3 for a formal parameter of a
in a subprogram body 6.3 generic formal subprogram 12.1;
in a task body 9.1; 9.3 7.4.3
including a generic declaration for a formal parameter of a
12.2 renamed subprogram or entry 8.5
including an inline pragma 6.3.2 for a generic formal object 12.1,
including an interface pragma 12.1.1; 12.3
13.9 for the discriminants of an
including a representation clause allocated object 4.8
13.1 in a component declaration 3.7
including a suppress pragma 11.7 in a discriminant specification
including a task declaration 9.3 3.7.1
with implicit declarations 5.1 including the name of a private
type 7.4.1
Declarative region 8.1; 8.2, 8.4
[see also: scope of . . . ] Default file 14.3.2; 14.3
determining the visibility of a
declaration 8.3 Default generic formal
formed by the predefined package subprogram 12.1; 12.1.3, 12.3.6
standard 8.6 Default initial value (of a type) 3.3
in which a declaration is hidden [see also: default expression, initial
8.3 value]
including a full type definition for an access type object 3.8; 3.2.1
7.4.2 [see also: null access value]
including a subprogram for a record type object 3.7; 3.2.1
declaration 6.3
Index–16
Default initialization (for an object) Delay expression 9.6; 9.7.1
3.2.1, 3.3 [see also: duration]
[see also: default expression, default in a timed entry call 9.7.3
initial value, initial value]
Delay statement 9.6
Default mode (of a file) 14.2.1; 14.2.3, [see also: statement, task]
14.2.5, 14.3.10 as a simple statement 5.1
in an abnormal task 9.10
Default_aft (field length) of fixed_io or in a select alternative 9.7.1
float_io 14.3.8; 14.3.10 in a timed entry call 9.7.3
Default_base of integer_io 14.3.7; 14.3.10 DELETE (input-output procedure)
Default_exp (field length) of fixed_io or in an instance of direct_io 14.2.1;
float_io 14.3.8; 14.3.10 14.2.5
in an instance of sequential_io
Default_fore (field length) of fixed_io or 14.2.1; 14.2.3
float_io 14.3.8; 14.3.10 in text_io 14.2.1; 14.3.10
in an instance of indexed_io
Default_setting (letter case) of
14.2.1; 14.2a.5
enumeration_io 14.3.9; 14.3.10
in an instance of relative_io
Default_width (field length) 14.2.1; 14.2a.3
of enumeration_io 14.3.9; 14.3.10 in direct_mixed_io 14.2.1; 14.2b.6
of integer_io 14.3.7; 14.3.10 in indexed_mixed_io 14.2.1;
14.2b.10
Deferred constant 7.4.3 in relative_mixed_io 14.2.1;
of a limited type 7.4.4 14.2b.8
in sequential_mixed_io 14.2.1;
Deferred constant declaration 7.4;
14.2b.4
7.4.3
[see also: private part (of a package), DELETE_ELEMENT (DEC Ada input-
visible part (of a package)] output procedure)
as a basic declaration 3.1 in an instance of indexed_io
is not a forcing occurrence 13.1 14.2a.4, 14.2a.5
in an instance of relative_io
Definition
14.2a.2, 14.2a.3
[see: access type definition, array
in indexed_mixed_io 14.2b.9,
type definition, component subtype
14.2b.10
definition, constrained array
in relative_mixed_io 14.2b.7,
definition, derived type definition,
14.2b.8
enumeration type definition, generic
type definition, index subtype Delimiter 2.2
definition, integer type definition, real [see also: ampersand, apostrophe,
type definition, record type definition, arrow, assignment, colon, compound
type definition, unconstrained array delimiter, divide, dot, double
definition] dot, equal, exclamation mark,
exponentiation, greater than or
Delay alternative (of a selective wait)
equal, greater than, inequality, label
9.7.1
bracket, less than or equal, less than,
Index–17
minus, parenthesis, period, plus, of an access type [see: access
point, semicolon, star, vertical bar] type, collection]
of an access type designating
Delta (of a fixed point type) 3.5.9 a task type determining task
[see also: fixed point type] dependence 9.4
of universal_fixed 4.5.5 of a boolean type 3.4, 3.5.3
DELTA (predefined attribute) 3.5.10; of a limited type 7.4.4
4.1.4, A of a private type 7.4.1
subject to a representation clause
Denote an entity 3.1, 4.1; D 13.1, 13.6
[see also: declaration, entity, name]
Derived type definition 3.4; 3.3.1
Dependence between compilation [see also: elaboration of . . . ]
units 10.3; 10.5
[see also: with clause] Descriptor D; 13.9a.1.4
circularity implying illegality 10.5 Descriptor parameter passing
Dependence on a discriminant 3.7.1; 3.7 mechanism 13.9a.1.4
[see also: component subtype Designate 3.8, 9.1; D
definition, component, constraint, [see also: access type, allocator, object
discriminant constraint, discriminant, designated by . . . , task designated
index constraint, subcomponent, by . . . , task object designated
subtype definition, variant part] by . . . ]
affecting renaming 8.5
by a subcomponent that is an Designated subtype (of an access type)
actual parameter 6.2 3.8
effect on compatibility 3.7.2
effect on matching of components Designated type (of an access type) 3.8
4.5.2 Designator (of a function) 6.1
for an assignment 5.2 [see also: attribute designator,
Dependent task 9.4 operator, overloading of . . . ]
delaying exception propagation in a function declaration 4.5
11.4.1 in a subprogram body 6.3
of an abnormal task 9.10 in a subprogram specification 6.1;
6.3
Derivable subprogram 3.4 of a generic formal subprogram
prohibiting representation clauses 12.3.6; 12.1, 12.1.3
13.1 of a library unit 10.1
overloaded 6.6
Derived subprogram 3.4
as an operation 3.3.3 DEVICE_ERROR (input-output
implicitly declared 3.3.3 exception) 14.4; 14.2.3, 14.2.5, 14.3.10,
14.5, 14.2a.3, 14.2a.5, 14.2b.4, 14.2b.6,
Derived type 3.4; D 14.2b.8, 14.2b.10
[see also: parent type]
conversion to or from a parent D_FLOAT (DEC Ada predefined type)
type or related type 4.6 [see system.d_float]
Index–18
D_floating (VAX floating point type Discrete range 3.6, 3.6.1
representation) 3.5.7; 3.5.7a, 3.5.7b [see also: range, static discrete range]
values of for machine-dependent as a choice 3.7.3
attributes F as a choice in an aggregate 4.3
for a loop parameter 5.5
Digit 2.1 in a choice in a case statement
[see also: basic graphic character, 5.4
extended digit, letter or digit] in a generic formal array type
in a based literal 2.4.2 declaration 12.1.2; 12.3.4
in a decimal literal 2.4.1 in an index constraint 3.6
in an identifier 2.3 in a loop parameter specification
Digits (of a floating point type) 3.5.7 5.5
[see also: floating point type] in a slice 4.1.2
of entry indices in an entry
DIGITS (predefined attribute) 3.5.8; 4.1.4, declaration 9.5
A
Discrete type 3.5; D
Dimensionality of an array 3.6 [see also: basic operation of . . . ,
enumeration type, index, integer type,
Direct access file 14.2; 14.1, 14.2.1
iteration scheme, operation of . . . ,
Direct input-output 14.2.4; 14.2.1 scalar type]
as a generic actual parameter
Direct visibility 8.3; D 12.3.3
[see also: basic operation, character as a generic formal type 12.1.2
literal, operation, operator symbol, expression in a case statement
selected component, visibility] 5.4
due to a use clause 8.4 of a discriminant 3.7.1
of a library unit due to a with of a loop parameter 5.5
clause 10.1.1 of index values of an array 3.6
within a subunit 10.2 operation 3.5.5; 4.5.2
DIRECT_IO (predefined input-output Discriminant 3.3, 3.7.1; 3.7, D
generic package) 14.2, 14.2.4; 14, 14.1, [see also: component clause,
14.2.5, C component, composite type, default
exceptions 14.4; 14.5 expression, dependence on . . . ,
specification 14.2.5 record type, selected component,
requisite specification of FORM subcomponent]
parameter with 14.1b in a record aggregate 4.3.1
initialization in an allocator
DIRECT_MIXED_IO (DEC Ada
constrains the allocated object 4.8
predefined input-output package) 14.2b.5;
of a derived type 3.4
14.2b.6
of a formal parameter 6.2
exceptions 14.4; 14.5
of a generic actual type 12.3.2
requisite specification of FORM
of a generic formal type 12.3,
parameter with 14.1b
12.3.2
specification 14.2b.6
of an implicitly initialized object
3.2.1
Index–19
of an object designated by an of a full type declaration is not
access value 3.7.2; 5.2 elaborated 3.3.1
of a private type 7.4.2; 3.3
of a variant part must not be of a Discriminant specification 3.7.1
generic formal type 3.7.3 [see also: default expression]
simple name in a variant part as part of a basic declaration 3.1
3.7.3 declaring a component 3.7
subcomponent of an object 3.2.1 having an extended scope 8.2
with a default expression 3.7.1; in a discriminant part 3.7.1
3.2.1 visibility 8.3
maximum number in record type Discriminant_check
F [see: constraint_error, suppress]
Discriminant association 3.7.2 [see also: address (predefined
in a discriminant constraint 3.7.2 attribute), bit (DEC Ada predefined
named discriminant association attribute), size (predefined attribute)]
3.7.2 Disjunction
named discriminant association [see: logical operator]
for selective visibility 8.3
positional discriminant Divide
association 3.7.2 character 2.1
delimiter 2.2
Discriminant constraint 3.7.2; 3.3.2, D
[see also: dependence on a Division operation 4.5.5
discriminant] accuracy for a real type 4.5.7
ignored due to access_check
Division operator
suppression 11.7
[see: multiplying operator]
in an allocator 4.8
on an access type 3.8 Division_check
violated 11.1 [see: numeric_error, suppress]
Discriminant part 3.7.1; 3.7 Dot
[see also: elaboration of . . . ] [see: double dot]
absent from a record type character 2.1 [see also: double
declaration 3.7 dot, point character]
as a portion of a declarative delimiter 2.2
region 8.1 delimiter of a selected component
conforming to another 3.8.1, 6.3.1, 8.3; 4.1.3
7.4.1
in a generic formal type Double dot compound delimiter 2.2
declaration 3.7.1; 12.1
Double hyphen starting a comment 2.7
in an incomplete type declaration
3.8.1 Double star compound delimiter 2.2
in a private type declaration 7.4, [see also: exponentiation compound
7.4.1 delimiter]
in a type declaration 3.3, 3.3.1
must not include a pragma 2.8
Index–20
DURATION (predefined type) 9.6; C a fixed point type declaration
[see also: delay expression, fixed point 3.5.9
type] a floating point type declaration
of alternative delay statements 3.5.7
9.7.1 a formal part 6.1
DEC Ada values for F a full type declaration 3.3.1
a generic body 12.2
a generic declaration 12.1
a generic instantiation 12.3
an incomplete type declaration
3.8.1
an index constraint 3.6.1
Effect
an integer type definition 3.5.4
[see: elaboration has no other effect]
a library unit 10.5
ELABORATE (predefined pragma) 10.5; a loop parameter specification 5.5
B an object declaration 3.2.1
a package body 7.3
Elaborated 3.9 a package declaration 7.2
a parameter specification 6.1
Elaboration 3.9; 3.1, 3.3, 10.1, D
a private type declaration 7.4.1
[see also: exception raised
a range constraint 3.5
during . . . , order of elaboration]
a real type definition 3.5.6
optimized 10.6
a record type definition 3.7
Elaboration has no other effect 3.1 a renaming declaration 8.5
a representation clause 13.1
Elaboration of a subprogram body 6.3
an access type definition 3.8 a subprogram declaration 6.1
an array type definition 3.6 a subtype declaration 3.3.2
a body stub 10.2 a subtype indication 3.3.2
a component declaration 3.7 a task body 9.1
a component subtype definition a task declaration 9.1
3.7 a task specification 9.1
a constrained array definition 3.6 a type declaration 3.3.1, 3.8.1,
a declaration 3.1 7.4.1
a declarative item 3.9 a type definition 3.3.1
a declarative part 3.9 an unconstrained array definition
a deferred constant declaration 3.6
7.4.3 a use clause 8.4
a derived type definition 3.4
a discriminant constraint 3.7.2 Elaboration_check
a discriminant part 3.7.1 [see: program_error exception,
a discriminant specification 3.7.1 suppress]
an entry declaration 9.5
Element in a file 14, 14.1; 14.2
an enumeration literal
in a direct access file 14.2.4
specification 3.5.1
in a sequential access file 14.2.2
an enumeration type definition
DEC Ada implementation of
3.5.1
14.1a
Index–21
ELEMENT_SIZE (DEC Ada mixed-type END_OF_BUFFER (DEC Ada mixed-
input-output function) type input-output function)
in direct_mixed_io 14.2b.2, in direct_mixed_io 14.2b.2;
14.2b.6 14.2b.6
in indexed_mixed_io 14.2b.2, in indexed_mixed_io 14.2b.2;
14.2b.10 14.2b.10
in relative_mixed_io 14.2b.2, in relative_mixed_io 14.2b.2;
14.2b.8 14.2b.8
in sequential_mixed_io 14.2b.2, in sequential_mixed_io 14.2b.2;
14.2b.4 14.2b.4
ELEMENT_TYPE (generic formal type of END_OF_FILE (input-output function)
direct_io) 14.2.5; 14.1, 14.2.4 in an instance of direct_io 14.2.4;
14.2.5
ELEMENT_TYPE (generic formal type of in an instance of sequential_io
indexed_io) 14.2a.5; 14.2a.4 14.2.2; 14.2.3
ELEMENT_TYPE (generic formal type of in text_io 14.3.1, 14.3.10
relative_io) 14.2a.3; 14.2a.2 in an instance of indexed_io
14.2a.4, 14.2a.5
ELEMENT_TYPE (generic formal type of in an instance of relative_io
sequential_io) 14.2.3; 14.1, 14.2.2 14.2a.2, 14.2a.3
in direct_mixed_io 14.2b.5,
Else part
14.2b.6
of a conditional entry call 9.7.2
in indexed_mixed_io 14.2b.9,
of an if statement 5.3
14.2b.10
of a selective wait 9.7.1; 11.1
in relative_mixed_io 14.2b.7,
EMAX (predefined attribute) 3.5.8; A 14.2b.8
[see also: machine_emax] in sequential_mixed_io 14.2b.3,
DEC Ada floating point values for 14.2b.4
F
END_OF_LINE (text_io function) 14.3.4;
Emin 14.3.10
[see: machine_emin] raising an exception 14.4
Index–22
denoted by a selected component Entry index (in the name of an entry of
4.1.3 a family) 9.5
name [see: name of an entry] for an open accept alternative
name starting with a prefix 4.1 9.7.1
of a derived task type 3.4 in a conditional entry call 9.7.2
of a task designated by an object in a timed entry call 9.7.3
of a task type 9.5
renamed 8.5 Entry queue (of calls awaiting
subject to an address clause 13.5, acceptance) 9.5
13.5.1 count of calls in the queue 9.9
subject to a representation clause due to queued interrupts 13.5.1
13.1 of an abnormal task 9.10
[see also: ast_entry] Enumeration literal 3.5.1, 4.2
Entry call 9.5; 9, 9.7.1, 9.7.2, 9.7.3 [see also: overloading of . . . ,
[see also: actual parameter, predefined function]
conditional entry call, subprogram as an operation 3.3.3
call, timed entry call] as an operator 3.5.5
to an abnormal task 9.5, 9.10, as result for image attribute 3.5.5
11.5; 9.5 as the parameter for value
to communicate values 9.11 attribute 3.5.5
implicitly declared 3.3.3
Entry call statement 9.5 in a static expression 4.9
[see also: accept statement, in pragma system_name 13.7
actual parameter, statement, task of a derived type 3.4
declaration, task] overloaded 8.3
as a simple statement 5.1 renamed as a function 8.5
in an abnormal task 9.10 representation 13.3
in a conditional entry call 9.7.2; maximum number in
9.5 enumeration type declaration
in a timed entry call 9.7.3; 9.5 F
Entry declaration 9.5 Enumeration literal specification 3.5.1
[see also: elaboration of . . . ] as part of a basic declaration 3.1
as an overloaded declaration 8.3 made directly visible by a use
as part of a basic declaration 3.1 clause 8.4
cannot include a forcing
occurrence 13.1 Enumeration representation clause
having an extended scope 8.2 13.3 as a representation clause
in a task specification 9.1 13.1
including the name of a private range of possible DEC Ada
type 7.4.1 enumeration codes for 13.3
visibility 8.3 use for achieving signed
representation of enumeration
Entry family 9.5 codes 13.3
denoted by a selected component
4.1.3
name starting with a prefix 4.1
Index–23
Enumeration type 3.5.1; 3.3, 3.5, D due to dependence on parameter
[see also: discrete type, scalar type] passing mechanism 6.2
as a character type 3.5.2 due to multiple address clauses
as a generic formal type 12.1.2 for overlaid entities 13.5
as a generic parameter 12.3.3 due to suppression of an exception
boolean 3.5.3 check 11.7
operation 3.5.5 due to use of an undefined value
3.2.1
Enumeration type definition 3.5.1; due to an AST occurrence for an
3.3.1 entry of a terminated task 9.12a
[see also: elaboration of . . . ]
Error bounds of a predefined operation
ENUMERATION_IO (text_io inner of a real type 3.5.9, 4.5.7; 3.5.6, 3.5.7
generic package) 14.3.9; 14.3.10
Error detected at
Environment of a program 10.4 compilation time 1.6
environment task calling the run time 1.6
main program 10.1
Error situation 1.6, 11, 11.1; 11.6
EPSILON (predefined attribute) 3.5.8; A
DEC Ada floating point values for Error that may not be detected 1.6
F
Evaluation (of an expression) 4.5; D
Equal [see also: compile time evaluation,
character 2.1 expression]
delimiter 2.2 at compile time 4.9, 10.6
of an actual parameter 6.4.1
Equality operator 4.5; 4.5.2 of an aggregate 4.3; 3.3.3
[see also: limited type, relational of an allocator 4.8
operator] of an array aggregate 4.3.2
explicitly declared 4.5.2, 6.7; 7.4.4 of a condition 5.3, 5.5, 5.7, 9.7.1
for an access type 3.8.2 of a default expression 3.7.2
for an array type 3.6.2 of a default expression for a
for a generic formal type 12.1.2 formal parameter 6.4.2; 6.1
for a limited type 4.5.2, 7.4.4 of a discrete range 3.5; 9.5
for a real type 4.5.7 of a discrete range used in an
for a record type 3.7.4 index constraint 3.6.1
Erroneous execution 1.6 of an entry index 9.5
[see also: program_error] of an expression in an assignment
due to an access to a deallocated statement 5.2
object 13.10.1 of an expression in a constraint
due to an unchecked conversion 3.3.2
violating properties of objects of of an expression in a generic
the result type 13.10.2 actual parameter 12.3
due to assignment to a shared of an indexed component 4.1.1
variable 9.11 of an initial value [see: default
due to changing of a discriminant expression]
value 5.2, 6.2 of a literal 4.2; 3.3.3
of a logical operation 4.5.1
Index–24
of a name 4.1; 4.1.1, 4.1.2, 4.1.3, Exception declaration 11.1; 11
4.1.4 as a basic declaration 3.1
of a name in an abort statement
9.10 Exception handler 11.2; D
of a name in a renaming in an abnormal task 9.10
declaration 8.5 in a block statement 5.6
of a name of a variable 5.2, 6.4.1, in a package body 7.1; 7.3
12.3 in a subprogram body 6.3
of a primary 4.4 in a task body 9.1
of a qualified expression 4.7; 4.8 including a raise statement 11.3
of a range 3.5 including the destination of a goto
of a record aggregate 4.3.1 statement 5.9
of a short circuit control form including the name of an
4.5.1 exception 11.1
of a static expression 4.9 not allowed in a code procedure
of a type conversion 4.6 body 13.8
of a universal expression 4.10 raising an exception 11.4.1
of the bounds of a loop parameter selected to handle an exception
5.5 11.4.1; 11.6
of the conditions of a selective Exception handling 11.4; 11.4.1, 11.4.2,
wait 9.7.1 11.5
Evaluation order Exception propagation 11
[see: order of evaluation] delayed by a dependent task
Exception 11; 1.6, D 11.4.1
[see also: constraint_error, numeric_ from a declaration 11.4.2
error, predefined . . . , program_error, from a predefined operation 11.6
raise statement, raising of . . . , from a statement 11.4.1
storage_error, tasking_error, time_ to a communicating task 11.5
error] maximum number of frames for F
causing a loop to be exited 5.5
causing a transfer of control 5.1 Exception raised during execution or
due to an expression evaluated at elaboration of
compile time 10.6 an accept statement 11.5
implicitly declared in a generic an allocator of a task 9.3
instantiation 11.1 a conditional entry 9.7.2
in input-output 14.4; 14.5 a declaration 11.4.2; 11.4
renamed 8.5 a declarative part that declares
suppress pragma 11.7 tasks 9.3
exporting to a non-Ada program a generic instantiation 12.3.1,
13.9a.3, 13.9a.3.2 12.3.2, 12.3.4, 12.3.5
importing from a non-Ada a selective wait 9.7.1
program 13.9a.3, 13.9a.3.1 a statement 11.4.1; 11.4
Exception choice 11.2 a subprogram call 6.3; 6.2, 6.5
a task 11.5
a timed entry call 9.7.3
Index–25
task activation 9.3 Exponent part
in output of real values 14.3.8
Exceptions and optimization 11.6 of a based literal 2.4.1, 2.4.2
Exclamation character 2.1 of a decimal literal 2.4.1
replacing vertical bar 2.10 Exponentiating operator 4.5; 4.5.6
Exclusive disjunction [see also: highest precedence
[see: logical operator] operator]
in a factor 4.4
Execution overloaded 6.7
[see: sequence of statements,
statement, task body, task] Exponentiation compound delimiter
2.2
EXISTENCE_ERROR (DEC Ada input- [see also: double star compound
output exception) 14.4; 14.2a.2, 14.2a.3, delimiter]
14.2a.4, 14.2a.5, 14.2b.7, 14.2b.8, 14.2b.9,
14.2b.10, 14.5a Exponentiation operation 4.5.6
Index–26
in an actual parameter of a
conditional entry call 9.7.2 Factor 4.4
in an actual parameter of an in a term 4.4
entry call statement 9.5
in an actual parameter of a timed FALSE boolean enumeration literal
entry call 9.7.3 3.5.3; C
in an allocator 4.8 Family of entries
in an assignment statement 5.2 [see: entry family]
in an attribute designator 4.1.4
in a case statement 5.4 FETCH_FROM_ADDRESS (DEC Ada
in a choice in a case statement generic function)
5.4 [see: system.fetch_from_address]
in a component association 4.3
F_FLOAT (DEC Ada predefined type)
in a component declaration 3.7
[see: system.f_float]
in a constraint 3.3.2
in a conversion 4.6 F_floating (DEC Ada floating point type
in a discriminant association 3.7.2 representation) 3.5.7; 3.5.7a, 3.5.7b)
in a discriminant specification values of for machine-dependent
3.7.1 attributes F
in a generic formal part 12.1
in an indexed component 4.1.1 FIELD (predefined integer subtype)
in a length clause 13.2 14.3.5; 14.3.7, 14.3.10
in a name of a variable 5.2, 6.4.1
File (object of a file type) 14.1
in a number declaration 3.2
[see also: external file]
in an object declaration 3.2, 3.2.1
arrangement of values in 14.1a
in a parameter specification 6.1
mixed-type elements in 14.1a,
in a primary 4.4
14.2a
in a qualified expression 4.7
in a representation clause 13.1 File Definition Language (FDL) 14.1b
in a return statement 5.8
in a specification of a derived File descriptor D
subprogram 3.4 File management 14.2.1
in a type conversion 8.7 in text_io 14.3.1
including the name of a private in DEC Ada relative and indexed
type 7.4.1 packages 14.2a.1
specifying an entry in a family in DEC Ada mixed-type packages
4.1.1 14.2b.1
specifying the value of an index
4.1.1 File terminator 14.3; 14.3.1, 14.3.4,
with a boolean result 4.5.1, 4.5.2, 14.3.5, 14.3.6, 14.3.7, 14.3.8, 14.3.9
4.5.6
FILE_MODE (input-output type)
Extended_digit in a based literal 2.4.2 in an instance of direct_io 14.1,
14.2.1; 14.2.5
External file 14.1 in an instance of sequential_io
[see also: file] 14.1, 14.2.1; 14.2.3
in text_io 14.1, 14.2.1; 14.3.10
Index–27
in an instance of indexed_io 14.2; FIRST_BIT (predefined attribute) 13.7.2;
14.2a.1, 14.2.1; 14.2a.5 A
in an instance of relative_io 14.2; [see also: record representation
14.2a.1, 14.2.1; 14.2a.3 clause]
in direct_mixed_io 14.2b.1, 14.2.1;
14.2b.6 Fixed accuracy definition 3.5.9
in indexed_mixed_io 14.2b.1, Fixed point constraint 3.5.9; 3.5.6
14.2.1; 14.2b.10 on a derived subtype 3.4
in relative_mixed_io 14.2b.1,
14.2.1; 14.2b.8 Fixed point predefined type 3.5.9
in sequential_mixed_io 14.2b.1,
Fixed point type 3.5.9; D
14.2.1; 14.2b.4
[see also: basic operation of . . . ,
FILE_TYPE (input-output type) duration, numeric type, operation
in an instance of direct_io 14.1, of . . . , real type, scalar type, small,
14.2.1; 14.2, 14.2.4, 14.2.5 system.fine_delta, system.max_
in an instance of sequential_io mantissa]
14.1, 14.2.1; 14.2, 14.2.2, 14.2.3 accuracy of an operation 4.5.7
in text_io 14.1, 14.2.1; 14.2, as a generic actual type 12.3.3
14.3.3, 14.3.4, 14.3.6, 14.3.7, as a generic formal type 12.1.2
14.3.8, 14.3.9, 14.3.10 error bounds 4.5.7; 3.5.6
in an instance of indexed_io operation 3.5.10; 4.5.3, 4.5.4, 4.5.5
14.2a.1, 14.2a.4, 14.2a.5 result of an operation out of range
in an instance of relative_io of the type 4.5.7
14.2a.1, 14.2a.2, 14.2a.3 DEC Ada implementation of 3.5.9
in direct_mixed_io 14.2b.1,
14.2b.2, 14.2b.5, 14.2b.6
FIXED_IO (text_io inner generic package)
in indexed_mixed_io 14.2b.1,
14.3.8; 14.3.10
14.2b.2, 14.2b.9, 14.2b.10
in relative_mixed_io 14.2b.1, FLOAT (predefined type) 3.5.7; C
14.2b.2, 14.2b.7, 14.2b.8
in sequential_mixed_io 14.2b.1, FLOAT_IO (text_io inner generic
14.2b.2, 14.2b.3, 14.2b.4 package) 14.3.8; 14.3.10
Index–28
Floating point type 3.5.7; D Form string of a file 14.1; 14.2.1, 14.2.3,
[see also: numeric type, real type, 14.2.5, 14.3.10
scalar type, system.max_digits] DEC Ada interpretation of 14.1b
accuracy of an operation 4.5.7
as a generic actual type 12.3.3 Formal object
as a generic formal type 12.1.2 [see: generic formal object]
error bounds 4.5.7; 3.5.6 Formal parameter 6.1; D; (of an entry)
operation 3.5.8; 4.5.3, 4.5.4, 4.5.5, 9.5; 3.2, 3.2.1; (of a function) 6.5; (of an
4.5.6 operator) 6.7; (of a subprogram) 6.1, 6.2,
result of an operation out of range 6.4; 3.2, 3.2.1, 6.3
of the type 4.5.7 [see also: actual parameter, default
DEC Ada representation of 3.5.7, expression, entry, generic formal
3.5.7a, 3.5.7b parameter, mode, object, subprogram]
Font design of graphical symbols 2.1 as a constant 3.2.1
as an object 3.2
For loop as a variable 3.2.1
[see: loop statement] names and overload resolution 6.6
of a derived subprogram 3.4
Forcing occurrence (of a name leading of a generic formal subprogram
to default determination of representation) 12.1, 12.1.3
13.1 of a main program 10.1
FORE (predefined attribute) for a fixed of an operation 3.3.3
point type 3.5.10; A of a renamed entry or subprogram
8.5
Fore field of text_io input or output whose type is an array type 3.6.1
14.3.8, 14.3.10; 14.3.5 whose type is a limited type 7.4.4
whose type is a record type 3.7.2
FORM (input-output function)
whose type is a task type 9.2
in an instance of direct_io 14.2.1;
maximum number in a DEC Ada
14.2.5
subprogram or entry declaration
in an instance of sequential_io
F
14.2.1, 14.2.3
in text_io 14.2.1; 14.3.10 Formal part 6.1; 6.4
raising an exception 14.4 [see also: generic formal part,
in an instance of indexed_io parameter type profile]
14.2.1, 14.2a.5 conforming to another 6.3.1
in an instance of relative_io in an accept statement 9.5
14.2.1, 14.2a.3 in an entry declaration 9.5
in direct_mixed_io 14.2.1, 14.2b.4 in a subprogram specification 6.1
in indexed_mixed_io 14.2.1, must not include a pragma 2.8
14.2b.10
in relative_mixed_io 14.2.1, Formal subprogram
14.2b.8 [see: generic formal subprogram]
in sequential_mixed_io 14.2.1, Formal type
14.2b.4 [see: generic formal type]
Form feed format effector 2.1
Index–29
Format effector 2.1 with a parameter of a derived
[see also: carriage return, form type 3.4
feed, horizontal tabulation, line feed, with a result of a derived type 3.4
vertical tabulation]
as a separator 2.2 Function specification
in an end of line 2.2 [see: subprogram specification]
Index–30
Generic actual type as a library unit 10.1
[see: generic actual parameter] in a package specification 7.1
for a generic formal access type recompiled 10.3
12.3.5
for a generic formal array type Generic formal object 12.1, 12.1.1; 3.2,
12.3.4 12.3, 12.3.1
for a generic formal scalar type [see also: default expression, generic
12.3.3 formal parameter]
for a generic formal type with of an array type 3.6.1
discriminants 12.3.2 of a record type 3.7.2
for a generic private formal type Generic formal parameter 12.1, 12.3;
12.3.2 12, D
that is a private type 7.4.1 [see also: generic actual parameter,
Generic association 12.3 generic association, generic formal
[see also: generic actual parameter, object, generic formal subprogram,
generic formal parameter] generic formal type, matching, object]
named generic association 12.3 as a constant 3.2.1
named generic association for as a variable 3.2.1
selective visibility 8.3 of a limited type 7.4.4
positional generic association 12.3 of a task type 9.2
Generic body 12.2; 12.1, 12.1.2, 12.3.2 Generic formal part 12.1; 12, D
[see also: body stub, elaboration Generic formal subprogram 12.1,
of . . . ] 12.1.3; 12.1.2, 12.3, 12.3.6
in a package body 7.1 [see also: generic formal parameter]
including an exception handler formal function 12.1.3
11.2; 11 with the same name as another
including an exit statement 5.7 12.3
including a goto statement 5.9
including an implicit declaration Generic formal type 12.1, 12.1.2; 12.3
5.1 [see also: constraint on . . . ,
must be in the same declarative discriminant of . . . , generic formal
region as the declaration 3.9, 7.1 parameter, subtype indication . . . ]
not yet elaborated at an as index or component type of a
instantiation 3.9 generic formal array type 12.3.4
inlined for each instantiation formal access type 12.1.2, 12.3.5
12.1a formal array type 12.1.2, 12.3.4
formal array type (constrained)
Generic declaration 12.1; 12, 12.1.2, 12.1.2
12.2 formal discrete type 12.1.2
[see also: elaboration of . . . ] formal enumeration type 12.1.2
and body as a declarative region formal fixed point type 12.1.2
8.1 formal floating point type 12.1.2
and proper body in the same formal integer type 12.1.2
compilation 10.3 formal limited private type 12.3.2
as a basic declaration 3.1 formal limited type 12.1.2
as a later declarative item 3.9 formal part 12.1.2
Index–31
formal private type 12.1.2, 12.3.2 Generic parameter declaration 12.1;
formal private type with 12.1.1, 12.1.2, 12.1.3, 12.3
discriminants 12.3.2 [see also: generic formal parameter]
formal scalar type 12.1.2, 12.3.3 as a declarative region 8.1
having an extended scope 8.2
Generic function visibility 8.3
[see: generic subprogram]
Generic procedure
Generic instance 12.3; 12, 12.1, 12.2, D [see: generic subprogram]
[see also: generic instantiation, scope
of . . . ] Generic specification 12.1; 12.3.2
inlined in place of each call 6.3.2 [see also: generic package
of a generic package 12.3 specification, generic subprogram
of a generic subprogram 12.3 specification]
raising an exception 11.4.1
inlining of body for 12.1a Generic subprogram 12.1; 12 body 12.2;
sharing code generated for 12.1b 12.1 [see also: subprogram body]
instantiation 12.3; 12, 12.1 [see
Generic instantiation 12.3; 12.1, 12.1.3, also: generic instantiation]
12.2, D interface pragma is not defined
[see also: declaration, elaboration 13.9
of . . . , generic actual parameter] specification 12.1 [see also:
as a basic declaration 3.1 generic specification]
as a later declarative item 3.9
as a library unit 10.1 Generic type definition 12.1; 12.1.2,
before elaboration of the body 3.9, 12.3.3, 12.3.4
11.1 Generic unit 12, 12.1; 12.2, 12.3, D
implicitly declaring an exception [see also: generic declaration,
11.1 program unit]
invoking an operation of a generic including an exception declaration
actual type 12.1.2 11.1
of a predefined input-output including a raise statement 11.3
package 14.1 subject to a suppress pragma 11.7
recompiled 10.3 with a separately compiled body
with a formal access type 12.3.5 10.2
with a formal array type 12.3.4 [see also: inline_generic pragma,
with a formal scalar type 12.3.3 share_generic pragma]
with a formal subprogram 12.3.6
Generic unit body
Generic package 12.1; 12 [see: generic body]
for input-output 14
instantiation 12.3; 12, 12.1 [see Generic unit specification
also: generic instantiation] [see: generic specification]
specification 12.1 [see also:
GET (text_io procedure) 14.3.5; 14.3,
generic specification]
14.3.2, 14.3.4, 14.3.10
Generic package body 12.2; 12.1 for character and string types
[see also: package body] 14.3.6
for enumeration types 14.3.9
Index–32
for integer types 14.3.7 Goto statement 5.9
for real types 14.3.8 [see also: statement]
raising an exception 14.4 as a simple statement 5.1
causing a loop to be exited 5.5
GET_ARRAY (DEC Ada mixed-type causing a transfer of control 5.1
input-output procedure) completing block statement
in direct_mixed_io 14.2b.2, execution 9.4
14.2b.6
in indexed_mixed_io 14.2b.2, Graphic character 2.1
14.2b.10 [see also: basic graphic character,
in relative_mixed_io 14.2b.2, character, lower case letter, other
14.2b.8 special character]
in sequential_mixed_io 14.2b.2, in a character literal 2.5
14.2b.4 in a string literal 2.6
GET_ITEM (DEC Ada mixed-type input- Graphical symbol 2.1
output procedure) [see also: ascii]
in direct_mixed_io 14.2b.2, not available 2.10
14.2b.6
in indexed_mixed_io 14.2b.2, Greater than
14.2b.10 character 2.1
in relative_mixed_io 14.2b.2, delimiter 2.2
14.2b.8 operator [see: relational operator]
in sequential_mixed_io 14.2b.2, Greater than or equal
14.2b.4 compound delimiter 2.2
GET_LINE (text_io procedure) 14.3.6; operator [see: relational operator]
14.3.10
G_FLOAT (DEC Ada predefined type) Guard area for tasks 13.2a
[see: system.g_float]
G_floating (DEC Ada real type
representation) 3.5.7; 3.5.7a, 3.5.7b)
values of for machine-dependent
attributes F
Handler
Global declaration 8.1 [see: exception handler, exception
of a variable shared by tasks 9.11 handling]
H_FLOAT (DEC Ada predefined type)
Global symbol D; 13.9a.1.1, 13.9a.1.4, [see: system.h_float]
13.9a.2.1, 13.9a.2.2, 13.9a.2.3, 13.9a.3.1,
H_floating (DEC Ada floating point type
13.9a.3.2
representation) 3.5.7; 3.5.7a, 3.5.7b)
obtaining value of 13.7a.6
values of for machine-dependent
attributes F
Index–33
Hiding (of a declaration) 8.3 Identifier 2.3; 2.2
[see also: visibility] [see also: direct visibility, loop
and renaming 8.5 parameter, name, overloading of . . . ,
and use clauses 8.4 scope of . . . , simple name, visibility]
due to an implicit declaration 5.1 and an adjacent separator 2.2
of a generic unit 12.1 as an attribute designator 4.1.4
of a library unit 10.1 as a designator 6.1
of a subprogram 6.6 as a reserved word 2.9
of or by a derived subprogram 3.4 as a simple name 4.1
of the package standard 10.1 can be written in the basic
within a subunit 10.2 character set 2.10
denoting an object 3.2.1
Highest precedence operator 4.5 denoting a value 3.2.2
[see also: abs, arithmetic operator, in a deferred constant declaration
exponentiating operator, not unary 7.4.3
operator, overloading of an operator, in an entry declaration 9.5
predefined operator] in an exception declaration 11.1
as an operation of a discrete type in a generic instantiation 12.3
3.5.5 in an incomplete type declaration
as an operation of a fixed point 3.8.1
type 3.5.10 in a number declaration 3.2.2
as an operation of a floating point in an object declaration 3.2
type 3.5.8 in a package specification 7.1
overloaded 6.7 in a private type declaration 7.4;
Homograph (declaration) 8.3 7.4.1
[see also: overloading] in a renaming declaration 8.5
and use clauses 8.4 in a subprogram specification 6.1
in a task specification 9.1
Horizontal tabulation in a type declaration 3.3.1; 7.4.1
as a separator 2.2 in its own declaration 8.3
character in a comment 2.7 in pragma system_name 13.7
format effector 2.1 of an argument of a pragma 2.8
in text_io input 14.3.5 of an enumeration value 3.5.1
of a formal parameter of a generic
Hyphen character 2.1
formal subprogram 12.1.3
[see also: minus character]
of a generic formal object 12.1,
starting a comment 2.7
12.1.1
of a generic formal subprogram
12.1; 12.1.3
of a generic formal type 12.1;
12.1.2
of a generic unit 12.1
IDENT (DEC Ada predefined pragma) B of a library unit 10.1
of a pragma 2.8
of a subprogram 6.1
of a subtype 3.3.2
of a subunit 10.2
Index–34
of homograph declarations 8.3 Implementation defined
overloaded 6.6 [see: system dependent]
versus simple name 3.1
maximum DEC Ada length F Implementation defined pragma F
Index–35
IMPORT_EXCEPTION (DEC Ada Incomplete type declaration 3.8.1;
predefined pragma) 13.9a.3.1; 13.9a, 3.3.1, 7.4.1
13.9a.3, B as a portion of a declarative
region 8.1
IMPORT_FUNCTION (DEC Ada
predefined pragma) 13.9a.1.1; 13.9a, Incorrect order dependence 1.6
13.9a.1, B [see also: program error]
assignment statement 5.2
IMPORT_LARGEST_INTEGER (DEC bounds of a range constraint 3.5
Ada predefined function) component association of an array
[see:system.import_largest_integer] aggregate 4.3.2
IMPORT_OBJECT (DEC Ada predefined component association of a record
pragma) 13.9a.2.1; 13.9a, 13.9a.2, aggregate 4.3.1
13.9a.2.3, B component subtype indication 3.6
default expression for a
IMPORT_PROCEDURE (DEC Ada component 3.2.1
predefined pragma) 13.9a.1.1; 13.9a, default expression for a
13.9a.1, B discriminant 3.2.1
expression 4.5
IMPORT_VALUE (DEC Ada predefined
index constraint 3.6
function)
library unit 10.5
[see: system.import_value]
parameter association 6.4
IMPORT_VALUED_PROCEDURE prefix and discrete range of a slice
(DEC Ada predefined pragma) 13.9a.1.1; 4.1.2
13.9a, 13.9a.1, B
Index 3.6; D
In membership test [see also: array, discrete type, entry
[see: membership test] index]
Index–36
on an access type 3.8 INDEXED_MIXED_IO (DEC Ada
violated 11.1 predefined input-output package) 14.2b.9;
14.2b.10]
Index of an element in a direct access file exceptions 14.4; 14.5, 14.5a
14.2; 14.2.4 requisite specification of FORM
Index in a relative access file 14.2a parameter with 14.1b
specification 14.2b.10
Index range 3.6
matching 4.5.2 Indication
[see: subtype indication]
Index subtype 3.6
Indivisible access of a shared variable
Index subtype definition 3.6 9.11
Index type Inequality compound delimiter 2.2
of a choice in an array aggregate
4.3.2 Inequality operator 4.5; 4.5.2
of a generic formal array type [see also: limited type, relational
12.3.4 operator]
cannot be explicitly declared 6.7
Index_check for an access type 3.8.2
[see: constraint_error, suppress] for an array type 3.6.2
[see also: address (DEC Ada for a generic formal type 12.1.2
predefined attribute), size (DEC for a real type 4.5.7
Ada predefined attribute), bit (DEC for a record type 3.7.4
Ada predefined attribute)] not available for a limited type
7.4.4
Indexed access file 14.2a
Initial value (of an object) 3.2.1
Indexed component 4.1.1; 3.6, D
[see also: allocator, composite type,
as a basic operation 3.3.3; 3.3,
default expression, default initial
3.6.2, 3.8.2
value, default initialization]
as a name 4.1
in an allocator 4.8; 3.8, 7.4.4
as the name of an entry 9.5
of an array object 3.6.1
of a value of a generic formal
of a constant 3.2.1
array type 12.1.2
of a constant in a static
INDEXED_IO (DEC Ada predefined expression 4.9
input-output package) 14.2a.4; 14.2a, of a discriminant of a formal
14.2a.5 parameter 6.2
exceptions 14.4; 14.5, 14.5a of a discriminant of an object
element locking in 14.2a 3.7.2
requisite specification of FORM of a limited private type object
parameter with 14.1b, 14.2a.1 7.4.4
specification 14.2a.5 of an object declared in a package
7.1
of an out mode formal parameter
6.2
of a record object 3.7.2
Index–37
Initialization INTEGER (predefined type) 3.5.4; C
[see: assignment, default expression, as base type of a loop parameter
default initialization, initial value] 5.5
as default type for the bounds of
INLINE (predefined pragma) 6.3.2; B a discrete range 3.6.1; 9.5
creating recompilation
dependence 10.3 Integer literal 2.4
[see also: based integer literal,
INLINE_GENERIC (DEC Ada predefined universal_integer type]
pragma) 12.1a; B as a bound of a discrete range 9.5
creating recompilation as a universal_integer literal
dependence 10.3 3.5.4
INOUT_FILE (input-output file_mode in based notation 2.4.2
enumeration literal) 14.1 in decimal notation 2.4.1
Index–38
Integer type definition 3.5.4; 3.3.1 in sequential_mixed_io 14.2.1,
[see also: elaboration of . . . ] 14.2b.4
Index–39
LARGE (predefined attribute) 3.5.8, Length of the result
3.5.10; A of an array comparison 4.5.1
DEC Ada floating point values for of an array logical negation 4.5.6
F of a catenation 4.5.3
LAST (predefined attribute) A Length_check
[see also: bound] [see: constraint_error, suppress]
for an access value 3.8.2
for an array type 3.6.2 Less than
for a scalar type 3.5 character 2.1
DEC Ada floating point values for delimiter 2.2
F operator [see: relational operator]
Index–40
followed by an inline pragma Line terminator 14.3; 14.3.4, 14.3.5,
6.3.2 14.3.6, 14.3.7, 14.3.8, 14.3.9
included in the predefined
package standard 8.6 LINE_LENGTH (text_io function) 14.3.3,
must not be subject to an address 14.3.4; 14.3.3, 14.3.10
clause 13.5 raising an exception 14.4
named in a use clause 10.5 Linker D
named in a with clause 10.1.1;
10.3, 10.5 List
recompiled 10.3 [see: component list, identifier_list]
scope 8.2
LIST (predefined pragma) B
subject to an interface pragma
13.9 Listing of program text
that is a package 7.1 [see: list pragma, page pragma]
visibility due to a with clause 8.3
whose name is needed in a Literal 4.2; D
compilation unit 10.1.1 [see also: based literal, character
with a body stub 10.2 literal, decimal literal, enumeration
maximum number in DEC Ada F literal, integer literal, null literal,
numeric literal, overloading of . . . ,
Limited private type 7.4.4 real literal, string literal]
[see also: private type] as a basic operation 3.3.3
as a generic actual type 12.3.2 of a derived type 3.4
as a generic formal type 12.1.2 of universal_integer type 3.5.4
of universal_real type 3.5.6
Limited type 7.4.4; 9.2, 12.3.1, D
specification [see: enumeration
[see also: assignment, equality
literal specification]
operator, inequality operator,
predefined operator, task type] Local declaration 8.1
as a full type 7.4.1 in a generic unit 12.3
component of a record 3.7
generic formal object 12.1.1 LOCK_ERROR (DEC Ada input-output
in an object declaration 3.2.1 exception) 14.4; 14.2a.2, 14.2a.3, 14.2a.4,
limited record type 3.7.4 14.2a.5, 14.2b.7, 14.2b.8, 14.2b.9, 14.2b.10,
operation 7.4.4; 4.5.2 14.5a
parameters for explicitly declared
Logical negation operation 4.5.6
equality operators 6.7
Logical operation 4.5.1
Line 14.3, 14.3.4
Logical operator 4.5; 4.4, 4.5.1, C
LINE (text_io function) 14.3.4; 14.3.10
[see also: overloading of an operator,
raising an exception 14.4
predefined operator]
Line feed format effector 2.1 as an operation of boolean type
3.5.5
Line length 14.3, 14.3.3; 14.3.1, 14.3.4, for an array type 3.6.2
14.3.5, 14.3.6 in an expression 4.4
overloaded 6.7
Index–41
Logical processor 9
Machine code insertion 13.8
LONG_FLOAT (predefined type) 3.5.7; C
Machine dependent attribute 13.7.3
LONG_FLOAT (DEC Ada predefined
pragma) 3.5.7b; B Machine representation
[see: representation]
LONG_LONG_FLOAT (DEC Ada
predefined type) 3.5.7; C MACHINE_CODE (predefined package)
13.8; C
LONG_INTEGER (predefined type) 3.5.4;
C MACHINE_EMAX (predefined attribute)
13.7.3; 3.5.8, A
Loop name 5.5 DEC Ada floating point values for
declaration 5.1 F
implicitly declared 3.1
in an exit statement 5.7 MACHINE_EMIN (predefined attribute)
13.7.3; 3.5.8, A
Loop parameter 5.5 DEC Ada floating point values for
[see also: constant, object] F
as an object 3.2
MACHINE_MANTISSA (predefined
Loop parameter specification 5.5 attribute) 13.7.3; 3.5.8, A
[see also: elaboration of . . . ] DEC Ada floating point values for
as an overload resolution context F
8.7
as a declaration 3.1 MACHINE_OVERFLOWS (predefined
attribute) 13.7.3; 3.5.8, 3.5.10, A
Loop statement 5.5 DEC Ada floating point values for
[see also: statement] F
as a compound statement 5.1
as a declarative region 8.1 MACHINE_RADIX (predefined attribute)
denoted by an expanded name 13.7.3; 3.5.8, A
4.1.3 DEC Ada floating point values for
including an exit statement 5.7 F
LOW_LEVEL_IO (predefined input- MACHINE_ROUNDS (predefined
output package) 14.6; 14, C attribute) 13.7.3; 3.5.8, 3.5.10, A
DEC Ada floating point values for
Lower bound F
[see: bound, first attribute]
MACHINE_SIZE (DEC Ada predefined
Lower case letter 2.1 attribute) 13.7.2; A
[see also: graphic character]
a to f in a based literal 2.4.2 Main program 10.1
e in a decimal literal 2.4.1 execution requiring elaboration of
in an identifier 2.3 library units 10.5
included in the predefined
package standard 8.6
including a priority pragma 9.8
raising an exception 11.4.1, 11.4.2
Index–42
termination 9.4 in relative_mixed_io 14.2b.2,
DEC Ada definition of 10.1, F 14.2b.8
stack and stack storage for 13.2b in sequential_mixed_io 14.2b.2,
14.2b.4
MAIN_STORAGE (DEC Ada predefined
pragma) 13.2b; B MAX_INT
[see: system.max_int]
MANTISSA (predefined attribute) 3.5.8,
3.5.10; A MAX_MANTISSA
DEC Ada floating point values of [see: system.max_mantissa]
F
Maximum line length 14.3
Mantissa
of a fixed point number 3.5.9 Maximum page length 14.3
of a floating point number 3.5.7; Membership test 4.4, 4.5.2
13.7.3 cannot be overloaded 6.7
Mark Membership test operation 4.5
[see: type_mark] [see also: overloading of . . . ]
Master (task) 9.4 as a basic operation 3.3.3; 3.3,
3.5.5, 3.5.8, 3.5.10, 3.6.2, 3.7.4,
Matching components 3.8.2, 7.4.2
of arrays 4.5.2; 4.5.1, 5.2.1 for a real type 4.5.7
of records 4.5.2
MEMORY_SIZE (predefined named
Matching generic formal number)
and actual parameters 12.3 [see: system.memory_size]
access type 12.3.5
array type 12.3.4 MEMORY_SIZE (predefined pragma)
default subprogram 12.3.6; 12.1.3 13.7; B
object 12.3.1; 12.1.1 MFPR (DEC Ada predefined function)
private type 12.3.2 [see: system.mfpr]
scalar type 12.3.3
subprogram 12.3.6; 12.1.3 MIN_INT
type 12.3.2, 12.3.3, 12.3.4, 12.3.5; [see: system.min_int]
12.1.2
Minimization of storage
Mathematically correct result of a [see: pack predefined pragma]
numeric operation 4.5; 4.5.7
Minus
MAX_DIGITS character [see: hyphen character]
[see: system.max_digits] character in an exponent of a
numeric literal 2.4.1
MAX_ELEMENT_SIZE (DEC Ada delimiter 2.2
mixed-type input-output function) operator [see: binary adding
in direct_mixed_io 14.2b.2, operator, unary adding operator]
14.2b.6 unary operation 4.5.4
in indexed_mixed_io 14.2b.2,
14.2b.10 Mod operator 4.5.5
[see also: multiplying operator]
Index–43
MODE (input-output function) Mode in out for a formal parameter 6.1,
in an instance of direct_io 14.2.1; 6.2; 3.2.1
14.2.5 of a function is not allowed 6.5
in an instance of sequential_io of an interrupt entry is not
14.2.1; 14.2.3 allowed 13.5.1
in text_io 14.2.1; 14.3.3, 14.3.4,
14.3.10 Mode in out for a generic formal object
in an instance of indexed_io 12.1.1; 3.2.1, 12.3, 12.3.1
14.2.1, 14.2a.5 Mode out for a formal parameter 6.1, 6.2
in an instance of relative_io of a function is not allowed 6.5
14.2.1, 14.2a.3 of an interrupt entry is not
in direct_mixed_io 14.2.1, 14.2b.6 allowed 13.5.1
in indexed_mixed_io 14.2.1,
14.2b.10 MODE_ERROR (input-output exception)
in relative_mixed_io 14.2.1, 14.4; 14.2.2, 14.2.3, 14.2.4, 14.2.5, 14.3.1,
14.2b.8 14.3.2, 14.3.3, 14.3.4, 14.3.5, 14.3.10, 14.5,
in sequential_mixed_io 14.2.1, 14.2a.2, 14.2a.3, 14.2a.4, 14.2a.5, 14.2b.2,
14.2b.4 14.2b.3, 14.2b.4, 14.2b.5, 14.2b.6, 14.2b.7,
14.2b.8, 14.2b.9, 14.2b.10
Mode (of a file) 14.1; 14.2.1
of a direct access file 14.2; 14.2.5 Model interval of a subtype 4.5.7
of a sequential access file 14.2;
Model number (of a real type) 3.5.6; D
14.2.3
[see also: real type, safe number]
of a text_io file 14.3.1; 14.3.4
accuracy of a real operation 4.5.7
of an indexed access file 14.2a
of a fixed point type 3.5.9; 3.5.10
of a relative access file 14.2a
of a floating point type 3.5.7; 3.5.8
Mode (of a formal parameter) 6.2; 6.1, D
Modulus operation 4.5.5
[see also: formal parameter, generic
formal parameter] MONTH (predefined function) 9.6
of a formal parameter of a derived
subprogram 3.4 MTPR (DEC Ada predefined procedure)
of a formal parameter of a [see: system.mtpr]
renamed entry or subprogram
Multidimensional array 3.6
8.5
of a generic formal object 12.1.1 Multiple
component declaration 3.7; 3.2
Mode in for a formal parameter 6.1, 6.2;
deferred constant declaration 7.4;
3.2.1
3.2
of a function 6.5
discriminant specification 3.7.1;
of an interrupt entry 13.5.1
3.2
Mode in for a generic formal object generic parameter declaration
12.1.1; 3.2.1, 12.3, 12.3.1 12.1; 3.2
number declaration 3.2.2; 3.2
object declaration 3.2
parameter specification 6.1; 3.2
Index–44
Multiplication operation 4.5.5 as the argument of a pragma 2.8
accuracy for a real type 4.5.7 as the expression in a case
statement 5.4
Multiplying operator 4.5; 4.5.5, C conflicts 8.5
[see also: arithmetic operator, declared by renaming is not
overloading of an operator] allowed as prefix of certain
in a term 4.4 expanded names 4.1.3
overloaded 6.7 declared in a generic unit 12.3
Must (legality requirement) 1.6 denoting an entity 4.1
denoting an object designated by
Mutually recursive types 3.8.1; 3.3.1 an access value 4.1
generated by an implementation
13.4
starting with a prefix 4.1; 4.1.1,
4.1.2, 4.1.3, 4.1.4
Name string (of a file) 14.1; 14.2.1,
NAME (input-output function) 14.2.3, 14.2.5, 14.3, 14.3.10, 14.4
in an instance of direct_io 14.2.1
in an instance of sequential_io NAME_ERROR (input-output exception)
14.2.1 14.4; 14.2.1, 14.2.3, 14.2.5, 14.3.10, 14.5,
in text_io 14.2.1 14.2a.3, 14.2a.5, 14.2b.6, 14.2b.8, 14.2b.10
in an instance of indexed_io
Named association 6.4.2, D
14.2.1, 14.2a.5
[see also: component association,
in an instance of relative_io
discriminant association, generic
14.2.1, 14.2a.3
association, parameter association]
in direct_mixed_io 14.2.1, 14.2b.8
in indexed_mixed_io 14.2.1, Named block statement
14.2b.10 [see: block name]
in relative_mixed_io 14.2.1,
14.2b.6 Named loop statement
in sequential_mixed_io 14.2.1, [see: loop name]
14.2b.4 Named number 3.2; 3.2.2
NAME (predefined type) as an entity 3.1
[see: system.name] as a primary 4.4
in a static expression 4.9
Name (of an entity) 4.1; 2.3, 3.1, D
[see also: attribute, block name, NATURAL (predefined integer subtype) C
denote, designator, evaluation of . . . , Negation
forcing occurrence, function call, [see: logical negation operation]
identifier, indexed component, label,
loop name, loop parameter, operator Negation operation (numeric) 4.5.4
symbol, renaming declaration,
selected component, simple name, Negative exponent
slice, type_mark, visibility] in a numeric literal 2.4.1
as a prefix 4.1 to an exponentiation operator
as a primary 4.4 4.5.6
Index–45
NEW_LINE (text_io procedure) 14.3.4; Null array 3.6.1; 3.6
14.3.5, 14.3.6, 14.3.10 aggregate 4.3.2
raising an exception 14.4 and relational operation 4.5.2
as an operand of a catenation
NEW_PAGE (text_io procedure) 14.3.4; 4.5.3
14.3.10
raising an exception 14.4 Null component list 3.7
Next element in an indexed access file Null literal 3.8, 4.2
14.2a [see also: overloading of . . . ]
as a basic operation 3.3.3; 3.8.2
No other effect as a primary 4.4
[see: elaboration has no other effect] must not be the argument of a
NO_ADDR (DEC Ada predefined conversion 4.6
constant) Null range 3.5
[see:system.no_addr] as a choice of a variant part 3.7.3
NO_AST_HANDLER (DEC Ada for a loop parameter 5.5
predefined constant) 9.12a; F Null record 3.7
[see: system.no_ast_handler] and relational operation 4.5.2
NON_ADA_ERROR (DEC Ada Null slice 4.1.2
predefined exception) [see also: array type]
[see: system.non_ada_error]
Null statement 5.1
Noncontiguous array D; 13.9a.1.2 [see also: statement]
Not equal as a simple statement 5.1
compound delimiter [see: Null string literal 2.6
inequality compound delimiter]
operator [see: relational operator] NULL_ADDRESS (DEC Ada predefined
constant)
Not in membership test [see:system.null_address]
[see: membership test]
NULL_PARAMETER (DEC Ada
Not unary operator predefined attribute) 13.9a.1.2; A
[see: highest precedence operator]
as an operation of an array type Number
3.6.2 [see: based literal, decimal literal]
as an operation of boolean type
3.5.5 Number declaration 3.2, 3.2.2
in a factor 4.4 as a basic declaration 3.1
Index–46
as the parameter of value
attribute 3.5.5 Object 3.2; 3.2.1, D
as the result of image attribute [see also: address attribute, allocator,
3.5.5 collection, component, constant,
assigned 5.2 formal parameter, generic formal
can be written in the basic parameter, initial value, loop
character set 2.10 parameter, size attribute, storage bits
in a conforming construct 6.3.1 allocated, subcomponent, variable]
in a static expression 4.9 as an actual parameter 6.2
in pragma memory_size 13.7 as a generic formal parameter
in pragma storage_unit 13.7 12.1.1
created by an allocator 4.8
Numeric operation of a universal type created by elaboration of an object
4.10 declaration 3.2.1
Numeric type 3.5 of an access type [see: access type
[see also: conversion, fixed point type, object]
floating point type, integer type, real of a file type [see: file]
type, scalar type] of a task type [see: task object]
operation 4.5, 4.5.2, 4.5.3, 4.5.4, renamed 8.5
4.5.5, 4.5.6 subject to an address clause 13.5
subject to a representation clause
Numeric type expression 13.1
in a length clause 13.2 subject to a suppress pragma 11.7
Numeric value of a named number 3.2
exporting to non-Ada programs
NUMERIC_ERROR (predefined 13.9a.2, 13.9a.2.2, 13.9a.2.3
exception) 11.1 importing from non-Ada programs
[see also: suppress pragma] 13.9a.2, 13.9a.2.1, 13.9a.2.3
not raised due to lost overflow maximum number of bits in DEC
conditions 13.7.3 Ada F
not raised due to optimization maximum number declared with
11.6 PSECT_OBJECT pragma F
raised by a numeric operator 4.5
Object declaration 3.2, 3.2.1
raised by a predefined integer
[see also: elaboration of . . . , generic
operation 3.5.4
parameter declaration]
raised by a real result out of
as a basic declaration 3.1
range of the safe numbers 4.5.7
as a full declaration 7.4.3
raised by a universal expression
implied by a task declaration 9.1
4.10
in a package specification 7.1
raised by integer division
of an array object 3.6.1
remainder or modulus 4.5.5
of a record object 3.7.2
raised due to a conversion out of
with a limited type 7.4.4
range 3.5.4, 3.5.6
with a task type 9.2; 9.3
Index–47
Object designated by an access value Open alternative 9.7.1
3.2, 3.8, 4.8; 4.1.3, 5.2, 9.2, 11.1) [see also: alternative]
[see also: task object designated . . . ] accepting a conditional entry call
by an access value denoted by a 9.7.2
name 4.1 accepting a timed entry call 9.7.3
by an access-to-array type 3.6.1
by an access-to-record type 3.7.2 Open file 14.1
by a generic formal access type Operation 3.3, 3.3.3; D
value 12.3.5 [see also: basic operation, direct
Object file D visibility, operator, predefined
operation, visibility by selection,
Object module visibility]
for a subprogram written in classification 3.3.3
another language 13.9 of an access type 3.8.2
OpenVMS D of an array type 3.6.2
of a discrete type 3.5.5
Obsolete compilation unit (due to of a fixed point type 3.5.10
recompilation) 10.3 of a floating point type 3.5.8
Occur immediately within (a of a generic actual type 12.1.2
declarative region) 8.1; 8.3, 8.4, 10.2 of a generic formal type 12.1.2;
12.3
Omitted parameter association for a of a limited type 7.4.4
subprogram call 6.4.2 of a private type 7.4.2; 7.4.1
of a record type 3.7.4
OPEN (input-output procedure)
of a subtype 3.3
in an instance of direct_io 14.2.1;
of a subtype of a discrete type
14.1, 14.2.5
3.5.5
in an instance of sequential_io
of a type 3.3
14.2.1; 14.1, 14.2.3
of a universal type 4.10
in text_io 14.2.1; 14.1, 14.3.1,
propagating an exception 11.6
14.3.10
subject to a suppress pragma 11.7
raising an exception 14.4
in an instance of indexed_io Operator 4.5; 4.4, C, D
14.2.1, 14.2a.5 [see also: binary adding operator,
in an instance of relative_io designator, exponentiating operator,
14.2.1, 14.2a.3 function, highest precedence operator,
in direct_mixed_io 14.2.1, 14.2b.6 logical operator, multiplying operator,
in indexed_mixed_io 14.2.1, overloading of . . . , predefined
14.2b.10 operator, relational operator, unary
in relative_mixed_io 14.2.1, adding operator]
14.2b.8 as an operation 3.3.3 [see also:
in sequential_mixed_io 14.2.1, operation]
14.2b.4 implicitly declared 3.3.3
in an expression 4.4
in a static expression 4.9
of a derived type 3.4
of a generic actual type 12.1.2
Index–48
overloaded 6.7; 6.6 Order not defined by the language
renamed 8.5 [see: incorrect order dependence]
Operator declaration 6.1; 4.5, 6.7 Order of application of operators in an
expression 4.5
Operator symbol 6.1
[see also: direct visibility, overloading Order of compilation (of compilation
of . . . , scope of . . . , visibility by units) 10.1, 10.3; 10.1.1, 10.4
selection, visibility] creating recompilation
as a designator 6.1 dependence 10.3
as a designator in a function
declaration 4.5 Order of copying back of out and in out
as a name 4.1 formal parameters 6.4
before arrow compound delimiter Order of elaboration 3.9
8.3 [see also: incorrect order dependence];
declared 3.1 (of compilation units) 10.5; 10.1.1
declared in a generic unit 12.3
in a renaming declaration 8.5 Order of evaluation 1.6
in a selector 4.1.3 [see also: incorrect order dependence]
in a static expression 4.9 and exceptions 11.6
not allowed as the designator of a of conditions in an if statement
library unit 10.1 5.3
of a generic formal function of default expressions for
12.1.3, 12.3 components 3.2.1
of homograph declarations 8.3 of expressions and the name in
overloaded 6.7; 6.6 an assignment statement 5.2
of operands in an expression 4.5
Optimization 10.6 of parameter associations in a
[see also: optimize pragma] subroutine call 6.4
and exceptions 11.6 of the bounds of a range 3.5
OPTIMIZE (predefined pragma) B of the conditions in a selective
wait 9.7.1
Optional parameter
in imported subprogram 13.9a.1.2 Order of execution of statements 5.1
[see also: incorrect order dependence]
Index–49
Other special character 2.1 Overloading of
[see also: graphic character] an aggregate 3.4
an allocator 4.8
Others 3.7.3 a declaration 8.3
as a choice in an array aggregate a designator 6.6; 6.7
4.3.2 an entry 9.5
as a choice in a case statement an enumeration literal 3.5.1; 3.4
alternative 5.4 a generic formal subprogram 12.3
as a choice in a component a generic unit 12.1
association 4.3 an identifier 6.6
as a choice in a record aggregate a library unit by a locally
4.3.1 declared subprogram 10.1
as a choice in a variant part 3.7.3 a library unit by means of
as an exception choice 11.2 renaming 10.1
as a choice for handling a literal 3.4
OpenVMS conditions signaled a membership test 4.5.2
from non-Ada code 11.2 an operator 4.5, 6.7; 4.4, 6.1
Out mode an operator symbol 6.6; 6.7
[see: mode out] a subprogram 6.6; 6.7
a subprogram subject to an
OUT_FILE (input-output file mode interface pragma 13.9
enumeration literal) 14.1 the expression in a case
statement 5.4
Overflow of real operations 4.5.7; 13.7.3
Overflow_check
[see: numeric_error, suppress]
Overlapping scopes
[see: hiding, overloading]
PACK (predefined pragma) 13.1; B
Overlapping slices in array assignment
5.2.1 Packable D
Index–50
Package body 7.1, 7.3; D PAGE (text_io function) 14.3.4; 14.3.10
[see also: body stub] raising an exception 14.4
as a generic body 12.2
as a proper body 3.9 Page length 14.3, 14.3.3; 14.3.1, 14.3.4,
as a secondary unit 10.1 14.4
as a secondary unit compiled Page terminator 14.3; 14.3.3, 14.3.4,
after the corresponding library 14.3.5
unit 10.3
in another package body 7.1 PAGE_LENGTH (text_io function) 14.3.3;
including an exception handler 14.3.10
11.2; 11 raising an exception 14.4
including an exit statement 5.7
Paragraphing recommended for the
including a goto statement 5.9
layout of programs 1.5
including an implicit declaration
5.1 Parallel execution
must be in the same declarative [see: task]
region as the declaration 3.9
raising an exception 11.4.1, 11.4.2 Parameter D
recompiled 10.3 [see also: actual parameter, default
subject to a suppress pragma 11.7 expression, entry, formal parameter,
formal part, function, generic actual
Package declaration 7.1, 7.2; D parameter, generic formal parameter,
and body as a declarative region loop parameter, mode, procedure,
8.1 subprogram]
as a basic declaration 3.1 of a main program 10.1
as a later declarative item 3.9
as a library unit 10.1 Parameter and result type profile 6.6
determining the visibility of
Parameter association 6.4, 6.4.1
another declaration 8.3
for a derived subprogram 3.4
elaboration raising an exception
named parameter association 6.4
11.4.2
named parameter association for
in a package specification 7.1
selective visibility 8.3
recompiled 10.3
omitted for a subprogram call
Package identifier 7.1 6.4.2
positional parameter association
Package specification 7.1, 7.2 6.4
in a generic declaration 12.1
including an inline pragma 6.3.2 Parameter declaration
including an interface pragma [see: generic parameter declaration,
13.9 parameter specification]
including a representation clause
Parameter part
13.1
[see: actual parameter part]
including a suppress pragma 11.7
Parameter passing
Page 14.3, 14.3.4
overriding default mechanisms
PAGE (predefined pragma) B 13.9a.1.4
Index–51
Parameter specification 6.1 Period character 2.1
[see also: loop parameter [see also: dot character, point
specification] character]
as part of a basic declaration 3.1
having an extended scope 8.2 Physical processor 9; 9.8
in a formal part 6.1 Plus
visibility 8.3 character 2.1
Parameter type profile 6.6 delimiter 2.2
operator [see: binary adding
Parent subprogram (of a derived operator, unary adding operator]
subprogram) 3.4 unary operation 4.5.4
Parent subtype (of a derived subtype) Point character 2.1
3.4 [see also: dot]
in a based literal 2.4.2
Parent type (of a derived type) 3.4; D in a decimal literal 2.4.1
[see also: derived type] in a numeric literal 2.4
declared in a visible part 3.4
of a generic actual type 12.1.2 Point delimiter 2.2
of a numeric type is predefined
and anonymous 3.5.4, 3.5.7, 3.5.9 Pointer
[see: access type]
Parent unit (of a body stub) 10.2
compiled before its subunits 10.3 Portability 1.1
of programs using real types
Parenthesis 13.7.3; 3.5.6
character 2.1
delimiter 2.2 POS (predefined attribute) 3.5.5; 13.3, A
Index–52
of an integer value 3.5.4 Precision (numeric)
of a value of a discrete type 3.5 [see: delta, digits]
returned by pos attribute 3.5.5
PRED (predefined attribute) 3.5.5; 13.3, A
Position of a component within a record
[see: record representation clause] Predecessor
[see: pred attribute]
Position of an element in a direct access
file 14.2 Predefined attribute
[see: address, base, callable,
Positional association 6.4; 6.4.2, D constrained, count, first, first_bit,
[see also: component association, image, last, last_bit, pos, pred,
discriminant association, generic range, size, small, storage_size,
association, parameter association] succ, terminated, val, value, width]
[see: ast_entry, bit, machine_size,
POSITIVE (predefined integer subtype) null_parameter, type_class]
3.6.3; 14.3.7, 14.3.8, 14.3.9, 14.3.10, C
as the index type of the string Predefined constant 8.6; C
type 3.6.3 [see also: system.system_name]
[see also: system.address_zero,
POSITIVE_COUNT (predefined integer system.no_addr, system.null_address,
subtype) 14.2.5, 14.3.10; 14.2.4, 14.3, system.no_ast_handler]
14.3.4 for CHARACTER values [see:
Potentially visible declaration 8.4 ascii]
Index–53
Predefined generic library for an array type 3.6.2
subprogram 8.6; C for a record type 3.7.4
implicitly declared 3.3.3
Predefined identifier 8.6; C in a static expression 4.9
Predefined library package 8.6; C of a derived type 3.4
[see also: predefined generic library of a fixed point type 3.5.9
package, predefined package, ascii, of a floating point type 3.5.7
calendar, input-output package, of an integer type 3.5.4
io_exceptions, low_level_io, machine_ raising an exception 11.4.1
code, system, text_io] Predefined package 8.6; C
[see also: aux_io_exceptions] [see also: ascii, library unit,
Predefined library subprogram predefined library package, standard]
[see: predefined generic library for input-output 14
subprogram] Predefined pragma
Predefined named number [see: controlled, elaborate, inline,
[see: system.fine_delta, system.max_ interface, list, memory_size, optimize,
digits, system.max_int, system.max_ pack, page, priority, shared, storage_
mantissa, system.memory_size, unit, suppress, system_name]
system.min_int, system.storage_unit, [see: ast_entry, common_object,
system.tick] component_alignment, export_
[see: system.address_size] exception, export_function,
export_object, export_procedure,
Predefined operation 3.3, 3.3.3; 8.6 export_valued_procedure, float_
[see also: operation, predefined representation, ident, import_
operator] exception, import_function, import_
accuracy for a real type 4.5.7 object, import_procedure, import_
of a discrete type 3.5.5 valued_procedure, inline_generic,
of a fixed point type 3.5.10 interface_name, long_float, main_
of a floating point type 3.5.8 storage, psect_object, share_generic,
of a universal type 4.10 suppress_all, task_storage, time_slice,
propagating an exception 11.6 title, volatile]
Predefined operator 4.5, 8.6; C Predefined subprogram 8.6; C
[see also: abs, arithmetic operator, [see also: input-output subprogram,
binary adding operator, catenation, library unit, predefined generic library
equality, exponentiating operator, subprogram]
highest precedence operator,
inequality, limited type, logical Predefined subtype 8.6; C
operator, multiplying operator, [see also: field, natural, number_base,
operator, predefined operation, positive, priority]
relational operator, unary adding Predefined type 8.6; C
operator] [see also: boolean, character, count,
applied to an undefined value duration, float, integer, long_float,
3.2.1 long_integer, priority, short_float,
as an operation 3.3.3 short_integer, string, system.address,
for an access type 3.8.2
Index–54
system.name, time, universal_integer, Private type declaration 7.4; 7.4.1,
universal_real] 7.4.2
[see also: long_long_float, short_ [see also: private part (of a package),
short_integer, system (and individual visible part (of a package)]
DEC Ada types declared in system)] as a generic type declaration 12.1
as a portion of a declarative
Prefix 4.1; D region 8.1
[see also: appropriate for a type, including the word ’limited’ 7.4.4
function call, name, selected
component, selector] Procedure 6.1; 6, D
in an attribute 4.1.4 [see also: parameter and result type
in an indexed component 4.1.1 profile, parameter, subprogram]
in a selected component 4.1.3 as a main program 10.1
in a slice 4.1.2 as a renaming of an entry 9.5
that is a function call 4.1 renamed 8.5
that is a name 4.1 exporting 13.9a.1.4
importing 13.9a.1.1
Primary 4.4
in a factor 4.4 Procedure body
in a static expression 4.9 [see: subprogram body]
including code statements 13.8
Primary key in an indexed access file
14.2a Procedure call 6.4; 6, D
[see also: subprogram call]
PRIORITY (predefined integer subtype)
9.8; 13.7, C Procedure call statement 6.4
[see also: task priority] [see also: actual parameter,
statement]
PRIORITY (predefined pragma) 9.8; 13.7, as a simple statement 5.1
B with a parameter of a derived
[see also: task priority] type 3.4
Private part (of a package) 7.2; 7.4.1, Procedure specification
7.4.3, D [see: subprogram specification]
[see also: deferred constant
declaration, private type declaration] Processor 9
Private type 3.3, 7.4, 7.4.1; D Profile
[see also: class of type, derived type [see: parameter and result type
of a private type, limited private type, profile, parameter type profile]
type with discriminants]
as a generic actual type 12.3.2 Program 10; D
as a generic formal type 12.1.2 [see also: main program]
as a parent type 3.4 Program legality 1.6
corresponding full type
declaration 3.3.1 Program library 10.1, 10.4; 10.5
formal parameter 6.2 creation 10.4; 13.7
of a deferred constant 7.4; 3.2.1 manipulation and status 10.4
operation 7.4.2
Index–55
maximum number of units in Proper body 3.9
DEC Ada F as a body 3.9
in a subunit 10.2
Program optimization 11.6; 10.6 of a library unit separately
Program section D; 13.9a.2.3 compiled 10.1
Index–56
Qualified expression 4.7; D of a real type containing the
as a primary 4.4 result of an operation 4.5.7
in an allocator 4.8 yielded by an attribute 4.1.4
in a case statement 5.4
in a static expression 4.9 RANGE (predefined attribute) 3.6.2;
qualification of an array 4.1.4, A
aggregate 4.3.2 for an access value 3.8.2
to resolve an overloading Range constraint 3.5; D
ambiguity 6.6 [see also: elaboration of . . . ]
Queue of entry calls ignored due to range_check
[see: entry queue] suppression 11.7
in a fixed point constraint 3.5.9
Queue of interrupts in a floating point constraint 3.5.7
[see: entry queue] in an integer type definition 3.5.4
in a subtype indication 3.5; 3.3.2
Quotation character 2.1 on a derived subtype 3.4
in a string literal 2.6 violated 11.1
replacement by percent character
2.10 Range_check
[see: constraint_error, suppress]
when array parameter passing
involves a descriptor 11.7
READ (input-output procedure)
in an instance of direct_io 14.2.4;
Radix of a floating point type 3.5.7; 13.7.3 14.1, 14.2, 14.2.5
in an instance of sequential_io
Raise statement 11.3; 11
14.2.2; 14.1, 14.2, 14.2.3
[see also: exception, statement]
in an instance of indexed_io
as a simple statement 5.1
14.2a.4, 14.2a.5
including the name of an
in an instance of relative_io
exception 11.1
14.2a.2, 14.2a.3
Raising of an exception 11, 11.3; D in direct_mixed_io 14.2b.5,
[see also: exception] 14.2b.6
causing a transfer of control 5.1 in indexed_mixed_io 14.2b.9,
14.2b.10
Range 3.5; D in relative_mixed_io 14.2b.7,
[see also: discrete range, null range] 14.2b.8
as a discrete range 3.6 in sequential_mixed_io 14.2b.3,
in a record representation clause 14.2b.4
13.4
in a relation 4.4 READ_BY_KEY (DEC Ada input-output
of an index subtype 3.6 generic procedure)
of an integer type containing the in an instance of indexed_io
result of an operation 4.5 14.2a.4, 14.2a.5
of a predefined integer type 3.5.4 in indexed_mixed_io 14.2b.9,
14.2b.10
Index–57
READ_EXISTING (DEC Ada input- Record (RMS)
output procedure) [see also: element]
in an instance of relative_io correspondence to a file element
14.2a.2, 14.2a.3 14.1a
in relative_mixed_io 14.2b.7, correspondence to a source line
14.2b.8 2.2
determining number of in direct
Reading the value of an object 6.2, 9.11 input-output file 14.2.4
locking in a relative or indexed
READ_REGISTER (DEC Ada predefined access file 14.2a
function) Record aggregate 4.3.1; 4.3
[see system.read_register] [see also: aggregate]
Real literal 2.4 as a basic operation 3.3.3; 3.7.4
[see also: universal_real type] in a code statement 13.8
in based notation 2.4.2 Record component
in decimal notation 2.4.1 [see: component, record type, selected
is of type universal_real 3.5.6 component]
[see also: D_floating, F_floating, [see also: allocation]
G_floating, H_floating]
Record representation clause 13.4
Real type 3.5.6; 3.3, 3.5, D [see also: first_bit attribute, last_bit
[see also: fixed point type, floating attribute, position attribute]
point type, model number, numeric as a representation clause 13.1
type, safe number, scalar type, DEC Ada restrictions on
universal_real type] component clause in 13.4
accuracy of an operation 4.5.7
representation attribute 13.7.3 Record type 3.7; 3.3, D
result of a conversion from a [see also: component, composite
numeric type 4.5.7; 4.6 type, discriminant, matching
result of an operation out of range components, subcomponent, type
of the type 4.5.7 with discriminants, variant]
formal parameter 6.2
Real type definition 3.5.6; 3.3.1, 3.5.7, including a limited subcomponent
3.5.9 7.4.4
[see also: elaboration of . . . ] operation 3.7.4
RECEIVE_CONTROL (low_level_io Record type declaration
procedure) 14.6 [see: record type definition, type
Reciprocal operation in exponentiation declaration]
by a negative integer 4.5.6 as a declarative region 8.1
determining the visibility of
Recompilation 10.3 another declaration 8.3
implicit 3.5.7a, 3.5.7b
Record type definition 3.7; 3.3.1
[see also: component declaration]
Index–58
Recursive RELATIVE_IO (DEC Ada predefined
call of a subprogram 6.1, 12.1; input-output package) 14.2a.2; 14.2a.3
6.3.2 element locking in 14.2a
generic instantiation 12.1, 12.3 exceptions 14.4; 14.5, 14.5a
types 3.8.1; 3.3.1 requisite specification of FORM
parameter with 14.1.b, 14.2a.1
Reentrant subprogram 6.1 specification 14.2a.3
Reference (parameter passing) 6.2; RELATIVE_MIXED_IO (DEC Ada
13.9a.1.4 predefined input-output package)14.2b.7;
Relation (in an expression) 4.4 14.2b.8
exceptions 14.4; 14.5, 14.5a
Relational expression requisite specification of FORM
[see: relation, relational operator] parameter with 14.1b
specification 14.2b.8
Relational operation 4.5.2
of a boolean type 3.5.3 Rem operator 4.5.5
of a discrete type 3.5.5 [see also: multiplying operator]
of a fixed point type 3.5.10
of a floating point type 3.5.8 Remainder operation 4.5.5
of a scalar type 3.5 REMQHI (DEC Ada predefined
result for real operands 4.5.7 procedure)
Relational operator 4.5; 4.5.2, C [see: system.remqhi]
[see also: equality operator, REMQ_STATUS (DEC Ada predefined
inequality operator, ordering relation, type)
overloading of an operator, predefined [see: system.remq_status]
operator]
for an access type 3.8.2 REMQTI (DEC Ada predefined procedure)
for an array type 3.6.2 [see: system.remqti]
for a private type 7.4.2
for a record type 3.7.4 Renaming declaration 8.5; 4.1, 12.1.3,
for time predefined type 9.6 D
in a relation 4.4 [see also: name]
overloaded 6.7 as a basic declaration 3.1
as a declarative region 8.1
RELATION_TYPE (DEC Ada input- cannot rename a universal_fixed
output type) 14.2a operation 4.5.5
in an instance of indexed_io for an array object 3.6.1
14.2a.4, 14.2a.5 for an entry 9.5
in indexed_mixed_io 14.2b.9, for a record object 3.7.2
14.2b.10 name declared is not allowed as a
prefix of certain expanded names
Relative access file 14.2a 4.1.3
Relative address of a component within to overload a library unit 10.1
a record to overload a subunit 10.2
[see: record representation clause] to resolve an overloading
ambiguity 6.6
Index–59
and the pragma inline 6.3.2 RESET (input-output procedure)
and the pragma inline_generic in an instance of direct_io 14.2.1;
12.1a 14.2.5
and the pragma interface 13.9 in an instance of sequential_io
for a volatile variable 9.11 14.2.1; 14.2.3
for imported subprograms in text_io 14.2.1; 14.3.1, 14.3.10
13.9a.1.1 in an instance of indexed_io
14.2a.1, 14.2a.5
Rendezvous (of tasks) 9.5; 9, 9.7.1, 9.7.2, in an instance of relative_io
9.7.3, D 14.2.1, 14.2a.3
during which an exception is in direct_mixed_io 14.2.1, 14.2b.6
raised 11.5 in indexed_mixed_io 14.2a.1,
priority 9.8 14.2b.10
prohibited for an abnormal task in relative_mixed_io 14.2.1,
9.10 14.2b.8
Replacement of characters in program in sequential_mixed_io 14.2.1,
text 2.10 14.2b.4
Index–60
Returned value SAFE_LARGE (predefined attribute)
[see: function call] 3.5.8, 3.5.10; A
of a function call 5.8, 6.5; 8.5 DEC Ada floating point values for
of an instance of a generic formal F
function 12.1.3
of a main program 10.1 SAFE_SMALL (predefined attribute)
of an operation 3.3.3 3.5.8, 3.5.10; A
of a predefined operator of an DEC Ada floating point values for
integer type 3.5.4 F
of a predefined operator of a real Satisfy (a constraint) 3.3; D
type 3.5.6, 4.5.7 [see also: constraint, subtype]
Right label bracket compound delimiter a discriminant constraint 3.7.2
2.2 an index constraint 3.6.1
a range constraint 3.5
Right parenthesis
character 2.1 Scalar type 3.3, 3.5; D
delimiter 2.2 [see also: class of type, discrete
type, enumeration type, fixed point
Rounding type, floating point type, integer
in a real-to-integer conversion 4.6 type, numeric type, real type, static
of results of real operations 4.5.7; expression]
13.7.3 as a generic parameter 12.1.2,
12.3.3
Run time check 11.7; 11.1 formal parameter 6.2
of a range in a membership test
4.5.2
operation 3.5.5; 4.5.2
Scheduling 9.8; 13.5.1
Safe interval 4.5.7 Scheme
[see: iteration scheme]
Safe number (of a real type) 3.5.6; 4.5.7
[see also: model number, real type Scope 8.2; 8.3, D
representation attribute, real type] [see also: basic operation, character
limit to the result of a real literal, declaration, declarative region,
operation 4.5.7 generic instance, identifier, immediate
of a fixed point type 3.5.9; 3.5.10 scope, implicit declaration, operator
of a floating point type 3.5.7; 3.5.8 symbol, overloading, visibility]
result of universal expression too of a use clause 8.4
large 4.10
Secondary unit 10.1
SAFE_EMAX (predefined attribute) 3.5.8; [see also: compilation unit, library
A unit]
DEC Ada floating point values for compiled after the corresponding
F library unit or parent unit 10.3
subject to a pragma elaborate
10.5
Index–61
SECONDS (predefined function) 9.6 Semicolon delimiter 2.2
followed by a pragma 2.8
Select alternative (of a selective wait)
9.7.1 SEND_CONTROL (low_level_io
procedure) 14.6
Select statement 9.7; 9.7.1, 9.7.2, 9.7.3
[see also: statement, task, terminate Separate compilation 10, 10.1; 10.5
alternative] of a proper body 3.9
as a compound statement 5.1 of a proper body declared in
in an abnormal task 9.10 another compilation unit 10.2
Selected component 4.1.3; 8.3, D Separator 2.2
[see also: direct visibility, prefix,
selector, visibility by selection, Sequence of statements 5.1
visibility] in an accept statement 9.5
as a basic operation 3.3.3; 3.3, in a basic loop 5.5
3.7.4, 3.8.2, 7.4.2 in a block statement 5.6; 9.4
as a name 4.1 in a case statement alternative
as the name of an entry or entry 5.4
family 9.5 in a conditional entry call 9.7.2
for selective visibility 8.3 in an exception handler 11.2
in a conforming construct 6.3.1 in an if statement 5.3
starting with standard 8.6 in a package body 7.1; 7.3
using a block name 5.6 in a selective wait statement 9.7.1
using a loop name 5.5 in a subprogram body 6.3; 9.4,
whose prefix denotes a package 13.8
8.3 in a task body 9.1; 9.4
whose prefix denotes a record in a timed entry call 9.7.3
object 8.3 including a raise statement 11.3
whose prefix denotes a task object of code statements 13.8
8.3 raising an exception 11.4.1
Selection of an exception handler 11.4, Sequential access file 14.2; 14.1, 14.2.1
11.4.1, 11.4.2; 11.6 Sequential execution
Selective visibility [see: sequence of statements,
[see: visibility by selection] statement]
Index–62
SEQUENTIAL_MIXED_IO (DEC Ada in relative_mixed_io 14.2b.2,
predefined input-output package)14.2b.3; 14.2b.8
14.2b.4 in sequential_mixed_io 14.2b.2,
example 14.7a 14.2b.4
exceptions 14.4; 14.5
specification 14.2b.4 SHARE_GENERIC (DEC Ada predefined
pragma) 12.1b; B
SET_COL (text_io procedure) 14.3.4;
14.3.10 SHARED (predefined pragma) 9.11; B
[see also: volatile]
SET_INDEX (input-output procedure)
in an instance of direct_io 14.2.4; Shared variable (of two tasks) 9.11
14.2.5 [see also: task]
in an instance of relative_io Sharp character 2.1
14.2a.2, 14.2a.3 [see also: based literal]
in direct_mixed_io 14.2b.5, replacement by colon character
14.2b.6 2.10
in relative_mixed_io 14.2b.7,
14.2b.8 Short circuit control form 4.5, 4.5.1;
4.4
SET_INPUT (text_io procedure) 14.3.2; as a basic operation 3.3.3; 3.5.5
14.3.10 in an expression 4.4
raising an exception 14.4
SHORT_FLOAT (predefined type) 3.5.7;
SET_INTERLOCKED (DEC Ada C
predefined procedure)
[see: system.set_interlocked] SHORT_INTEGER (predefined type)
3.5.4; C
SET_LINE (text_io procedure) 14.3.4;
14.3.10 SHORT_SHORT_INTEGER (DEC Ada
predefined type) 3.5.4; C
SET_LINE_LENGTH (text_io procedure)
14.3.3; 14.3.10 Sign of a fixed point number 3.5.9
raising an exception 14.4
Sign of a floating point number 3.5.7
SET_OUTPUT (text_io procedure) 14.3.2;
Signal D
14.3.10
raising an exception 14.4 Significant decimal digits 3.5.7
SET_PAGE_LENGTH (text_io procedure) Simple expression 4.4
14.3.3; 14.3.10 as a choice 3.7.3
raising an exception 14.4 as a choice in an aggregate 4.3
as a range bound 3.5
SET_POSITION (DEC Ada mixed-type
for an entry index in an accept
input-output procedure)
statement 9.5
in direct_mixed_io 14.2b.2,
in an address clause 13.5
14.2b.6
in a delay statement 9.6
in indexed_mixed_io 14.2b.2,
in a fixed accuracy definition 3.5.9
14.2b.10
in a floating accuracy definition
3.5.7
Index–63
in a record representation clause SKIP_LINE (text_io procedure) 14.3.4;
13.4 14.3.10
in a relation 4.4 raising an exception 14.4
Simple name 4.1; 2.3, D SKIP_PAGE (text_io procedure) 14.3.4;
[see also: block name, identifier, label, 14.3.10
loop name, loop simple name, name, raising an exception 14.4
overloading, visibility]
as a choice 3.7.3 Slice 4.1.2
as a formal parameter 6.4 [see also: array type]
as a label 5.1 as a basic operation 3.3.3; 3.6.2,
as a name 4.1 3.8.2
before arrow compound delimiter as a name 4.1
8.3 as destination of an assignment
in an accept statement 9.5 5.2.1
in an address clause 13.5 of a constant 3.2.1
in an attribute designator 4.1.4 of a derived type 3.4
in a conforming construct 6.3.1 of an object as an object 3.2
in a discriminant association 3.7.2 of a value of a generic formal
in an enumeration representation array type 12.1.2
clause 13.3 of a variable 3.2.1
in a package body 7.1 starting with a prefix 4.1, 4.1.2
in a package specification 7.1 SMALL (predefined attribute) 3.5.8,
in a record representation clause 3.5.10; A
13.4 [see also: fixed point type]
in a selector 4.1.3 specified by a length clause 13.2
in a suppress pragma 11.7 DEC Ada floating point values for
in a task body 9.1 F
in a variant part 3.7.3
in a with clause 10.1.1 Small of a fixed point model number 3.5.9
versus identifier 3.1
Some order not defined by the
Simple statement 5.1 language
[see also: statement] [see: incorrect order dependence]
Index–64
not allowed in a numeric literal null statement, procedure call
2.4.1 statement, raise statement, return
statement, select statement, sequence
Space character literal 2.5; 2.2 of statements, target statement]
Special character 2.1 allowed in an exception handler
[see also: basic graphic character, 11.2
other special character] as an overload resolution context
in a delimiter 2.2 8.7
optimized 10.6
Specification raising an exception 11.4.1; 11.4
[see: declaration, discriminant that cannot be reached 10.6
specification, enumeration literal
specification, generic specification, Statement alternative
loop parameter specification, package [see: case statement alternative]
specification, parameter specification, Static constraint 4.9
subprogram specification, task on a subcomponent subject to a
specification] component clause 13.4
STANDARD (predefined package) 8.6; C on a type 3.5.4, 3.5.7, 3.5.9, 13.2
[see also: library unit] Static discrete range 4.9
as a declarative region 8.1 as a choice of an aggregate 4.3.2
enclosing the library units of a as a choice of a case statement
program 10.1.1; 10.1, 10.2 5.4
including implicit declarations of as a choice of a variant part 3.7.3
fixed point cross-multiplication
and cross-division 4.5.5 Static expression 4.9; 8.7
implicit recompilation of 3.5.7a, as a bound in an integer type
3.5.7b definition 3.5.4
as a choice in a case statement
STANDARD_INPUT (text_io function) 5.4
14.3.2; 14.3.10 as a choice of a variant part 3.7.3
STANDARD_OUTPUT (text_io function) for a choice in a record aggregate
14.3.2; 14.3.10 4.3.2
for a discriminant in a record
Star aggregate 4.3.1
[see: double star] in an attribute designator 4.1.4
character 2.1 in an enumeration representation
delimiter 2.2 clause 13.3
in a fixed accuracy definition 3.5.9
Statement 5.1; 5, D
in a floating accuracy definition
[see also: abort statement, accept
3.5.7
statement, address attribute,
in a generic unit 12.1
assignment statement, block
in a length clause 13.2
statement, case statement, code
in a number declaration 3.2, 3.2.2
statement, compound statement,
in a record representation clause
delay statement, entry call statement,
13.4
exit statement, goto statement, if
in priority pragma 9.8
statement, label, loop statement,
Index–65
whose type is a universal type Storage_check
4.10 [see: program_error exception,
suppress]
Static others choice 4.3.2
STORAGE_ERROR (predefined
Static subtype 4.9 exception) 11.1
of a discriminant 3.7.3 [see also: suppress pragma]
of the expression in a case raised by an allocator exceeding
statement 5.4 the allocated storage 4.8; 11.1
Status value D; 10.1 raised by an elaboration of a
declarative item 11.1
STATUS_ERROR (input-output raised by a task activation
exception) 14.4; 14.2.1, 14.2.2, 14.2.3, exceeding the allocated storage
14.2.4, 14.2.5, 14.3.2, 14.3.3, 14.3.4, 14.3.5, 11.1
14.3.10, 14.5, 14.2a.2, 14.2a.3, 14.2a.4, raised by the execution of a
14.2a.5, 14.2b.3, 14.2b.4, 14.2b.5, 14.2b.6 subprogram call 11.1
14.2b.7, 14.2b.8, 14.2b.9, 14.2b.10
STORAGE_SIZE (predefined attribute)
Storage address of a component 13.4 13.7.2; A
[see also: address clause] [see also: storage units allocated]
for an access type 3.8.2
Storage bits
for a task object or task type 9.9
allocated to an object or type 13.2;
specified by a length clause 13.2
13.7.2 [see also: size]
of a record component relative to STORAGE_UNIT (predefined named
a storage unit 13.4 number)
size of a storage unit 13.7 [see: system.storage_unit]
Storage deallocation STORAGE_UNIT (predefined pragma)
[see: unchecked_deallocation] 13.7; B
[see also: system.storage_unit]
Storage minimization
[see: pack pragma] STRING (predefined type) 3.6.3; C
[see also: predefined type]
Storage reclamation 4.8
as the parameter of value
Storage representation of a record 13.4 attribute 3.5.5
as the result of image attribute
Storage unit 13.7 3.5.5
offset to the start of a record maximum number of characters
component 13.4 in value of F
size of a storage unit in bits 13.7
String bracket 2.6; 2.10
Storage units allocated
[see: storage_size] String literal 2.6, 4.2; 2.2, 3.6.3
to a collection 13.2; 4.8, 11.1, [see also: overloading of . . . , percent
13.7.2 mark character, quotation character]
to a task activation 13.2; 9.9, as a basic operation 3.3.3, 4.2;
11.1, 13.7.2 3.6.2
as an operator symbol 6.1
Index–66
as a primary 4.4 exporting Ada to non-Ada
must not be the argument of a programs 13.9a.1.4
conversion 4.6 importing non-Ada from Ada
replaced by a catenation of basic programs 13.9, 13.9a.1.1,
characters 2.10 13.9a.1.2, 13.9a.1.3
Stub Subprogram body 6.3; 6, D
[see: body stub] [see also: body stub]
as a generic body 12.2
Subaggregate 4.3.2 as a library unit 10.1
Subcomponent 3.3; D as a proper body 3.9
[see also: component, composite type, as a secondary unit 10.1
default expression, discriminant, as a secondary unit compiled
object] after the corresponding library
depending on a discriminant unit 10.3
3.7.1; 5.2, 8.5 having dependent tasks 9.4
of a component for which a in a package body 7.1
component clause is given 13.4 including an exception handler
renamed 8.5 11.2; 11
that is a task object 9.2; 9.3 including an exit statement 5.7
whose type is a limited type 7.4.4 including a goto statement 5.9
whose type is a private type 7.4.1 including an implicit declaration
5.1
Subprogram 6; D including a return statement 5.8
[see also: actual parameter, completed including code statements must
subprogram, derived subprogram, be a procedure body 13.8
entry, formal parameter, function, inlined in place of each call 6.3.2
library unit, overloading of . . . , must be in the same declarative
parameter and result type profile, region as the declaration 3.9, 7.1
parameter, predefined subprogram, not allowed for a subprogram
procedure, program unit] subject to an interface pragma
as a generic instance 12.3; 12 13.9
as a main program 10.1 not yet elaborated at a call 3.9
as an operation 3.3.3; 7.4.2 raising an exception 11.4.1, 11.4.2
including a raise statement 11.3 recompiled 10.3
of a derived type 3.4
overloaded 6.6 Subprogram call 6.4; 6, 6.3, 12.3
renamed 8.5 [see also: actual parameter, entry call
subject to an address clause 13.5 statement, entry call, function call,
subject to an inline pragma 6.3.2 procedure call statement, procedure
subject to an interface pragma call]
13.9 before elaboration of the body 3.9
subject to a representation clause statement replaced by an inlining
13.1 of the body 6.3.2
subject to a suppress pragma 11.7 statement with a default actual
with a separately compiled body parameter 6.4.2
10.2 to a derived subprogram 3.4
to a generic instance 12
Index–67
Subprogram declaration 6.1; 6, D of a component of an array 3.6
and body as a declarative region of a component of a record 3.7
8.1 of a constant in a static
as a basic declaration 3.1 expression 4.9
as a later declarative item 3.9 of a discriminant of a generic
as a library unit 10.1 formal type 12.3.2
as an overloaded declaration 8.3 of a formal parameter 6.4.1
implied by the body 6.3, 10.1 of a formal parameter or result of
in a package specification 7.1 a renamed subprogram or entry
made directly visible by a use 8.5
clause 8.4 of a generic formal type 12.1.2
of an operator 6.7 of an index of a generic formal
recompiled 10.3 array type 12.3.4
of an object [see: elaboration
Subprogram specification 6.1 of . . . ]
and forcing occurrences 13.1 of a private type 7.4, 7.4.1
conforming to another 6.3.1 of a real type 3.5.7, 3.5.9; 3.5.6,
for a function 6.5 4.5.7
in a body stub 10.2 of a record type [see: constrained
in a generic declaration 12.1; record type, discriminant
12.1.3 constraint]
in a renaming declaration 8.5 of a scalar type 3.5
in a subprogram body 6.3 of a task type 9.2
including the name of a private of a variable 5.2
type 7.4.1 subject to a representation clause
of a derived subprogram 3.4 13.1
Subtraction operation 4.5.3 Subtype conversion 4.6
for a real type 4.5.7 [see also: conversion operation,
Subtype 3.3, 3.3.2; D explicit conversion, implicit
[see also: attribute of . . . , base conversion, type conversion]
attribute, constrained subtype, in an array assignment 5.2.1; 5.2
constraint, first named subtype, to a real type 4.5.7
operation of . . . , result subtype, Subtype declaration 3.3.2; 3.1
satisfy, size attribute, static subtype, and forcing occurrences 13.1
type, unconstrained subtype] as a basic declaration 3.1
declared by a numeric type including the name of a private
declaration 3.5.4, 3.5.7, 3.5.9 type 7.4.1
in a membership test 4.5.2
name [see: name of a subtype, Subtype definition
type_mark of a subtype] [see: component subtype definition,
not considered in overload dependence on a discriminant, index
resolution 8.7 subtype definition]
of an access type 3.8
of an actual parameter 6.4.1
of an array type [see: constrained
array type, index constraint]
Index–68
Subtype indication 3.3.2 SUPPRESS_ALL (DEC Ada predefined
[see also: elaboration of . . . ] pragma) 11.7; B
as a component subtype
indication 3.7 Symbol
as a discrete range 3.6 [see: graphical symbol, operator
for a subtype of a generic formal symbol]
type 12.1.2 Synchronization of tasks
in an access type definition 3.8 [see: task synchronization]
in an allocator 4.8
in an array type definition 3.6 Syntactic category 1.5
in a component declaration 3.7
Syntax notation 1.5
in a constrained array definition
3.6 Syntax rule 1.5; E
in a derived type definition 3.4
in a generic formal part 12.1 SYSTEM (predefined library package)
in an object declaration 3.2, 3.2.1 13.7; C, F
in an unconstrained array
System dependent F
definition 3.6
attribute 13.4
including a fixed point constraint
constant 13.7
3.5.9
named number 13.7, 13.7.1
including a floating point
record component 13.4
constraint 3.5.7
type 13.7
with a range constraint 3.5
System services (OpenVMS)
Subunit 10.2; D
asynchronous 9.12a
[see also: library unit]
calling from DEC Ada 9.12a
as a compilation unit 10.4
clock interval provided by 13.7.1
as a library unit 10.4
using null_parameter (DEC Ada
as a secondary unit 10.1
predefined attribute) in calls to
compiled after the corresponding
13.9a.1.3
parent unit 10.3
reading volatile variables from
not allowed for a subprogram
9.11
subject to an interface pragma
13.9 SYSTEM.ADD_ATOMIC (DEC Ada
of a compilation unit subject to a predefined procedure) 13.7b.6
context clause 10.1.1
raising an exception 11.4.1, 11.4.2 SYSTEM.ADD_INTERLOCKED (DEC
recompiled (does not affect other Ada predefined procedure) 13.7b.5
compilation units) 10.3 SYSTEM.ADDRESS (predefined type)
SUCC (predefined attribute) 3.5.5; 13.3, A 13.7; 13.5
[see also: address attribute, address
Successor clause]
[see: succ attribute] properties of 13.7a.1
SUPPRESS (predefined pragma) 11.7; SYSTEM.ADDRESS_SIZE (DEC Ada
11.1, B predefined constant) 13.7a.1
Index–69
SYSTEM.ADDRESS_ZERO (DEC Ada SYSTEM.IMPORT_ADDRESS (DEC
predefined constant) 13.7a.1; 13.7.2 Ada predefined function) 13.7a.6
SYSTEM.ALIGNED_INTEGER (DEC SYSTEM.IMPORT_LARGEST_VALUE
Ada predefined type) 13.7b.6 (DEC Ada predefined function) 13.7a.6
SYSTEM.ALIGNED_LONG_INTEGER SYSTEM.IMPORT_VALUE (DEC Ada
(DEC Ada predefined type) 13.7b.6 predefined function) 13.7a.6
SYSTEM.ALIGNED_WORD (DEC Ada SYSTEM.INSQHI (DEC Ada predefined
predefined type) 13.7b.5 procedure) 13.7b.7
SYSTEM.AND_ATOMIC (DEC Ada SYSTEM.INSQ_STATUS (DEC Ada
predefined procedure) 13.7b.6 predefined type) 13.7b.7
SYSTEM.ASSIGN_TO_ADDRESS (DEC SYSTEM.INTEGER (DEC Ada
Ada generic procedure) 13.7a.1 predefined types) 13.7a.4
SYSTEM.AST_HANDLER (DEC Ada SYSTEM.INSQTI (DEC Ada predefined
predefined type) 13.7b.3; 9.12a procedure) 13.7b.7
SYSTEM.BIT_ARRAY (DEC Ada SYSTEM.LARGEST_INTEGER (DEC
predefined type and associated subtypes) Ada predefined type) 13.7a.4
13.7a.4
SYSTEM.MAX_DIGITS (predefined
SYSTEM.CLEAR_INTERLOCKED named number) 13.7.1
(DEC Ada predefined procedure) 13.7b.5 limit on the significant digits of a
floating point type 3.5.7
SYSTEM.D_FLOAT (DEC Ada
predefined type) 13.7b.1 SYSTEM.MAX_INT (predefined named
number) 13.7.1; 3.5.4
SYSTEM.FETCH_FROM_ADDRESS exceeded by the value of a
(DEC Ada generic function) 13.7a.1 universal expression 4.10
SYSTEM.F_FLOAT (DEC Ada predefined SYSTEM.MAX_MANTISSA (predefined
type) 13.7b.1 named number) 13.7.1
SYSTEM.FINE_DELTA (predefined SYSTEM.MEMORY_SIZE (predefined
named number) 13.7.1 named number) 13.7
SYSTEM.G_FLOAT (DEC Ada SYSTEM.MFPR (DEC Ada predefined
predefined type) 13.7b.1 function) 13.7b.4
SYSTEM.H_FLOAT (DEC Ada SYSTEM.MIN_INT (predefined named
predefined type) 13.7b.1 number) 13.7.1; 3.5.4
SYSTEM.IEEE_DOUBLE_FLOAT (DEC greater than the value of a
Ada predefined type) 13.7b.2 universal expression 4.10
Index–70
NO_ADDR (DEC Ada predefined SYSTEM.TO_BIT_ARRAY_64 (DEC Ada
constant) 13.7a.1 predefined function) 13.7a.4
SYSTEM.NO_AST_HANDLER (DEC SYSTEM.TO_INTEGER (DEC Ada
Ada predefined constant) 13.7b.3; 9.12a predefined function) 13.7a.1
SYSTEM.NON_ADA_ERROR (DEC Ada SYSTEM.TO_UNSIGNED_BYTE (DEC
predefined exception) 13.7a.3; 11.2 Ada predefined function) 13.7a.4
SYSTEM.NULL_ADDRESS (DEC Ada SYSTEM.TO_UNSIGNED_
predefined constant) 13.7a.1 LONGWORD (DEC Ada predefined
function) 13.7a.4, 13.7b.3
SYSTEM.OR_ATOMIC (DEC Ada
predefined procedure) 13.7b.6 SYSTEM.TO_UNSIGNED_
QUADWORD(DEC Ada predefined
SYSTEM.READ_REGISTER (DEC Ada function) 13.7a.4
predefined function) 13.7b.4
SYSTEM.TO_UNSIGNED_WORD (DEC
SYSTEM.REMQHI (DEC Ada predefined Ada predefined function) 13.7a.4
procedure) 13.7b.7
SYSTEM.TYPE_CLASS (DEC Ada
SYSTEM.REMQ_STATUS (DEC Ada predefined type) 13.7a.2
predefined type) 13.7b.7
SYSTEM.UNSIGNED_BYTE (DEC Ada
SYSTEM.REMQTI (DEC Ada predefined predefined type) 13.7a.4
procedure) 13.7b.7
SYSTEM.UNSIGNED_BYTE_ARRAY
SYSTEM.SET_INTERLOCKED (DEC (DEC Ada predefined type) 13.7a.4
Ada predefined procedure) 13.7b.5
SYSTEM.UNSIGNED_LONGWORD
SYSTEM.STORAGE_UNIT (predefined (DEC Ada predefined type) 13.7a.4
named number) 13.7; 13.4
SYSTEM.UNSIGNED_LONGWORD_
SYSTEM.SYSTEM_NAME (predefined ARRAY (DEC Ada predefined type)
constant) 13.7 13.7a.4
[see also: system_name] static subtypes of 13.7a.5
SYSTEM.TICK (predefined named SYSTEM.UNSIGNED_QUADWORD
number) 13.7.1; 9.6 (DEC Ada predefined type) 13.7a.4
SYSTEM.TO_ADDRESS (DEC Ada SYSTEM.UNSIGNED_QUADWORD_
predefined function) 13.7a.1 ARRAY (DEC Ada predefined type)
SYSTEM.TO_BIT_ARRAY_8 (DEC Ada 13.7a.4
predefined function) 13.7a.4 SYSTEM.UNSIGNED_WORD (DEC Ada
SYSTEM.TO_BIT_ARRAY_16 (DEC Ada predefined type) 13.7a.4
predefined function) 13.7a.4 SYSTEM.UNSIGNED_WORD_ARRAY
SYSTEM.TO_BIT_ARRAY_32 (DEC Ada (DEC Ada predefined type) 13.7a.4
predefined function) 13.7a.4 SYSTEM.WRITE_REGISTER (DEC Ada
predefined procedure) 13.7b.4
Index–71
SYSTEM_NAME (predefined pragma) not started for an abnormal task
13.7; B 9.10
[see also: system.system_name of a task with no task body 11.1
predefined constant] specification of storage for 13.2a
Task body 9.1; 9, D
[see also: body stub, elaboration
of . . . ]
as a proper body 3.9
in a package body 7.1
Tabulation including an exception handler
[see: horizontal tabulation, vertical 11.2; 11
tabulation] including an exit statement 5.7
including a goto statement 5.9
Target statement (of a goto statement)
including an implicit declaration
5.9
5.1
Target type of a conversion 4.6 must be in the same declarative
region as the declaration 3.9, 7.1
Task 9; D not yet elaborated at an
[see also: abnormal task, abort activation 3.9
statement, accept statement, raising an exception 11.4.1, 11.4.2
communication between . . . , specifying the execution of a task
completed task, delay statement, 9.2, 9.3
dependent task, entry (of a task),
entry call statement, rendezvous, Task communication
select statement, selective wait, [see: rendezvous]
shared variable, single task,
Task completion
terminated task]
[see: completed task]
calling the main program 10.1
raising an exception 11.5 Task declaration 9.1
scheduling 9.8, 9.8a and body as a declarative region
suspension awaiting a rendezvous 8.1
9.5 as a basic declaration 3.1
suspension by a delay statement as a later declarative item 3.9
9.6 elaboration raising an exception
suspension by a selective wait 11.4.2
9.7.1 in a package specification 7.1
suspension of an abnormal task
9.10 Task dependence
[see also: main_storage pragma, task_ [see: dependent task]
storage pragma, time_slice pragma] Task designated
Task activation 9.3 by a formal parameter 6.2
[see also: length clause, storage units by a value of a task type 9.1; 9.2,
allocated, storage_size attribute] 9.4, 9.5
before elaboration of the body 3.9 Task execution 9.3
causing synchronization 9.10, 9.11
Index–72
Task object 9.2; 9.1, 9.5 subject to a suppress pragma 11.7
[see also: attribute of . . . , task with a separately compiled body
activation] 10.2
designated by an access value 9.2
determining task dependence 9.4 TASKING_ERROR (predefined
renamed 8.5 exception) 11.1
[see also: suppress pragma]
Task priority 9.8 raised by an entry call to an
[see also: priority pragma, priority abnormal task 9.10, 11.5
subtype] raised by an entry call to a
of a task with an interrupt entry completed task 9.5, 9.7.2, 9.7.3,
13.5.1 11.5
raised by an exception in the task
Task specification 9.1; 9, D body 11.4.2
[see also: elaboration of . . . ] raised by failure of an activation
including an entry declaration 9.5 9.3; 11.4.2
including a priority pragma 9.8
including a representation clause TASK_STORAGE (DEC Ada predefined
13.1 pragma) 13.2a; B
Index–73
Terminator TO_BIT_ARRAY_64 (DEC Ada
[see: file terminator, line terminator, predefined function)
page terminator] [see: system.to_bit_array_64]
Text input-output 14.3; 14.2.1 TO_INTEGER (DEC Ada predefined
function)
Text of a program 2.2, 10.1 [see: system.to_integer]
TEXT_IO (predefined input-output TO_UNSIGNED_BYTE (DEC Ada
package) 14.3; 14, 14.1, 14.3.9, 14.3.10, C predefined function)
exceptions 14.4; 14.5 [see: system.to_unsigned_byte_]
specification 14.3.10
TO_UNSIGNED_LONGWORD (DEC
TICK Ada predefined function)
[see: system.tick] [see: system.to_unsigned_longword]
TIME (predefined type) 9.6 TO_UNSIGNED_QUADWORD (DEC
[see also: clock, date, day, make_time, Ada predefined function)
month, system.tick, year] [see: system.to_unsigned_quadword]
TIME_ERROR (predefined exception) 9.6 TO_UNSIGNED_WORD (DEC Ada
TIME_OF (predefined function) 9.6 predefined function)
[see: system.to_unsigned_word]
TIME_SLICE (DEC Ada predefined
pragma) 9.8a; B Transfer of control 5.1
[see also: exception, exit statement,
Timed entry call 9.7.3; 9.7 goto statement, return statement,
and renamed entries 8.5 terminate alternative]
subject to an address clause
13.5.1 TRUE boolean enumeration literal
3.5.3; C
Times operator
[see: multiplying operator] Type 3.3; D
[see also: access type, appropriate
TITLE (DEC Ada predefined pragma) B for a type, array type, attribute
of . . . , base attribute, base type,
TO_ADDRESS (DEC Ada predefined
boolean type, character type, class
function)
of type, composite type, constrained
[see: system.to_address]
type, derived type, discrete type,
TO_BIT_ARRAY_8 (DEC Ada predefined discriminant of . . . , enumeration
function) type, fixed point type, floating point
[see: system.to_bit_array_8] type, forcing occurrence, generic
actual type, generic formal type,
TO_BIT_ARRAY_16 (DEC Ada integer type, limited private type,
predefined function) limited type, numeric type, operation
[see: system.to_bit_array_16] of . . . , parent type, predefined type,
private type, real type, record type,
TO_BIT_ARRAY_32 (DEC Ada
representation clause, scalar type,
predefined function)
size attribute, storage allocated,
[see: system.to_bit_array_32]
Index–74
subtype, unconstrained subtype, Type conversion 4.6
unconstrained type, universal type] [see also: conversion operation,
name 3.3.1 conversion, explicit conversion,
of an actual parameter 6.4.1 subtype conversion, unchecked_
of an aggregate 4.3.1, 4.3.2 conversion]
of an array component of a as an actual parameter 6.4, 6.4.1
generic formal array type 12.3.4 as a primary 4.4
of an array index of a generic in a static expression 4.9
formal array type 12.3.4 to a real type 4.5.7
of a case statement expression 5.4
of a condition 5.3 Type declaration 3.3.1
of a declared object 3.2, 3.2.1 [see also: elaboration of . . . ,
of a discriminant of a generic incomplete type declaration, private
formal private type 12.3.2 type declaration]
of an expression 4.4 as a basic declaration 3.1
of a file 14.1 as a full declaration 7.4.1
of a formal parameter of a generic implicitly declaring operations
formal subprogram 12.1.3 3.3.3
of a generic actual object 12.3.1 in a package specification 7.1
of a generic formal object 12.1.1; including the name of a private
12.3.1 type 7.4.1
of an index 4.1.1 of a fixed point type 3.5.9
of a loop parameter 5.5 of a floating point type 3.5.7
of a named number 3.2, 3.2.2 of an integer type 3.5.4
of an object designated by a of a subtype 13.1
generic formal access type 12.3.5 Type definition 3.3.1; D
of a primary in an expression 4.4 [see also: access type definition,
of a shared variable 9.11 array type definition, derived type
of a slice 4.1.2 definition, elaboration of . . . ,
of a string literal 4.2 enumeration type definition, generic
of a task object 9.2 type definition, integer type definition,
of a universal expression 4.10 real type definition, record type
of a value 3.3; 3.2 definition]
of discriminants of a generic
formal object and the matching Type mark (denoting a type or subtype)
actual object 12.3.2 3.3.2
of the literal null 4.2 as a generic actual parameter
of the result of a generic formal 12.3
function 12.1.3 in an allocator 4.8
renamed 8.5 in a code statement 13.8
subject to a representation clause in a conversion 4.6
13.1; 13.6 in a deferred constant declaration
subject to a suppress pragma 11.7 7.4
yielded by an attribute 4.1.4 in a discriminant specification
3.7.1
in a generic formal part 12.1, 12.3
Index–75
in a generic parameter Unary operator 4.5; 3.5.5, 3.5.8, 3.5.10,
declaration 12.3.1 3.6.2, 4.5.4, 4.5.6, C
in an index subtype definition 3.6 [see also: highest precedence operator,
in a parameter specification 6.1; unary adding operator]
6.2
in a qualified expression 4.7 UNCHECKED_CONVERSION
in a relation 4.4 (predefined generic library function)
in a renaming declaration 8.5 13.10.2; 13.10, C
in a subprogram specification 6.1 UNCHECKED_DEALLOCATION
of a formal parameter of a generic (predefined generic library procedure)
formal subprogram 12.1.3 13.10.1; 4.8, 13.10, C
of a generic formal array type
12.1.2 Unconditional termination of a task
of a static scalar subtype 4.9 [see: abnormal task, abort statement]
of the result of a generic formal
Unconstrained array definition 3.6
function 12.1.3
Unconstrained array type 3.6; 3.2.1
Type with discriminants 3.3; 3.3.1,
as an actual to a formal private
3.3.2, 3.7, 3.7.1, 7.4, 7.4.1
type 12.3.2
[see also: private type, record type]
formal parameter 6.2
as an actual to a formal private
subject to a length clause 13.2
type 12.3.2
as the component type of an Unconstrained subtype 3.3, 3.3.2
array that is the operand of a [see also: constrained subtype,
conversion 4.6 constraint, subtype, type]
indication in a generic unit 12.3.2
TYPE_CLASS (DEC Ada predefined
attribute) 13.7a.2; A Unconstrained type 3.3; 3.2.1, 3.6, 3.6.1,
3.7, 3.7.2
TYPE_CLASS (DEC Ada predefined type)
formal parameter 6.2
[see: system.type_class]
with discriminants 6.4.1, 12.3.2
Unconstrained variable 3.3, 3.6, 3.7;
12.3.1
as a subcomponent [see:
subcomponent]
Unary adding operator 4.4, 4.5, C; 4.5.4 Undefined value
[see also: arithmetic operator, of a scalar parameter 6.2
overloading of an operator, predefined of a scalar variable 3.2.1
operator]
as an operation of a discrete type Underflow (floating point) handling in an
3.5.5 exception 11.1
in a simple expression 4.4
Underline character 2.1
overloaded 6.7
in a based literal 2.4.2
in a decimal literal 2.4.1
in an identifier 2.3
Index–76
Unhandled exception 11.4.1 converted to a fixed point type
3.5.10
Unit converted to a floating point type
[see: compilation unit, generic unit, 3.5.8
library unit, program unit, storage of real literals 2.4, 4.2
unit, task unit] result of an operation 4.10; 4.5
Universal expression 4.10 UNLOCK (DEC Ada input-output
assigned 5.2 procedure)
in an attribute designator 4.1.4 in an instance of indexed_io
of a real type implicitly converted 14.2a.4, 14.2a.5
4.5.7 in an instance of relative_io
that is static 4.10 14.2a.2, 14.2a.3
Universal type 4.10 in indexed_mixed_io 14.2b.9,
[see also: conversion, implicit 14.2b.10
conversion] in relative_mixed_io 14.2b.7,
expression [see: expression, 14.2b.8
numeric literal] UNSIGNED_BYTE (DEC Ada predefined
of a named number 3.2.2; 3.2 type)
result of an attribute [see: [see: system.unsigned_byte]
attribute]
UNSIGNED_BYTE_ARRAY (DEC Ada
UNIVERSAL_FIXED (predefined type) predefined type)
3.5.9 [see: system.unsigned_byte_array]
result of fixed point multiplying
operators 4.5.5 UNSIGNED_LONGWORD (DEC Ada
predefined type)
UNIVERSAL_INTEGER (predefined [see: system.unsigned_longword]
type) 3.5.4, 4.10; C
[see also: integer literal] UNSIGNED_LONGWORD_ARRAY
argument of a conversion 3.3.3, (DEC Ada predefined type)
4.6 [see: system.unsigned_longword_
attribute 3.5.5, 13.7.1, 13.7.2, array]
13.7.3; 9.9
bounds of a discrete range 3.6.1 UNSIGNED_QUADWORD (DEC Ada
bounds of a loop parameter 5.5 predefined type)
codes representing enumeration [see: system.unsigned_quadword]
type values 13.3 UNSIGNED_QUADWORD_ARRAY
converted to an integer type 3.5.5 (DEC Ada predefined type)
of integer literals 2.4, 4.2 [see: system.unsigned_quadword_
result of an operation 4.10; 4.5 array]
UNIVERSAL_REAL (predefined type) UNSIGNED_WORD (DEC Ada
3.5.6, 4.10 predefined type)
[see also: real literal] [see: system.unsigned_word]
argument of a conversion 3.3.3,
4.6
attribute 13.7.1
Index–77
UNSIGNED_WORD_ARRAY (DEC Ada
predefined type) VAL (predefined attribute) 3.5.5; A
[see: system.unsigned_word_array]
Value
UPDATE (DEC Ada input-output [see: assignment, evaluation,
procedure) expression, initial value, returned
in an instance of indexed_io value, subtype , task designated . . . ,
14.2a.4, 14.2a.5 type]
in an instance of relative_io in a constant 3.2.1; 3.2
14.2a.2, 14.2a.3 in a task object 9.2
in indexed_mixed_io 14.2b.9, in a variable 3.2.1, 5.2; 3.2
14.2b.10 of an access type [see: object
in relative_mixed_io 14.2b.7, designated, task object
14.2b.8 designated]
of an array type 3.6; 3.6.1 [see
Updating the value of an object 6.2 also: array, slice]
Upper bound of a based literal 2.4.2
[see: bound, last attribute] of a boolean type 3.5.3
of a character literal 2.5
Upper case letter 2.1 of a character type 3.5.2; 2.5, 2.6
[see also: basic graphic character] of a decimal literal 2.4.1
A to F in a based literal 2.4.2 of a fixed point type 3.5.9, 4.5.7
E in a decimal literal 2.4.1 of a floating point type 3.5.7, 4.5.7
in an identifier 2.3 of a record type 3.7
of a record type with
Urgency of a task
discriminants 3.7.1
[see: task priority]
of a string literal 2.6; 2.10
Use clause (to achieve direct visibility) of a task type [see: task
8.4; 8.3, D designated]
[see also: context clause] returned by a function call [see:
as a basic declarative item 3.9 returned value]
as a later declarative item 3.9
VALUE (predefined attribute) 3.5.5; A
in a code procedure body 13.8
in a context clause of a Value parameter passing mechanism
compilation unit 10.1.1 13.9a.1.4
in a context clause of a subunit
10.2 Variable 3.2.1; D
inserted by the environment 10.4 [see also: object, shared variable]
as an actual parameter 6.2
USE_ERROR (input-output exception) declared in a package body 7.3
14.4; 14.2.1, 14.2.3, 14.2.5, 14.3.3, 14.3.10, formal parameter 6.2
14.5, 14.2a.2, 14.2a.3, 14.2a.4, 14.2a.5, in an assignment statement 5.2
14.2b.4, 14.2b.6, 14.2b.7, 14.2b.8, 14.2b.9, of an array type as destination of
14.2b.10 an assignment 5.2.1
of a private type 7.4.1
renamed 8.5
that is a slice 4.1.2
Index–78
Variable declaration 3.2.1 of declarations in a package body
7.3
Variant 3.7.3; 4.1.3 of declarations in a package
[see also: component clause, record specification 7.2
type] of declarations in the package
in a variant part 3.7.3 system 13.7
Variant part 3.7.3; D within a subunit 10.2
[see also: dependence on a Visibility by selection 8.3
discriminant] [see also: basic operation, character
in a component list 3.7 literal, operation, operator symbol,
in a record aggregate 4.3.1 selected component]
Vertical bar character 2.1 Visible part (of a package) 7.2; 3.2.1, 7.4,
replacement by exclamation 7.4.1, 7.4.3, D
character 2.10 [see also: deferred constant
Vertical bar delimiter 2.2 declaration, private type declaration]
expanded name denoting a
Vertical tabulation format effector 2.1 declaration in a visible part 8.2
scope of a declaration in a visible
Violation of a constraint
part 4.1.3
[see: constraint_error exception]
use clause naming the package
Visibility 8.3; 8.2, D 8.4
[see also: direct visibility, hiding, visibility of a declaration in a
identifier, name, operation, visible part 8.3
overloading]
VOLATILE (DEC Ada predefined
and renaming 8.5
pragma) 9.11; B
determining multiple meanings of
an identifier 8.4, 8.7; 8.5
determining order of compilation
10.3
due to a use clause 8.4
of a basic operation 8.3
of a character literal 8.3 Wait
of a default for a generic formal [see: selective wait, task suspension]
subprogram 12.3.6
of a generic formal parameter While loop
12.3 [see: loop statement]
of a library unit due to a with WIDTH (predefined attribute) 3.5.5; A
clause 8.6, 10.1.1
of a name of an exception 11.2 With clause 10.1.1; D
of an operation declared in a [see also: context clause]
package 7.4.2 determining order of compilation
of an operator symbol 8.3 10.3
of a renaming declaration 8.5 determining the implicit order of
of a subprogram declared in a library units 8.6
package 6.3
Index–79
in a context clause of a
compilation unit 10.1.1
in a context clause of a subunit
10.2
inserted by the environment 10.4
leading to direct visibility 8.3
WRITE (input-output procedure)
in an instance of direct_io 14.2.4;
14.1, 14.2, 14.2.5
in an instance of sequential_io
14.2.2; 14.1, 14.2, 14.2.3
in an instance of indexed_io
14.2a.4, 14.2a.5
in an instance of relative_io
14.2a.2, 14.2a.3
in direct_mixed_io 14.2b.5,
14.2b.6
in indexed_mixed_io 14.2b.9,
14.2b.10
in relative_mixed_io 14.2b.7,
14.2b.8
in sequential_mixed_io 14.2b.3,
14.2b.4
WRITE_REGISTER (DEC Ada
predefined procedure)
[see: system.write_register]
Writing to an output file 14.1, 14.2.2,
14.2.4
Xor operator
[see: logical operator]
Index–80
Postscript : Submission of Comments
Note
This postscript is not part of the standard definition of the Ada
programming language.
For submission of comments on the DEC Ada information (all material printed
in color), use the Reader’s Comments form at the back of the manual. For
reporting errors or problems encountered when using the DEC Ada software,
submit a Software Problem Report (SPR).
For submission of comments on the standard Ada reference manual (all
material printed in black), use the Arpanet address
Ada-Comment at ECLB
If you do not have Arpanet access, please send the comments on the standard
Ada reference manual by mail to
Ada Joint Program Office (AJPO)
Office of the Under Secretary of Defense Research and Engineering
Washington, DC 20301
United States of America
If you mail your comments, it will assist the AJPO if you can send them on
8-inch single-sided single-density IBM format diskettes—with an additional
paper copy, in case of problems with reading the diskettes.
All comments are sorted and processed mechanically, in order to simplify their
analysis and to facilitate giving them proper consideration. To aid this process,
please precede each comment with the three line header
!section . . .
!version 1983
!topic . . .
The section line should include the section number, the paragraph number
enclosed in parentheses, your name or affiliation (or both), and the date in ISO
standard form (year-month-day). The paragraph number is the one given in
the margin of the paper form of this document (it is not contained in the ECLB
files); paragraph numbers are optional, but very helpful. For example, here is
the section line of comment #1194 on a previous version:
!section 03.02.01(12)D.Taffs 82–04–26
The version line for comments on the current standard should contain only
‘‘!version 1983’’. The purpose of this line is to distinguish comments that refer
to different versions.
The topic line should contain a one line summary of the comment. This line is
essential, and you are kindly asked to avoid topics such as ‘‘Typo’’ or ‘‘Editorial
comment’’, which will not convey any information when printed in a table of
contents. As an example of an informative topic line consider:
!topic Subcomponents of constants are constants
Nothing prevents the topic line from including all the information of a
comment, as in the following topic line:
!topic Insert: ‘‘ . . . are {implicitly} defined by a subtype declaration’’
As a final example here is a complete comment received on a prior version of
this manual:
!section 03.02.01(12)D.Taffs 82–04–26
!version 10
!topic Subcomponents of constants are constants