DocAda(tm) is a productivity tool of KSCE

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

3.9.1 Type Extensions

Every type extension is a tagged type, and is either a record extension or a private extension of some other tagged type.

Syntax

   
       record_extension_part ::= with record_definition

Legality Rules

The parent type of a record extension shall not be a class-wide type. If the parent type is nonlimited, then each of the components of the record_extension_part shall be nonlimited. The accessibility level (see 3.10.2) of a record extension shall not be statically deeper than that of its parent type. In addition to the places where Legality Rules normally apply (see 12.3), these rules apply also in the private part of an instance of a generic unit.

A type extension shall not be declared in a generic body if the parent type is declared outside that body.

Dynamic Semantics

The elaboration of a record_extension_part consists of the elaboration of the record_definition.

Examples

Examples of record extensions (of types defined above in 3.9):

    
       type Painted_Point is new Point with
         record
           Paint : Color := White;
         end record;
           -- Components X and Y are inherited

       Origin : constant Painted_Point := (X | Y => 0.0, Paint => Black);

       type Literal is new Expression with
         record                 -- a leaf in an Expression tree
           Value : Real;
         end record;

       type Expr_Ptr is access all Expression'Class;
                                      -- see 3.10

       type Binary_Operation is new Expression with
         record                 -- an internal node in an Expression tree
           Left, Right : Expr_Ptr;
         end record;

       type Addition is new Binary_Operation with null record;
       type Subtraction is new Binary_Operation with null record;
         -- No additional components needed for these extensions

       Tree : Expr_Ptr :=         -- A tree representation of ``5.0 + (13.0-7.0)''
          new Addition'(
             Left  => new Literal'(Value => 5.0),
             Right => new Subtraction'(
                Left  => new Literal'(Value => 13.0),
                Right => new Literal'(Value => 7.0)));

About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News
____ | 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