|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T V
Length: 48748 (0xbe6c)
Types: TextFile
Names: »V«
└─⟦5829e5ed5⟧ Bits:30000534 8mm tape, Rational 1000, RCI 2_0_5
└─⟦c9a165082⟧ »DATA«
└─⟦c3895f76e⟧
└─⟦this⟧
with Simple_Status;
with Universal;
pragma Private_Eyes_Only;
with Eniversal;
package Semantic_Characteristics is
subtype Target_Id is Natural range 0 .. 256;
Invalid_Access : exception;
-- Get on something never built
-- Raised for access of nonexistant variant field
Target_Is_Registered : exception;
Target_Not_Initialized : exception;
package Text is
type Item is private;
function Build (S : String; For_Target : String) return Item;
function Get (T : Item) return String;
type List is array (Positive range <>) of Item;
private
type Item is access String;
pragma Segmented_Heap (Item);
end Text;
----------------------------------------------------------------------
-- Type checking
package Checking is
type Structural_Type_Kind is
(Access_Type, Array_Type, Enumeration_Type, Integer_Type,
Fixed_Point_Type, Floating_Point_Type, Formal_Discrete_Type,
Formal_Fixed_Type, Formal_Float_Type, Formal_Integer_Type,
Record_Type, Task_Type, Universal_Integer_Type,
Universal_Fixed_Type, Universal_Real_Type);
type Type_Restriction_Kind is
(No_Subtypes, No_Private_Types,
No_Limited_Private_Types, No_Derived_Types);
-- Future ideas: Constraints, discrims, dif decl parts,
-- ambiguous names, etc.
type Structural_Type_Array is array (Structural_Type_Kind) of Boolean;
All_Structural_Types :
constant Structural_Type_Array := (others => True);
No_Structural_Types : constant Structural_Type_Array :=
(others => False);
type Type_Restriction_Array is array (Type_Restriction_Kind) of Boolean;
All_Type_Restrictions :
constant Type_Restriction_Array := (others => True);
No_Type_Restrictions :
constant Type_Restriction_Array := (others => False);
subtype Type_Name is String;
-- For universal_integer use "universal_integer", not
-- "Standard.universal_integer" or anything else.
subtype Type_Name_Array is Text.List;
No_Type_Names : Type_Name_Array (1 .. 0);
subtype Pragma_Array is Text.List;
No_Pragmas : Pragma_Array (1 .. 0);
----------
type Type_Set is private;
-- A type_set describes the valid type names for a given
-- argument.
-- eg. In the statement 'pragma foo (<bar>);', where <bar>
-- names a type, a type_set would be used in the description of
-- pragma 'foo' to describe what kind of type <bar> can be.
-- Type_sets are NOT used to represent the types of expressions.
-- Type sets consist of the following.
--
-- Enforced_Type_Restrictions:
-- Miscellaneous restrictions about non-structural
-- aspects of the type.
--
-- Valid_Structural_Types:
-- Which general structural categories are allowed.
-- (Record, array, Access, etc).
-- This is ignored if the type under consideration matches
-- one of the 'Valid_Textual_Types'.
--
-- Valid_Textual_Types:
-- A list of the names of SPECIFIC types that are allowed for
-- an argument. eg "Integer", "System.Address",
-- "Text_Io.Count". Only types from predefined units are
-- allowed. Visibility to package Standard is implicit so
-- it is not necessary to say "Standard.Character" as
-- "Character" will suffice.
-- Note that Enforced_type_restrictions must hold when the type
-- under consideration is derived in some manner from one
-- of the Valid_Textual_Types, but do not apply to the textual
-- type itself.
-- eg. if the 'no_derived_types' restriction is present,
-- and "System.Address" is a valid_textual_type, then
-- type T is new System.Address;
-- pragma Foo (T);
-- is rejected, but
-- pragma Foo (System.Address);
-- and
-- subtype T is System.Address;
-- pragma Foo (T);
-- are not, REGARDLESS of whether System.Address is
-- a derived type.
--
-- Required_Pragmas and Prohibited_Pragmas are pragmas that must or
-- must not be applied to the type under consideration to make it
-- legal. Again, this check is not made on any of the
-- 'Valid_Textual_Types' or its ancestors.
function Null_Type_Set return Type_Set;
-- A null type_set means no types are allowed
function Is_Null (The_Type_Set : Type_Set) return Boolean;
function Build (Enforced_Type_Restrictions : Type_Restriction_Array;
Valid_Structural_Types : Structural_Type_Array;
Valid_Textual_Types : Type_Name_Array :=
Checking.No_Type_Names;
Required_Pragmas : Pragma_Array := Checking.No_Pragmas;
Prohibited_Pragmas : Pragma_Array :=
Checking.No_Pragmas;
For_Target : String) return Type_Set;
function Get_Enforced_Type_Restrictions
(The_Type_Set : Type_Set) return Type_Restriction_Array;
function Get_Valid_Structural_Types
(The_Type_Set : Type_Set) return Structural_Type_Array;
function Get_Valid_Textual_Types
(The_Type_Set : Type_Set) return Type_Name_Array;
function Get_Required_Pragmas
(The_Type_Set : Type_Set) return Pragma_Array;
function Get_Prohibited_Pragmas
(The_Type_Set : Type_Set) return Pragma_Array;
----------------------------------------------------------------------
-- expressions
type Expression_Form is (Integer_Form, Real_Form, Other_Form);
----------------------------------------------------------------------
-- expression description
----------
type Range_Data is private;
-- Range_data is for scalar expressions that must be static and must
-- lie within known bounds.
-- Expressions that can be non-static or are not scalar base types
-- should use build_no_range.
--
function Build_Integer_Range
(Lo, Hi : Universal.Integer; For_Target : String)
return Range_Data;
function Build_Real_Range
(Lo, Hi : Universal.Float; For_Target : String)
return Range_Data;
function Build_No_Range (For_Target : String) return Range_Data;
function Get_Expression_Form
(The_Range_Data : Range_Data) return Expression_Form;
function Get_Integer_Lo (The_Range_Data : Range_Data)
return Universal.Integer;
function Get_Integer_Hi (The_Range_Data : Range_Data)
return Universal.Integer;
function Get_Real_Lo (The_Range_Data : Range_Data)
return Universal.Float;
function Get_Real_Hi (The_Range_Data : Range_Data)
return Universal.Float;
----------
type Range_Constraint is private;
function Is_Null
(The_Range_Constraint : Range_Constraint) return Boolean;
function Build_With_Static_Range
(The_Range_Data : Range_Data; For_Target : String)
return Range_Constraint;
function Null_Constraint (For_Target : String) return Range_Constraint;
-- A null range_constraint is just a range built with build_no_range.
-- Use for non-scalar or non-static expressions.
function Get_Must_Be_Static
(The_Range_Constraint : Range_Constraint) return Boolean;
function Get_Range_Data
(The_Range_Constraint : Range_Constraint) return Range_Data;
----------
type Expression is private;
-- An abstract expression represents an set of valid ada expressions.
-- The components consist of the type of the expression and a
-- constraint if any. If expression is static and violates the
-- bounds of the expression type itself, a warning will be produced
-- regardless of the presence or absence of the 'constraint'
-- component.
-- A null expression does not mean no expressions are allowed, it
-- means that no information is available about the set of allowed
-- expressions and thus ALL expressions are allowed.
function Null_Expression return Expression;
function Is_Null (The_Expression : Expression) return Boolean;
function Build (Expression_Type : Type_Name;
Constraint : Range_Constraint;
For_Target : String) return Expression;
function Get_Expression_Type
(The_Expression : Expression) return Type_Name;
function Get_Constraint (The_Expression : Expression)
return Range_Constraint;
----------------------------------------------------------------------
-- Identifiers
subtype Identifier_Array is Text.List;
No_Identifiers : Identifier_Array (1 .. 0);
All_Special_Identifiers : Identifier_Array (1 .. -1);
----------------------------------------------------------------------
-- Object checking
type Object_Kind is (Constant_Kind, Discriminant, In_Out_Parameter,
In_Parameter, Iteration_Variable,
Named_Number, Out_Parameter, Variable);
type Miscellaneous_Name_Kind is
(Function_Kind, Package_Kind, Procedure_Kind, Task_Kind,
Entry_Kind, Exception_Kind, Enumeration_Literal_Kind,
Record_Component_Kind, Generic_Package_Kind, Generic_Procedure_Kind,
Generic_Function_Kind, Generic_Formal_Procedure,
Generic_Formal_Function, Label_Kind, Named_Statement_Kind);
type Object_Kind_Array is array (Object_Kind) of Boolean;
No_Object_Kinds : constant Object_Kind_Array := (others => False);
All_Object_Kinds : constant Object_Kind_Array := (others => True);
type Miscellaneous_Name_Kind_Array is
array (Miscellaneous_Name_Kind) of Boolean;
No_Miscellaneous_Name_Kinds :
constant Miscellaneous_Name_Kind_Array := (others => False);
All_Miscellaneous_Name_Kinds :
constant Miscellaneous_Name_Kind_Array := (others => True);
----------
type Object_Set is private;
-- An object_set describes the allowed ada object names for a given
-- argument. Object_sets are NOT used to describe expressions, even
-- though objects can be expressions.
-- The components of an object_set are the following:
-- Valid_Kinds:
-- What forms of objects are allowed,
-- (Constants, Named_Numbers, out parameters, etc.)
-- Allowed_Types
-- Which types can the object have.
-- Required and Prohibited Pragmas
-- Which pragmas must or must not be applied to the object.
--
function Null_Object_Set return Object_Set;
-- A null object_set means no objects are allowed
function Is_Null (The_Object_Set : Object_Set) return Boolean;
function Build (Valid_Kinds : Object_Kind_Array;
Allowed_Types : Type_Set;
Required_Pragmas : Pragma_Array := Checking.No_Pragmas;
Prohibited_Pragmas : Pragma_Array :=
Checking.No_Pragmas;
For_Target : String) return Object_Set;
function Get_Valid_Kinds (The_Object_Set : Object_Set)
return Object_Kind_Array;
function Get_Allowed_Types
(The_Object_Set : Object_Set) return Type_Set;
function Get_Required_Pragmas
(The_Object_Set : Object_Set) return Pragma_Array;
function Get_Prohibited_Pragmas
(The_Object_Set : Object_Set) return Pragma_Array;
----------
type Miscellaneous_Name_Set is private;
-- Miscellaneous_Name_Sets are used to describe ada names other than
-- types or objects. (Such as functions, exceptions, and generics).
-- Note that since enumeration_literals, functions, procedures,
-- and entries can be overloaded, some miscellaneous names are
-- ambiguous. The ambiguity_allowed component of a miscellaneous_
-- name_set denotes whether an ambiguous name can be used for the
-- given argument.
function Null_Miscellaneous_Name_Set return Miscellaneous_Name_Set;
-- A null miscellaneous_name_set means no miscellaneous names are
-- allowed.
function Is_Null (The_Miscellaneous_Name_Set : Miscellaneous_Name_Set)
return Boolean;
function Build (Valid_Kinds : Miscellaneous_Name_Kind_Array;
Ambiguity_Allowed : Boolean := True;
Required_Pragmas : Pragma_Array := Checking.No_Pragmas;
Prohibited_Pragmas : Pragma_Array :=
Checking.No_Pragmas;
For_Target : String) return Miscellaneous_Name_Set;
function Ambiguity_Allowed
(The_Miscellaneous_Name_Set : Miscellaneous_Name_Set)
return Boolean;
function Get_Valid_Kinds
(The_Miscellaneous_Name_Set : Miscellaneous_Name_Set)
return Miscellaneous_Name_Kind_Array;
function Get_Required_Pragmas
(The_Miscellaneous_Name_Set : Miscellaneous_Name_Set)
return Pragma_Array;
function Get_Prohibited_Pragmas
(The_Miscellaneous_Name_Set : Miscellaneous_Name_Set)
return Pragma_Array;
private
type Pragma_Array_Ptr is access Pragma_Array;
pragma Segmented_Heap (Pragma_Array_Ptr);
type Type_Name_Array_Ptr is access Type_Name_Array;
pragma Segmented_Heap (Type_Name_Array_Ptr);
type Range_Data_Record (Form : Expression_Form :=
Checking.Other_Form) is
record
case Form is
when Integer_Form =>
Integer_Lo : Universal.Integer;
Integer_Hi : Universal.Integer;
when Real_Form =>
Real_Lo : Universal.Float;
Real_Hi : Universal.Float;
when Other_Form =>
null;
end case;
end record;
type Range_Data is access Range_Data_Record;
pragma Segmented_Heap (Range_Data);
type Range_Constraint_Record
(Must_Be_Static : Boolean := False) is
record
case Must_Be_Static is
when True =>
The_Range_Data : Range_Data;
when False =>
null;
end case;
end record;
type Range_Constraint is access Range_Constraint_Record;
pragma Segmented_Heap (Range_Constraint);
type Object_Set_Record is
record
Valid_Kinds : Object_Kind_Array;
Allowed_Types : Type_Set;
Required_Pragmas : Pragma_Array_Ptr;
Prohibited_Pragmas : Pragma_Array_Ptr;
end record;
type Object_Set is access Object_Set_Record;
pragma Segmented_Heap (Object_Set);
type Miscellaneous_Name_Set_Record is
record
Miscellaneous_Name_Kinds : Miscellaneous_Name_Kind_Array;
Ambiguity_Allowed : Boolean;
Required_Pragmas : Pragma_Array_Ptr;
Prohibited_Pragmas : Pragma_Array_Ptr;
end record;
type Miscellaneous_Name_Set is access Miscellaneous_Name_Set_Record;
pragma Segmented_Heap (Miscellaneous_Name_Set);
type Type_Set_Record is
record
Enforced_Type_Restrictions : Type_Restriction_Array;
Valid_Structural_Types : Structural_Type_Array;
Valid_Textual_Types : Type_Name_Array_Ptr;
Required_Pragmas : Pragma_Array_Ptr;
Prohibited_Pragmas : Pragma_Array_Ptr;
end record;
type Type_Set is access Type_Set_Record;
pragma Segmented_Heap (Type_Set);
type Expression_Record is
record
Expression_Type : Text.Item;
Constraint : Range_Constraint;
end record;
type Expression is access Expression_Record;
pragma Segmented_Heap (Expression);
end Checking;
----------------------------------------------------------------------
package Predefined_Environment_Characteristics is
----------
type Universal_Real is private;
type Integer_Type_Descriptor is private;
function Is_Null (The_Integer_Type_Descriptor : Integer_Type_Descriptor)
return Boolean;
function Build (Name : String;
Size : Natural;
Lo_Bound : Universal.Integer;
Hi_Bound : Universal.Integer;
For_Target : String) return Integer_Type_Descriptor;
-- Size is measured in bits.
function Get_Name (The_Integer : Integer_Type_Descriptor) return String;
function Get_Size
(The_Integer : Integer_Type_Descriptor) return Natural;
function Get_Lo_Bound (The_Integer : Integer_Type_Descriptor)
return Universal.Integer;
function Get_Hi_Bound (The_Integer : Integer_Type_Descriptor)
return Universal.Integer;
type Integer_Type_Array is
array (Positive range <>) of Integer_Type_Descriptor;
----------
type Float_Type_Descriptor is private;
function Is_Null (The_Float_Type_Descriptor : Float_Type_Descriptor)
return Boolean;
function Build (Name : String;
Digitz : Positive;
Size : Positive;
Lo_Bound : Universal.Real;
Hi_Bound : Universal.Real;
-- The following fields need only be accurately
-- set if the user expects the corresponding
-- LRM attributes for the given float type to be
-- used in expressions that are required to be static.
Safe_Emax : Integer := 0;
Machine_Emax : Integer := 0;
Machine_Emin : Integer := 0;
Machine_Radix : Positive := 1;
Machine_Mantissa : Positive := 1;
Machine_Rounds : Boolean := True;
Machine_Overflows : Boolean := True;
For_Target : String) return Float_Type_Descriptor;
-- Size is measured in bits.
function Get_Name (The_Float : Float_Type_Descriptor) return String;
function Get_Digits (The_Float : Float_Type_Descriptor) return Positive;
function Get_Size (The_Float : Float_Type_Descriptor) return Positive;
function Get_Lo_Bound (The_Float : Float_Type_Descriptor)
return Universal.Real;
function Get_Hi_Bound (The_Float : Float_Type_Descriptor)
return Universal.Real;
function Get_Safe_Emax
(The_Float : Float_Type_Descriptor) return Integer;
function Get_Machine_Emax
(The_Float : Float_Type_Descriptor) return Integer;
function Get_Machine_Emin
(The_Float : Float_Type_Descriptor) return Integer;
function Get_Machine_Radix
(The_Float : Float_Type_Descriptor) return Positive;
function Get_Machine_Mantissa
(The_Float : Float_Type_Descriptor) return Positive;
function Get_Machine_Rounds
(The_Float : Float_Type_Descriptor) return Boolean;
function Get_Machine_Overflows
(The_Float : Float_Type_Descriptor) return Boolean;
type Float_Type_Array is
array (Positive range <>) of Float_Type_Descriptor;
----------
type Fixed_Type_Descriptor is private;
function Is_Null (The_Fixed_Type_Descriptor : Fixed_Type_Descriptor)
return Boolean;
function Build (Name : String;
Size : Positive;
Scale : Integer;
Lo_Bound : Universal.Real;
Hi_Bound : Universal.Real;
For_Target : String) return Fixed_Type_Descriptor;
-- *NOTE* Duration is the only fixed_point type that should appear
-- in package Standard.
-- Size is measured in bits.
-- Scale is outdated and can be set to zero.
function Get_Name (The_Fixed : Fixed_Type_Descriptor) return String;
function Get_Size (The_Fixed : Fixed_Type_Descriptor) return Positive;
function Get_Scale (The_Fixed : Fixed_Type_Descriptor) return Integer;
function Get_Lo_Bound (The_Fixed : Fixed_Type_Descriptor)
return Universal.Real;
function Get_Hi_Bound (The_Fixed : Fixed_Type_Descriptor)
return Universal.Real;
type Fixed_Type_Array is
array (Positive range <>) of Fixed_Type_Descriptor;
Dynamic_Size : constant Integer := -1;
subtype Bits is Integer range Dynamic_Size .. Integer'Last;
subtype Scalar_Bits is Bits range 0 .. 256;
----------
type Object is private;
function Null_Object return Object;
function Is_Null (The_Object : Object) return Boolean;
function Build (Standard_Version : Integer;
Integer_Types : Integer_Type_Array;
Float_Types : Float_Type_Array;
Duration_Type : Fixed_Type_Descriptor;
For_Target : String) return Object;
-- Types should appear in increasing size order in their corresponding
-- arrays.
Build_Failed : exception;
procedure Check (Standard_Version : Integer;
Integer_Types : Integer_Type_Array;
Float_Types : Float_Type_Array;
Duration_Type : Fixed_Type_Descriptor;
Status : in out Simple_Status.Condition);
procedure Display (The_Object : Object);
function Get_Standard_Version (The_Object : Object) return Integer;
function Get_Integer_Types
(The_Object : Object) return Integer_Type_Array;
function Get_Float_Types (The_Object : Object) return Float_Type_Array;
function Get_Duration (The_Object : Object)
return Fixed_Type_Descriptor;
private
type Real_Node is new Eniversal.Real;
type Universal_Real is access Real_Node;
pragma Segmented_Heap (Universal_Real);
type Integer_Type_Descriptor_Record is
record
Name : Text.Item;
Size : Natural;
Lo_Bound : Universal.Integer;
Hi_Bound : Universal.Integer;
end record;
type Integer_Type_Descriptor is access Integer_Type_Descriptor_Record;
pragma Segmented_Heap (Integer_Type_Descriptor);
type Float_Type_Descriptor_Record is
record
Name : Text.Item;
Digitz : Positive;
Size : Positive;
Lo_Bound : Universal_Real;
Hi_Bound : Universal_Real;
Safe_Emax : Integer;
Machine_Emax : Integer;
Machine_Emin : Integer;
Machine_Radix : Positive;
Machine_Mantissa : Positive;
Machine_Rounds : Boolean;
Machine_Overflows : Boolean;
end record;
type Float_Type_Descriptor is access Float_Type_Descriptor_Record;
pragma Segmented_Heap (Float_Type_Descriptor);
type Fixed_Type_Descriptor_Record is
record
Name : Text.Item;
Size : Positive;
Scale : Integer;
Lo_Bound : Universal_Real;
Hi_Bound : Universal_Real;
end record;
type Fixed_Type_Descriptor is access Fixed_Type_Descriptor_Record;
pragma Segmented_Heap (Fixed_Type_Descriptor);
type Integer_Type_Array_Ptr is access Integer_Type_Array;
pragma Segmented_Heap (Integer_Type_Array_Ptr);
type Float_Type_Array_Ptr is access Float_Type_Array;
pragma Segmented_Heap (Float_Type_Array_Ptr);
type Fixed_Type_Array_Ptr is access Fixed_Type_Array;
pragma Segmented_Heap (Fixed_Type_Array_Ptr);
type Object_Record is
record
Standard_Version : Integer;
Integer_Types : Integer_Type_Array_Ptr;
Float_Types : Float_Type_Array_Ptr;
Duration_Type : Fixed_Type_Descriptor;
end record;
type Object is access Object_Record;
pragma Segmented_Heap (Object);
end Predefined_Environment_Characteristics;
---------------------------------------------------------------------
package Pragma_Characteristics is
package Pragmas renames Pragma_Characteristics;
-- The absence or presence of impl-defined pragmas cannot alter the
-- legality of text outside the the pragma. (LRM 2.8)
-- An argument to a pragma can either be a name or an expression (LRM 2.8)
-- Names appearing as pragma args can only be a name visible at the
-- place of the pragma or an identifier specific to the pragma.
type Ada_Pragma is (Controlled_Pragma, Elaborate_Pragma, Inline_Pragma,
Interface_Pragma, List_Pragma, Memory_Size_Pragma,
Optimize_Pragma, Pack_Pragma, Page_Pragma,
Priority_Pragma, Shared_Pragma, Storage_Unit_Pragma,
Suppress_Pragma, System_Name_Pragma);
type Location_Kind is (Context_Clause, Comp_Unit,
Statement, Declaration, Task_Spec);
type Ada_Pragma_Array is array (Ada_Pragma) of Boolean;
No_Ada_Pragmas : constant Ada_Pragma_Array := (others => False);
All_Ada_Pragmas : constant Ada_Pragma_Array := (others => True);
type Location_Array is array (Location_Kind) of Boolean;
No_Locations : constant Location_Array := (others => False);
All_Locations : constant Location_Array := (others => True);
----------
type Argument is private;
-- A pragma Argument. Arguments are broken down into two kinds,
-- NAME Arguments and EXPRESSION arguments.
-- NAME Arguments are for those arguments that are important for
-- their identity rather than their value. They are what ada
-- defines as 'Names'.
-- The ada pragmas Pack, Elaborate, and Inline each have one
-- Name Argument.
-- EXPRESSION arguments are values.
-- The ada pragmas Memory_Size, Storage_Unit, and Priority each
-- have one Expression Argument.
-- Some pragma arguments, such as the arguments to pragmas Optimize
-- and List, can be pragma-dependent identifiers that appear nowhere
-- else in the program. "Special Identifier" arguments are considered
-- NAME Arguments.
-- Object identifiers and function identifiers can represent both
-- Names and Expressions. It is important to determine whether the
-- VALUE or the IDENTITY of the entity is utilized by the pragma.
-- A pragma will be 'applied' to all entities supplied as Name
-- Arguments of that pragma. This may be relevent if the
-- pragma shows up somewhere as a 'Required' or 'Prohibited' pragma.
function Is_Null (The_Argument : Argument) return Boolean;
-- A null argument means semantics should assume nothing about the
-- argument and allow anything to be placed in that slot.
function Build_Name_Argument
(Name : String;
Valid_Objects : Checking.Object_Set :=
Checking.Null_Object_Set;
Valid_Miscellaneous_Names :
Checking.Miscellaneous_Name_Set :=
Checking.Null_Miscellaneous_Name_Set;
Valid_Types : Checking.Type_Set := Checking.Null_Type_Set;
Valid_Special_Identifiers : Checking.Identifier_Array :=
Checking.No_Identifiers;
For_Target : String) return Argument;
function Build_Expression_Argument
(Name : String;
Valid_Expressions : Checking.Expression;
For_Target : String) return Argument;
function Get_Name (The_Argument : Argument) return String;
function Is_Name_Argument (The_Argument : Argument) return Boolean;
function Get_Valid_Objects (The_Argument : Argument)
return Checking.Object_Set;
function Get_Valid_Miscellaneous_Names
(The_Argument : Argument)
return Checking.Miscellaneous_Name_Set;
function Get_Valid_Types (The_Argument : Argument)
return Checking.Type_Set;
function Get_Valid_Special_Identifiers
(The_Argument : Argument) return Checking.Identifier_Array;
function Get_Valid_Expressions
(The_Argument : Argument) return Checking.Expression;
type Argument_Array is array (Positive range <>) of Argument;
function No_Arguments return Argument_Array;
----------
type Target_Pragma is private;
-- Target_Pragmas repesent pragmas defined by the target compiler.
-- The Valid_Locations are where in a program the pragma is
-- allowed. (The Pragma_Locations type is obtained from
-- the allowed locations of Ada pragmas).
-- The last_required_argument field should equal the number
-- of arguments a pragma has, unless some are optional. Only
-- arguments at the end of the list are allowed to be optional.
function Is_Null (The_Target_Pragma : Target_Pragma) return Boolean;
function Build (Name : String;
Valid_Locations : Location_Array;
Arguments : Argument_Array;
Last_Required_Argument : Natural;
For_Target : String) return Target_Pragma;
function Get_Name (The_Target_Pragma : Target_Pragma) return String;
function Get_Valid_Locations
(The_Target_Pragma : Target_Pragma) return Location_Array;
function Get_Arguments
(The_Target_Pragma : Target_Pragma) return Argument_Array;
function Get_Last_Required_Argument
(The_Target_Pragma : Target_Pragma) return Natural;
type Target_Pragma_Array is array (Positive range <>) of Target_Pragma;
function No_Target_Pragmas return Target_Pragma_Array;
----------
type Object is private;
function Null_Object return Object;
function Is_Null (The_Object : Object) return Boolean;
function Build (Supported_Ada_Pragmas : Ada_Pragma_Array;
Target_Pragmas : Target_Pragma_Array :=
Pragmas.No_Target_Pragmas;
Interface_Languages : Checking.Identifier_Array :=
Checking.No_Identifiers;
For_Target : String) return Object;
-- Interface_Languages is the set of languages allowed in usages of
-- pragma Interface.
Build_Failed : exception;
procedure Check (Supported_Ada_Pragmas : Ada_Pragma_Array;
Target_Pragmas : Target_Pragma_Array;
Status : in out Simple_Status.Condition);
procedure Display (The_Object : Object);
function Get_Supported_Ada_Pragmas
(The_Object : Object) return Ada_Pragma_Array;
function Get_Target_Pragmas
(The_Object : Object) return Target_Pragma_Array;
function Get_Interface_Languages (The_Object : Object)
return Checking.Identifier_Array;
private
type Identifier_Array_Ptr is access Checking.Identifier_Array;
pragma Segmented_Heap (Identifier_Array_Ptr);
type Argument_Record (Is_Name : Boolean := True) is
record
Name : Text.Item;
case Is_Name is
when True =>
Valid_Objects : Checking.Object_Set;
Valid_Miscellaneous_Names :
Checking.Miscellaneous_Name_Set;
Valid_Types : Checking.Type_Set;
Valid_Special_Identifiers : Identifier_Array_Ptr;
when False =>
Valid_Expressions : Checking.Expression;
end case;
end record;
type Argument is access Argument_Record;
pragma Segmented_Heap (Argument);
type Argument_Array_Ptr is access Argument_Array;
pragma Segmented_Heap (Argument_Array_Ptr);
type Target_Pragma_Record is
record
Name : Text.Item;
Valid_Locations : Location_Array;
Arguments : Argument_Array_Ptr;
Last_Required_Argument : Natural;
end record;
type Target_Pragma is access Target_Pragma_Record;
pragma Segmented_Heap (Target_Pragma);
type Target_Pragma_Array_Ptr is access Target_Pragma_Array;
pragma Segmented_Heap (Target_Pragma_Array_Ptr);
type Object_Record is
record
Supported_Ada_Pragmas : Ada_Pragma_Array;
Target_Pragmas : Target_Pragma_Array_Ptr;
Interface_Languages : Identifier_Array_Ptr;
end record;
type Object is access Object_Record;
pragma Segmented_Heap (Object);
end Pragma_Characteristics;
----------------------------------------------------------------------
-- Attributes
package Attribute_Characteristics is
package Attributes renames Attribute_Characteristics;
-- Attributes can be:
-- a basic operation returning a value
-- a function
-- a type
-- a range
-- (LRM 4.1.4)
type Result_Kind is (Value_Result, Type_Result, Range_Result);
----------
type Prefix is private;
-- A Prefix represents the prefix of a target defined attribute.
-- eg. 'Foo' in
-- X := Foo'Bar (4);
-- The customizer must specify the kinds of ada names that can appear
-- as a prefix for each attribute.
function Is_Null (The_Prefix : Prefix) return Boolean;
-- A null prefix means that semantics should place no restrictions
-- on a prefix for the given attribute.
function Build (Valid_Objects : Checking.Object_Set :=
Checking.Null_Object_Set;
Valid_Miscellaneous_Names :
Checking.Miscellaneous_Name_Set :=
Checking.Null_Miscellaneous_Name_Set;
Valid_Types : Checking.Type_Set :=
Checking.Null_Type_Set;
For_Target : String) return Prefix;
function Get_Valid_Objects (The_Prefix : Prefix)
return Checking.Object_Set;
function Get_Valid_Miscellaneous_Names
(The_Prefix : Prefix) return Checking.
Miscellaneous_Name_Set;
function Get_Valid_Types (The_Prefix : Prefix) return Checking.Type_Set;
----------
type Result is private;
-- A Result represents the result of a target-defined attribute.
-- Some attributes return ranges, some return types, and most return
-- single values. R1000 semantics does not fully support target
-- attributes with range or type results at this time.
function Is_Null (The_Result : Result) return Boolean;
function Prefix_Value (For_Target : String) return Result;
function Prefix_Range (For_Target : String) return Result;
function Build_With_Value_Result
(Type_Name : String; For_Target : String) return Result;
function Build_With_Range_Result
(Type_Name : String; For_Target : String) return Result;
function Build_With_Type_Result (For_Target : String) return Result;
function Get_Result_Kind (The_Result : Result) return Result_Kind;
function Is_Prefix_Type (The_Result : Result) return Boolean;
function Get_Name (The_Result : Result) return String;
----------
type Designator is private;
-- Ada defines the Designator of an attribute expression such as
-- "Foo'Bar (Baz)" to be the attribute name and the optional parameter
-- (In this case, "Bar (Baz)". However, the Rcf makes the
-- attribute name a separate component of an abstract attribute, so a
-- Designator represents only the parameter.
function Null_Designator return Designator;
function Is_Null (The_Designator : Designator) return Boolean;
-- Null designator implies no parameter.
function Prefix_Designator (For_Target : String) return Designator;
-- A "Prefix" designator means the parameter type is the type of
-- the prefix. If the prefix is not a type, it is illegal to declare
-- a prefix_designator.
function Build (Function_Parameter : Checking.Expression;
For_Target : String) return Designator;
function Is_Prefix_Type (The_Designator : Designator) return Boolean;
function Get_Function_Parameter
(The_Designator : Designator) return Checking.Expression;
----------
type Attribute is private;
function Is_Null (The_Attribute : Attribute) return Boolean;
function Build (The_Name : String;
The_Prefix : Prefix;
The_Result : Result;
The_Designator : Designator :=
Attributes.Null_Designator;
For_Target : String) return Attribute;
function Get_Name (The_Attribute : Attribute) return String;
function Get_Prefix (The_Attribute : Attribute) return Prefix;
function Get_Result (The_Attribute : Attribute) return Result;
function Get_Designator (The_Attribute : Attribute) return Designator;
type Attribute_Array is array (Positive range <>) of Attribute;
function No_Attributes return Attribute_Array;
----------
type Object is private;
function Null_Object return Object;
function Is_Null (The_Object : Object) return Boolean;
function Build (Attribute_List : Attribute_Array :=
Attributes.No_Attributes;
For_Target : String) return Object;
Build_Failed : exception;
procedure Check (Attributes : Attribute_Array;
Status : in out Simple_Status.Condition);
procedure Display (The_Object : Object);
function Get_Attributes (The_Object : Object) return Attribute_Array;
private
type Prefix_Record is
record
Valid_Objects : Checking.Object_Set;
Valid_Miscellaneous_Names : Checking.Miscellaneous_Name_Set;
Valid_Types : Checking.Type_Set;
end record;
type Prefix is access Prefix_Record;
pragma Segmented_Heap (Prefix);
type Result_Record (The_Kind : Result_Kind := Value_Result;
Is_Prefix_Type : Boolean := False) is
record
case The_Kind is
when Type_Result =>
null;
when Value_Result | Range_Result =>
case Is_Prefix_Type is
when True =>
null;
when False =>
Name : Text.Item;
end case;
end case;
end record;
type Result is access Result_Record;
pragma Segmented_Heap (Result);
type Designator_Record (Is_Prefix_Type : Boolean := False) is
record
case Is_Prefix_Type is
when True =>
null;
when False =>
Function_Parameter : Checking.Expression;
end case;
end record;
type Designator is access Designator_Record;
pragma Segmented_Heap (Designator);
type Attribute_Record is
record
The_Name : Text.Item;
The_Prefix : Prefix;
The_Result : Result;
The_Designator : Designator;
end record;
type Attribute is access Attribute_Record;
pragma Segmented_Heap (Attribute);
type Object is access Attribute_Array;
pragma Segmented_Heap (Object);
end Attribute_Characteristics;
----------------------------------------------------------------------
package Rep_Spec_Characteristics is
package Rep_Specs renames Rep_Spec_Characteristics;
Last_Address_Clause_Object :
Checking.Miscellaneous_Name_Kind := Checking.Entry_Kind;
subtype Address_Clause_Miscellaneous_Name_Kind is
Checking.Miscellaneous_Name_Kind
range Checking.Miscellaneous_Name_Kind'First ..
Last_Address_Clause_Object;
type Address_Clause_Miscellaneous_Name_Kind_Array is
array (Address_Clause_Miscellaneous_Name_Kind) of Boolean;
subtype Address_Clause_Miscellaneous_Name_Set is
Address_Clause_Miscellaneous_Name_Kind_Array;
----------
type Address_Clause_Data is private;
function Null_Address_Clause_Data return Address_Clause_Data;
function Is_Null (The_Address_Clause_Data : Address_Clause_Data)
return Boolean;
function Build (Valid_Objects : Checking.Object_Set :=
Checking.Null_Object_Set;
Valid_Miscellaneous_Names :
Checking.Miscellaneous_Name_Set :=
Checking.Null_Miscellaneous_Name_Set;
For_Target : String) return Address_Clause_Data;
function Get_Valid_Objects
(The_Address_Clause_Data : Address_Clause_Data)
return Checking.Object_Set;
function Get_Valid_Miscellaneous_Names
(The_Address_Clause_Data : Address_Clause_Data)
return Checking.Miscellaneous_Name_Set;
----------
type Storage_Size_Data is private;
-- Storage_size_data describes the restrictions placed on the usage
-- of storage_size representation clauses.
function Null_Storage_Size_Data return Storage_Size_Data;
-- Null Storage_Size_data means that no target-dependent checks will
-- be made on storage_size specifications.
function Is_Null
(The_Storage_Size_Data : Storage_Size_Data) return Boolean;
function Build (Allowed_For_Task : Boolean := False;
Allowed_For_Access_Types : Boolean := False;
Allowed_With_Size_Specs : Boolean := False;
Task_Upper_Bound : Universal.Integer := Universal.Zero;
Access_Upper_Bound :
Universal.Integer := Universal.Zero;
For_Target : String) return Storage_Size_Data;
function Is_Allowed_For_Tasks
(The_Storage_Size_Data : Storage_Size_Data) return Boolean;
function Is_Allowed_For_Access_Types
(The_Storage_Size_Data : Storage_Size_Data) return Boolean;
function Is_Allowed_With_Size_Specs
(The_Storage_Size_Data : Storage_Size_Data) return Boolean;
function Get_Task_Upper_Bound
(The_Storage_Size_Data : Storage_Size_Data)
return Universal.Integer;
function Get_Access_Upper_Bound
(The_Storage_Size_Data : Storage_Size_Data)
return Universal.Integer;
----------
type Object is private;
function Null_Object return Object;
function Is_Null (The_Object : Object) return Boolean;
function Build (Address_Clause_Info : Address_Clause_Data :=
Rep_Specs.Null_Address_Clause_Data;
Storage_Size_Info : Storage_Size_Data :=
Rep_Specs.Null_Storage_Size_Data;
For_Target : String) return Object;
Build_Failed : exception;
procedure Check (Address_Clause_Info : Address_Clause_Data;
Storage_Size_Info : Storage_Size_Data;
Status : in out Simple_Status.Condition);
procedure Display (The_Object : Object);
function Get_Address_Clause_Info
(The_Object : Object) return Address_Clause_Data;
function Get_Storage_Size_Info
(The_Object : Object) return Storage_Size_Data;
private
type Address_Clause_Data_Record is
record
Valid_Objects : Checking.Object_Set;
Valid_Miscellaneous_Names : Checking.Miscellaneous_Name_Set;
end record;
type Address_Clause_Data is access Address_Clause_Data_Record;
pragma Segmented_Heap (Address_Clause_Data);
type Storage_Size_Data_Record is
record
Allowed_For_Tasks : Boolean := False;
Allowed_For_Access_Types : Boolean := False;
Allowed_With_Size_Spec : Boolean := False;
Task_Upper_Bound : Universal.Integer := Universal.Zero;
Access_Upper_Bound : Universal.Integer := Universal.Zero;
end record;
type Storage_Size_Data is access Storage_Size_Data_Record;
pragma Segmented_Heap (Storage_Size_Data);
type Object_Record is
record
Address_Clause_Info : Address_Clause_Data;
Storage_Size_Info : Storage_Size_Data;
end record;
type Object is access Object_Record;
pragma Segmented_Heap (Object);
end Rep_Spec_Characteristics;
----------------------------------------------------------------------
pragma Module_Name (4, 4143);
pragma Bias_Key (32);
end Semantic_Characteristics;