DocAda(tm) is a productivity tool of KSCE

Prev | Up | Next | Back | Forward
About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News

4.8 Allocators

The evaluation of an allocator creates an object and yields an access value that designates the object.

Syntax

   
       allocator ::=
          new subtype_indication | new qualified_expression

Name Resolution Rules

The expected type for an allocator shall be a single access-to-object type whose designated type covers the type determined by the subtype_mark of the subtype_indication or qualified_expression.

Legality Rules

An initialized allocator is an allocator with a qualified_expression. An uninitialized allocator is one with a subtype_indication. In the subtype_indication of an uninitialized allocator, a constraint is permitted only if the subtype_mark denotes an unconstrained composite subtype; if there is no constraint, then the subtype_mark shall denote a definite subtype.

If the type of the allocator is an access-to-constant type, the allocator shall be an initialized allocator. If the designated type is limited, the allocator shall be an uninitialized allocator.

Static Semantics

If the designated type of the type of the allocator is elementary, then the subtype of the created object is the designated subtype. If the designated type is composite, then the created object is always constrained; if the designated subtype is constrained, then it provides the constraint of the created object; otherwise, the object is constrained by its initial value (even if the designated subtype is unconstrained with defaults).

Dynamic Semantics

For the evaluation of an allocator, the elaboration of the subtype_indication or the evaluation of the qualified_expression is performed first. For the evaluation of an initialized allocator, an object of the designated type is created and the value of the qualified_expression is converted to the designated subtype and assigned to the object.

For the evaluation of an uninitialized allocator:

If the created object contains any tasks, they are activated (see 9.2). Finally, an access value that designates the created object is returned.

Examples

Examples of allocators:

    
       new Cell'(0, null, null)                          -- initialized explicitly, see 3.10.1
       new Cell'(Value => 0, Succ => null, Pred => null) -- initialized explicitly
       new Cell                                          -- not initialized

       new Matrix(1 .. 10, 1 .. 20)                      -- the bounds only are given
       new Matrix'(1 .. 10 => (1 .. 20 => 0.0))          -- initialized explicitly

       new Buffer(100)                                   -- the discriminant only is given
       new Buffer'(Size => 80, Pos => 0, Value => (1 .. 80 => 'A')) -- initialized explicitly

       Expr_Ptr'(new Literal)                        -- allocator for access-to-class-wide type, see 3.9.1
       Expr_Ptr'(new Literal'(Expression with 3.5)) -- initialized explicitly

About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News
Prev | Up | Next | Back | Forward


Copyright © 1994-1997 by Kempe Software Capital Enterprises. All Rights Reserved. For comments on this DocAda(tm) hypertext document, please write to KSCE, at docada@ksce.com