|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 232112 (0x38ab0)
Types: TextFile
Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦45d8281ba⟧
└─⟦this⟧
package Design_Implementation is
procedure Complete (Include_Optional_Annotations : Boolean := False);
procedure Definition (In_Place : Boolean := False;
Visible : Boolean := True);
procedure Enclosing (In_Place : Boolean := False);
procedure Explain;
procedure Format;
procedure Show_Usage (In_World : String := "$$");
procedure Display_All_Targets;
procedure Display_Target (For_World : String := "$$");
procedure Set_Target (To_Value : String := ">>DESIGN TARGET<<";
For_World : String := "$$");
procedure Display_All_Phases (For_World : String := "$$");
procedure Display_Phase (For_World : String := "$$");
procedure Set_Phase (To_Value : String := ">>DESIGN PHASE<<";
For_World : String := "$$");
function Current_Target_Image (For_World : String := "$$") return String;
function Current_Phase_Image (For_World : String := "$$") return String;
procedure Create_Model (Compiler_Model : String;
Design_Facility_Model : String;
New_Model_Name : String);
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3599);
pragma Bias_Key (27);
end Design_Implementation;with Errors;
with Heap_Strings;
with Mapping;
package Abstract_Document is
subtype Astring is Heap_Strings.Astring;
subtype Pathname is String;
subtype Pathnames is String; -- NAMING.NAME format.
subtype Text is String;
subtype Title_Text is String;
Point : constant := 1.0 / 72;
type Inches is digits 5 range 0.0 .. 100.0; -- For Graphic sizes
Default_Size : constant Inches := 0.0;
type Percentage is digits 5 range 0.0 .. 100.0; -- For Table column sizes
Default_Percentage : constant Percentage := 1.0;
type Position is (Left,
Right,
Center,
Fill); -- For Cover_Item & column-header
type Linkage_Info (Valid : Boolean := False) is private;
Nil_Linkage : constant Linkage_Info;
-- Return True if the Linkage_Info is null
function Is_Nil (For_Linkage : Linkage_Info) return Boolean;
subtype Font_Families is Text;
Default_Font_Family : constant Font_Families := "";
subtype Font_Styles is Text;
Default_Font_Style : constant Font_Styles := "";
type Point_Sizes is new Natural range 0 .. 255;
Default_Point_Size : constant Point_Sizes := 0;
Default_User_Info : constant Text := "";
type Format_Info (Valid : Boolean := False) is private;
Nil_Format : constant Format_Info;
-- Return True if the Format_Info is null
function Is_Nil (For_Format : Format_Info) return Boolean;
type Handle is private;
type Access_Mode is (Read,
Write,
Read_Write);
-- Open a document file
procedure Open (The_Document : in out Handle;
Name : Pathname;
Status : in out Errors.Condition;
Mode : Access_Mode := Abstract_Document.Read;
Check_Obsolescence : Boolean := True);
-- Create a new document file
procedure Create (The_Document : in out Handle;
Name : Pathname;
Status : in out Errors.Condition;
Mode : Access_Mode := Abstract_Document.Write;
Check_Obsolescence : Boolean := True);
-- Close a document file
procedure Close (The_Document : in out Handle);
-- If an interface operation raises FAILED, a status condition
-- can be extracted from the handle associated with that operation,
-- and an error message can be written.
Failed : exception;
Uninitialized_Handle : exception;
-- Get the status condition associated with a document file
procedure Get_Status (From_Handle : Handle;
Result : in out Errors.Condition);
pragma Page;
-- Documents are organized as trees with nodes having a kind.
-- Documents may be traversed by asking for Parent, Brother,
-- and children starting at the Root node.
-- Kind-dependent operations may be performed on nodes
-- to extract interesting information about them.
type Node_Kinds is (Nil,
Root,
Cover,
Cover_Item,
Paragraph,
Appendix,
Text_Block,
File,
Graphic,
List,
List_Item,
Table,
Table_Row,
Table_Column,
Table_Entry,
White_Space,
User_Defined,
Future_Node_1,
Future_Node_2,
Future_Node_3,
Future_Node_4);
type Node is private;
Nil_Node : constant Node;
-- Return True if a Node is null
function Is_Nil (For_Node : Node) return Boolean;
-- Get the Node_Kind of a Node
function Kind (Of_Node : Node) return Node_Kinds;
-- Return True if a node is the Root node
function Is_Root (A_Node : Node) return Boolean;
-- Get the Root node of a document
function Root_Node (Of_Document : Handle) return Node;
--------------------------------------------------------
-- This generic VISITs the nodes in the document in --
-- the order appropriate for printing a document. --
-- NOTE : This generic generates garbage and thus --
-- should only be instantiated within a procedure --
-- or in a non-permanent job. --
--------------------------------------------------------
type Visit_Status is (Ok,
Abandon_Children,
Abandon_Brothers,
Complete);
generic
with procedure Operation (On_Node : Node; Status : out Visit_Status);
procedure Visit_Nodes (Start_Node : Node);
pragma Page;
------------------------------
-- DOCUMENT ENTRY INTERFACE --
------------------------------
package Specify is
----------------------------------------------------------------
-- Every document must start with a COVER, which may be null,
-- and every non-null Cover must contain at least one Cover_Item.
-- A COVER_ITEM can only be inserted within a Cover, but a Cover
-- can also contain File, Graphic, or White_Space nodes.
-- The Cover is done when the first PARAGRAPH call is made, or
-- when the document ends if there are no Paragraphs.
----------------------------------------------------------------
procedure Cover (Document : Handle;
User_Info : Text;
Linkage : Linkage_Info :=
Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Cover_Item
(Document : Handle;
Item : Title_Text;
Line_Positions : Position := Abstract_Document.Center;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
-----------------------------------------------------------------------
-- Sectioning operations.
-----------------------------------------------------------------------
--
-- PARAGRAPH causes the section level to be reset to 1 and sets the
-- level-1 section number (the current paragraph number) to NUMBERED.
-- Every document must have at least one Paragraph, and
-- Paragraph numbers (NUMBERED) must be in increasing order.
-- A Paragraph is composed of a sequence of Text_Block, File, Graphic,
-- List, Table, White_Space, User_Defined and/or sub-Paragraph nodes.
-- NEW_LEVEL increments to the next section level and sets that
-- level's section number to 0. Nothing is output to the document.
-- NEXT_SUB_PARAGRAPH causes the current level's (rightmost) section
-- number to be incremented.
-- NEW_SUB_PARAGRAPH is equivalent to NEW_LEVEL followed by
-- NEXT_SUB_PARAGRAPH, i.e., it increments to the next
-- section level and sets that level's section number to 1.
-- END_LEVEL decrements the section level.
-- xxx_LEVEL operations are used for setting up a loop which uses
-- NEXT_SUB_PARAGRAPH to generate nested sections.
-- APPENDIX is like PARAGRAPH except for the numbering format
-- (Roman numerals or letters).
-- Appendix numbers (NUMBERED) must be in increasing order.
-- A PARAGRAPH cannot follow an APPENDIX.
-----------------------------------------------------------------------
procedure Paragraph
(Document : Handle;
Numbered : Positive;
Title : Title_Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Appendix (Document : Handle;
Numbered : Positive;
Title : Title_Text;
Linkage : Linkage_Info :=
Abstract_Document.Nil_Linkage;
Format : Format_Info :=
Abstract_Document.Nil_Format);
procedure New_Sub_Paragraph
(Document : Handle;
Title : Title_Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Next_Sub_Paragraph
(Document : Handle;
Title : Title_Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure New_Level (Document : Handle);
procedure End_Level (Document : Handle);
-----------------------------------------------------------------
-- The TEXT_BLOCK procedure causes a block of text to be inserted
-- in the body of the document (within a Paragraph or Appendix)
-- or in the body of a List_Item.
-----------------------------------------------------------------
procedure Text_Block
(Document : Handle;
T : Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
-----------------------------------------------------------------------
-- Operations to insert text FILE or GRAPHIC objects into the DOCUMENT.
-- They can go into the Cover, a Paragraph/Appendix, or a List_Item.
-- For GRAPHIC objects, the FROM_PATHNAMES parameter may resolve to
-- multiple objects. These objects map to device-dependent graphic
-- files to be included in the generated markup language.
-----------------------------------------------------------------------
procedure File (Document : Handle;
From_Pathnames : Pathnames;
Explain : Text := "";
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Graphic
(Document : Handle;
From_Pathnames : Pathnames;
Title : Title_Text;
Preface : Text;
Size : Inches := Abstract_Document.Default_Size;
Perform_Scaling : Boolean := False;
Explain : Text := "";
Format : Format_Info := Abstract_Document.Nil_Format);
--------------------------------------------------------------------
-- List description operations.
--------------------------------------------------------------------
--
-- A List is composed of one or more List_Items, each of which has a
-- header, and a body composed of a sequence of Text_Block, File,
-- Graphic, List, Table, White_Space, and/or User_Defined nodes.
-- If Linkage and/or Format is not included in a List node when
-- it is constructed (by a START_LIST), it can be inserted by
-- the corresponding END_LIST.
--------------------------------------------------------------------
procedure Start_List
(Document : Handle;
Title : Title_Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure List_Item
(Document : Handle;
Header_Text : Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure End_List (Document : Handle;
Linkage : Linkage_Info :=
Abstract_Document.Nil_Linkage;
Format : Format_Info :=
Abstract_Document.Nil_Format);
----------------------------------------------------------------------
-- Table description operations.
----------------------------------------------------------------------
--
-- COLUMN_INFORMATION is used to define a table's columns.
-- The column information is done when the first TABLE_ENTRY
-- call is made. If COLUMNS is defaulted to 0, the actual number
-- of columns supplied will be used, but otherwise the number
-- supplied must match COLUMNS. All rows of a Table must be filled,
-- so if there are 3 columns, the total number of Table_Entrys
-- must be a multiple of 3. A Table must have at least one entry
-- (at least one column and one row).
-- If Linkage and/or Format is not included in a Table node when
-- it is constructed (by a START_TABLE), it can be inserted by
-- the corresponding END_TABLE.
----------------------------------------------------------------------
procedure Start_Table
(Document : Handle;
Name : Title_Text;
Preface : Text;
Columns : Natural := 0;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Column_Information
(Document : Handle;
Title : Title_Text;
Entry_Justification : Position :=
Abstract_Document.Center;
Percentage_Size : Percentage :=
Abstract_Document.Default_Percentage;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure Table_Entry
(Document : Handle;
Item_Text : Title_Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
procedure End_Table (Document : Handle;
Linkage : Linkage_Info :=
Abstract_Document.Nil_Linkage;
Format : Format_Info :=
Abstract_Document.Nil_Format);
----------------------------------------------------------------
-- Miscellaneous
----------------------------------------------------------------
--
-- These 'White-Space' nodes can appear in a Cover, Paragraph,
-- Appendix, or List, but not in a Table.
----------------------------------------------------------------
procedure New_Page (Document : Handle; Count : Positive := 1);
procedure Blank_Line (Document : Handle; Count : Positive := 1);
-----------------------------------------------------------------------
-- A USER_DEFINED node is similar to a TEXT_BLOCK but has an additional
-- user-defined data that will not be presented in the PREVIEW OE.
-- USER_DEFINED nodes can appear anywhere in a document.
-----------------------------------------------------------------------
procedure User_Defined
(Document : Handle;
T : Text;
User_Data : Text;
Linkage : Linkage_Info := Abstract_Document.Nil_Linkage;
Format : Format_Info := Abstract_Document.Nil_Format);
-----------------------------------------------
-- Routines for generating Linkages.
-- Storage is allocated in the document's heap.
-----------------------------------------------
function Gen_Linkage (Document : Handle;
Explain : Text := "";
Definition : Mapping.Target_Info :=
Mapping.Nil_Target_Info;
Usage : Mapping.Target_Info :=
Mapping.Nil_Target_Info;
Derivation : Mapping.Target_Info :=
Mapping.Nil_Target_Info) return Linkage_Info;
-----------------------------------------------
-- Construction operation for Format data.
-- Storage is allocated in the document's heap.
-----------------------------------------------
function Gen_Format
(Document : Handle;
Font_Family : Font_Families :=
Abstract_Document.Default_Font_Family;
Font_Style : Font_Styles :=
Abstract_Document.Default_Font_Style;
Point_Size : Point_Sizes :=
Abstract_Document.Default_Point_Size;
User_Info : Text := Abstract_Document.Default_User_Info)
return Format_Info;
end Specify;
pragma Page;
--------------------------
-- EXTRACTION INTERFACE --
--------------------------
package Extract is
---------------------------------
-- Node-independent operations --
---------------------------------
function Parent (Of_Node : Node) return Node;
function Brother (Of_Node : Node) return Node;
function Linkage (Of_Node : Node) return Linkage_Info;
function Format (Of_Node : Node) return Format_Info;
function Image (Of_Node : Node) return String;
function Image (Of_Handle : Handle) return String;
-- The following provide debugger Image functions --
-- for Abstract_Document's private types --
function Debug_Image (Of_Linkage : Linkage_Info;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_Format : Format_Info;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_Handle : Handle;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_Node : Node;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
-- ROOT --
function Cover (Root_Node : Node) return Node;
function First_Paragraph (Root_Node : Node) return Node;
-- COVER --
function First_Cover_Item (Cover_Node : Node) return Node;
function Cover_Info (Cover_Node : Node) return String;
function Cover_Item_Text (Cover_Item_Node : Node) return String;
function Cover_Item_Justification
(Cover_Item_Node : Node) return Position;
-- PARAGRAPHs and APPENDIXs - composed of NUMBER and TITLE --
function Paragraph_Number
(Paragraph_Or_Appendix_Node : Node) return String;
-- eg : "3.4.5".
function Para_Depth (Paragraph_Or_Appendix_Node : Node) return Natural;
function Para_Index (Paragraph_Or_Appendix_Node : Node) return Natural;
function Paragraph_Title
(Paragraph_Or_Appendix_Node : Node) return String;
function First_Contents (Paragraph_Or_Appendix_Node : Node) return Node;
-- TEXT_BLOCKs and USER_DEFINED --
-- Use IMAGE, LINKAGE, and FORMAT to get info about these --
function User_Data (User_Defined_Node : Node) return String;
-- GRAPHICs and FILEs - composed of FILE_NAME and optional scaling info
function File_Name (Graphic_Or_File_Node : Node) return String;
function Graphic_Title (Graphic_Node : Node) return String;
function Graphic_Preface (Graphic_Node : Node) return String;
function Graphic_Size (Graphic_Node : Node) return Inches;
function Perform_Scaling (Graphic_Node : Node) return Boolean;
-- LISTs - composed of LIST_ITEMs, each with a header. --
-- Use BROTHER on a LIST_ITEM node to get the next item. --
function List_Count (List_Node : Node) return Natural;
function List_Title (List_Node : Node) return String;
function First_List_Item (List_Node : Node) return Node;
function Header_Text (List_Item_Node : Node) return String;
function First_List_Contents (List_Item_Node : Node) return Node;
-- TABLEs - composed of column information and rows of TABLE_ENTRYs --
function Table_Title (Table_Node : Node) return String;
function Table_Preface (Table_Node : Node) return String;
function Column_Count (Table_Node : Node) return Natural;
function Row_Count (Table_Node : Node) return Natural;
function First_Column (Table_Node : Node) return Node;
function First_Row (Table_Node : Node) return Node;
function Column_Title (Table_Column_Node : Node) return String;
function Column_Justification
(Table_Column_Node : Node) return Position;
function Column_Percentage_Size
(Table_Column_Node : Node) return Percentage;
function First_Table_Entry (Table_Row_Node : Node) return Node;
-- COLUMNs may have LINKAGE/FORMAT info; so may TABLE_ENTRYs. --
-- Use IMAGE, LINKAGE, and FORMAT to get info about TABLE_ENTRYs. --
-- Use BROTHER to get next for ROWs, COLUMNs, and TABLE_ENTRYs. --
-- WHITE_SPACE - composed of an image of the requested spacing --
-- (use IMAGE). ASCII.LFs indicate new lines, ASCII.FFs new pages. --
-- LINKAGE --
function Explain_Text (For_Linkage : Linkage_Info) return String;
function Definition (For_Linkage : Linkage_Info)
return Mapping.Target_Info;
function Usage (For_Linkage : Linkage_Info) return Mapping.Target_Info;
function Derivation (For_Linkage : Linkage_Info)
return Mapping.Target_Info;
function Image (Of_Linkage : Linkage_Info) return String;
-- The following produce string representations of the items LINKed to
function Definition (For_Linkage : Linkage_Info) return String;
function Usage (For_Linkage : Linkage_Info) return String;
function Derivation (For_Linkage : Linkage_Info) return String;
-- FORMAT --
function Font_Family (For_Format : Format_Info) return Font_Families;
function Font_Style (For_Format : Format_Info) return Font_Styles;
function Point_Size (For_Format : Format_Info) return Point_Sizes;
function User_Info (For_Format : Format_Info) return String;
function Image (Of_Format : Format_Info) return String;
-- Raise this exception if anything is wrong with the node --
Bad_Node : exception;
-- Raise this exception if DEFINITION, USAGE or DERIVATION
-- have resolution problems. Use the STATUS call to get the
-- error status associated with the resolution problem.
Bad_Linkage : exception;
function Status return Errors.Condition;
-- Returns the number of consecutive graphic nodes, including the
-- specified node. If the specified node is not a graphic node, this
-- function returns a value of zero.
--
function Number_Of_Figures (Graphic_Node : Node) return Natural;
-- Returns the last consecutive graphic node following the specified
-- node. If there is only one graphics node, this becomes the identity
-- function.
--
function Last_Figure (Graphic_Node : Node)
return Abstract_Document.Node;
end Extract;
-- Delete a document file
procedure Delete (The_Document : Handle; Status : in out Errors.Condition);
-- Get the Form of a document file
--[This merely returns the null string for now]
function Form (The_Document : Handle) return String;
-- Return True if a document file is open
function Is_Open (The_Document : Handle) return Boolean;
-- Get the access mode (Read, Write, Read_Write) of a document file
function Mode (The_Document : Handle) return Access_Mode;
-- Get the name of a document file
function Name (The_Document : Handle) return String;
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3590);
pragma Bias_Key (27);
private
type Handle_Object;
type Handle is access Handle_Object;
pragma Segmented_Heap (Handle);
type Node_Data (Kind : Node_Kinds := Nil;
Has_Linkage : Boolean := False;
Has_Format : Boolean := False);
type Node is access Node_Data;
pragma Segmented_Heap (Node);
Nil_Node : constant Node := null;
type String_Table_Index is new Natural range 0 .. 2 ** 16 - 1;
type Linkage_Entry (Valid : Boolean := False) is
record
case Valid is
when True =>
Explain : String_Table_Index;
Definition : String_Table_Index;
Usage : String_Table_Index;
Derivation : String_Table_Index;
when False =>
null;
end case;
end record;
-- This structure is used to pass along linkage information.
type Linkage_Info (Valid : Boolean := False) is
record
The_Entry : Linkage_Entry (Valid => Valid);
case Valid is
when True =>
Assoc_Node : Node;
when False =>
null;
end case;
end record;
Nil_Linkage : constant Linkage_Info :=
Linkage_Info'(Valid => False,
The_Entry => Linkage_Entry'(Valid => False));
type Format_Entry (Valid : Boolean := False) is
record
case Valid is
when True =>
Font_Family : String_Table_Index;
Font_Style : String_Table_Index;
Point_Size : Point_Sizes;
User_Info : String_Table_Index;
when False =>
null;
end case;
end record;
-- This structure is used to pass along format information.
type Format_Info (Valid : Boolean := False) is
record
The_Entry : Format_Entry (Valid => Valid);
case Valid is
when True =>
Assoc_Node : Node;
when False =>
null;
end case;
end record;
Nil_Format : constant Format_Info :=
Format_Info'(Valid => False, The_Entry => Format_Entry'(Valid => False));
-- The following limits are enforced for an Abstract Document:
--
-- Maximum paragraph number = 65535
-- Maximum number of paragraph levels = 65535
-- Maximum paragraph nesting level = 15
-- Maximum number of items in a list = 65535
-- Maximum nesting level for lists = 15
-- Maximum number of columns in a table = 255
-- Maximum number of rows in a table = 65535
end Abstract_Document;with Directory;
with Errors;
package Design_Switches is
type Kinds is (Options, Phase);
function Value (Of_Switch : Kinds;
In_World : String) return String;
procedure Set (Switch : Kinds;
To_Value : String;
In_World : String);
--| Raises: FAILED when TO_VALUE is not an appropriate
--| value for SWITCH or when IN_WORLD is erroneous.
Failed : exception;
function Diagnosis return String;
function Status return Errors.Condition;
--| May be used to obtain further information on the cause of the
--| FAILED exception. DIAGNOSIS returns "" after successful operations.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3592);
pragma Bias_Key (27);
end Design_Switches;with Directory_Tools;
with Errors;
with Heap_Strings;
with System;
package Document is
package Object renames Directory_Tools.Object;
type Element is private;
Nil_Element : constant Element;
function Is_Nil (An_Element : Element) return Boolean;
type Classes is (Postscript, Lineprinter, Document_Db, Markup, Unknown);
subtype Devices is Classes range Postscript .. Lineprinter;
type Paragraph_Mark_Kinds is (Title, Number, None);
subtype Paragraph_Mark is String;
type Element_States is (Nil, Unresolved, Unmarked, Valid);
-- An element resolves to a particular library object and can
-- mark a particular paragraph in that object.
--
-- The state of an element reflects this info :
--
-- ELEMENT_STATE Reason for being in the state
-- ------------- -----------------------------------
-- NIL Uninitialized or set to NIL_ELEMENT.
-- UNRESOLVED RESOLVE of ELEMENT failed, no object exists,
-- access violation or lock error.
-- UNMARKED RESOLVE worked but no mark was set or
-- mark did not exist in the object.
-- MARKED RESOLVE worked and paragraph mark was found.
function State_Of (The_Element : Element) return Element_States;
function Last_Status_Of (The_Element : Element) return Errors.Condition;
-- NIL, MARKED and UNMARKED with no mark set return ERRORS.OK.
procedure Resolve (An_Element : in out Element;
To_Pathname : String;
Class : Classes := Unknown;
Status : in out Errors.Condition);
procedure Resolve (An_Element : in out Element;
To_Handle : Object.Handle;
Class : Classes := Unknown;
Status : in out Errors.Condition);
function Handle_Of (The_Element : Element) return Object.Handle;
-- Returns a nil handle if the element is NIL or UNRESOLVED.
function Pathname_Of (The_Element : Element) return String;
-- Returns a null string if the element is NIL.
function Class_Of (The_Element : Element) return Classes;
-- Returns Unknown if the element is NIL or UNRESOLVED.
procedure Set_Mark (Of_Element : in out Element;
With_Paragraph_Mark_Kind : Paragraph_Mark_Kinds := None;
With_Paragraph_Mark_Image : String := "";
Status : in out Errors.Condition);
function Mark_Of (An_Element : Element;
Which : Paragraph_Mark_Kinds) return String;
-----------------------------------------------------------
-- ELEMENTs are not 'safe' objects. To save them in
-- permanent objects (like files), they must be converted to
-- ELEMENT_PERMANENT_REPRESENTATIONs.
--
-- ELEMENT_PERMANENT_REPRESENTATIONs of elements in any
-- ELEMENT_STATE can be made. If, after conversion from
-- PERMANENT_REPRESENTATION back to ELEMENT, a previously
-- UNRESOLVED or UNMARKED element can now be resolved or
-- who's set mark now exists, the element state is changed
-- and queries (like HANDLE_OF) may return different results.
-- Similarly, if the object or mark has disappeared while
-- the element was permanently stored, a previously MARKED
-- or RESOLVED element may be restored as UNRESOLVED or UNMARKED.
-----------------------------------------------------------
type Element_Permanent_Representation is new String;
function Convert (An_Element : Element;
Within : String := "<SUBSYSTEM>")
return Element_Permanent_Representation;
-- The WITHIN parameter specifies how fully qualified the
-- representation is (or should be resolved). When converting from
-- an element to a permanent representation, the values can be :
-- <FULL> - The element's fully qualified resolution is
-- returned.
-- <SUBSYSTEM> - The resolution of the element is subsystem
-- relative. Subsystem name and spec or load origin
-- is preserved.
-- <VIEW> - The resolution of the element is view relative.
-- No origin information is preserved.
--
-- Storage for <SUBSYSTEM> or <VIEW> representation are less than
-- <FULL> but some origin information is lost.
--
procedure Convert (An_Element_Rep : Element_Permanent_Representation;
Result : out Element;
Status : in out Errors.Condition;
Within : String := "<DEFAULT>");
-- When converting from a permanent representation to an element,
-- an attempt is made to fill in any missing information in the
-- permanent representation from the WITHIN parameter. So, in all
-- cases, if the permanent representation was FULLy resolved the
-- WITHIN parameter is ignored, otherwise :
-- <DEFAULT> - For <SUBSYSTEM>, the view selected by
-- the current activity for the stored subsystem is
-- used as the origin. The spec or load origin of the
-- representation is used to pick the specific view.
-- For <VIEW>, the current view context is used as
-- the origin.
-- subsystem name - For <SUBSYSTEM>, same as <DEFAULT>.
-- For <VIEW>, the view selected by the current
-- activity for the specified subsystem is used.
-- The subsystem name can be followed by "'SPEC" or
-- "'LOAD" to force use of the spec view or load
-- view from the activity. (Defaults to Spec View)
-- view name - For <SUBSYSTEM>, if the subsystem containing the
-- specified view matches the representation's
-- subsystem, the specified view is used.
-- If no match, same as <DEFAULT>.
-- For <VIEW> the specified view is used.
function Unique_Id (For_Element : Element) return Long_Integer;
-- Generates a unique number for any element.
-- Useful for building maps for elements.
-------------------
-- LIST operations
-------------------
type Element_List is private;
Nil_List : constant Element_List;
-- Assignment on a LIST * * DOES NOT CAUSE A COPY TO BE MADE! * *
-- Use COPY to do that.
procedure Copy (From_List : Element_List; To_List : in out Element_List);
procedure Add (An_Element : Element; To_List : in out Element_List);
procedure Reset (A_List : in out Element_List);
function Value (In_List : Element_List) return Element;
procedure Next (In_List : in out Element_List);
function Done (With_List : Element_List) return Boolean;
-- These two operations return information relating to the cause/nature
-- of the condition which caused FAILED to be raised.
Failed : exception;
function Diagnosis return String;
function Status return Errors.Condition;
---------------
-- UTILITIES
---------------
-------------------------------------------------
-- Operations to bring up a window on an Element
-------------------------------------------------
procedure Definition (On_Element : Element;
In_Place : Boolean := False;
Edit : Boolean := False;
Library_Item_Only : Boolean := False;
Status : in out Errors.Condition);
-- The LIBRARY_ITEM_ONLY parameter specifies if definition for
-- UNMARKED elements is to bring up a window on the contents of
-- the element or a Library OE window of the library containing
-- the element with the element name highlighted.
-- Hide these ...
procedure Convert (An_Element_Rep : Element_Permanent_Representation;
Result : out Element;
Status : in out Errors.Condition;
Within : String := "<DEFAULT>";
Use_Heap : System.Segment);
procedure Field_Copy (From_List : Element_List;
To_List : in out Element_List);
-- If a data type contains a LIST and that data type is stored
-- in a segmented heap and a selector on that pointed-to object
-- returns a LIST, use this to get the LIST out.
-- It will un-normalize the internal segmented heap pointers.
function Debug_Image (Of_Element : Element;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_List : Element_List;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3581);
pragma Bias_Key (27);
private
type Element_Item;
type Element is access Element_Item;
pragma Segmented_Heap (Element);
Nil_Element : constant Element := null;
type Element_List_Item;
type Element_List_Item_Pointer is access Element_List_Item;
pragma Segmented_Heap (Element_List_Item_Pointer);
type Element_List_Item is
record
An_Element : Element;
Next : Element_List_Item_Pointer;
end record;
type Element_List is
record
Root : Element_List_Item_Pointer;
Current : Element_List_Item_Pointer;
end record;
Nil_List : constant Element_List := (null, null);
end Document;with Action;
with Ada_Program;
with Directory;
with Errors;
package Element_Cache is
subtype Element is Ada_Program.Element;
subtype Element_List is Ada_Program.Element_List;
type Handle is limited private;
type Modes is (Create, Read, Update);
--------------------------
-- Old Style Interfaces --
--------------------------
-- These interfaces are obsolete and their use is discouraged. The
-- preferred interfaces are declared below function Debug_Image.
procedure Open (Cache : in out Handle;
Mode : Modes;
Name : String);
procedure Close (Cache : in out Handle);
procedure Destroy (Cache : in out Handle);
subtype Key is String;
procedure Add (An_Element : Element;
To_Cache : in out Handle;
With_Key : Key);
procedure Remove (An_Element : Element;
From_Cache : in out Handle;
With_Key : Key);
procedure Add (An_Element_List : Element_List;
To_Cache : in out Handle;
With_Key : Key);
procedure Remove (An_Element_List : Element_List;
From_Cache : in out Handle;
With_Key : Key);
procedure Retrieve (Elements : out Element_List;
From_Cache : Handle;
With_Key : Key;
In_Context : String := "<DEFAULT>");
--
-- This operation does not raise FAILED when errors are detected
-- during the retrieval of ELEMENTS from FROM_CACHE. Instead, as
-- many valid elements as possible are retieved and placed in
-- ELEMENTS. When the complete success of the retrieval operation
-- must be known, STATUS and DIAGNOSIS can be queried after the call
-- to RETRIVE in order to determine if any problems were encountered
-- during the operation.
Failed : exception;
--
-- FAILED is raised when any of the above operations
-- cannot be successfully completed. STATUS and DIAGNOSIS
-- may be used to obtain additional information about the
-- nature of the failure.
function Diagnosis return String;
function Status return Errors.Condition;
function Debug_Image (Of_Handle : Handle;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
--------------------------
-- Preferred Interfaces --
--------------------------
-- The following subprograms provide the same functionality as their
-- overloaded counterparts above, except that these subprograms
-- provide a STATUS parameter where appropriate and generally do not
-- raise the FAILED exception.
procedure Open (Cache : in out Handle;
Mode : Modes;
Name : String;
Status : in out Errors.Condition;
Action_Id : Action.Id := Action.Null_Id);
--
-- When ACTION_ID = ACTION.NULL_ID, an action managed by the
-- job is used by the open, and is finished as appropriate at
-- the end of the job. When ACTION_ID /= ACTION.NULL_ID,
-- ACTION_ID is used in subsequent operations and should be
-- finished by the client which started it.
procedure Close (Cache : in out Handle;
Status : in out Errors.Condition);
procedure Destroy (Cache : in out Handle;
Status : in out Errors.Condition);
type Storage_Formats is (Fully_Qualified,
Subsystem_Relative,
View_Relative);
--
-- Type STORAGE_FORMATS determines how elements are
-- represented in the cache. The permanent representation
-- used in the caches is equivalent to that provided in the
-- Ada_Program.Conversion.Convert operations. A summary of
-- the storage formats is provided below.
--
-- FULLY_QUALIFIED => The element's fully qualified resolution
-- is stored. This format is useful for
-- elements from non-subsystem contexts or
-- when subsystem/view information must be
-- saved.
--
-- SUBSYSTEM_RELATIVE => The resolution of the element is subsystem
-- relative. The subsystem name along with
-- an SPEC/LOAD view indication are stored.
-- This format is useful for elements in
-- subystem contexts when retreival is desired
-- in a potentially different view context. See
-- the IN_CONTEXT parameter on procedure RETRIEVE
-- below.
--
-- VIEW_RELATIVE => The resolution of the element is completely
-- view relative. No subsystem or SPEC/LOAD
-- indication is stored. This format is useful
-- for elements in subsystem contexts which will
-- ALWAYS be retrieved in a particular
-- subsystem/view pair.
procedure Add (An_Element : Element;
To_Cache : in out Handle;
With_Key : Key;
Status : in out Errors.Condition;
Format : Storage_Formats :=
Element_Cache.Subsystem_Relative);
--
-- Stores AN_ELEMENT in TO_CACHE under WITH_KEY in FORMAT
-- representation. If AN_ELEMENT was previously ADD'ed
-- with the same parameters, this operation is a no-op.
-- When a single element is ADD'ed to the same cache with
-- different values for the FORMAT parameter, separate
-- entries for each given format are stored.
--
-- NOTE: In order to REMOVE a given element from the cache,
-- the same values for WITH_KEY and FORMAT must be provided.
procedure Remove (An_Element : Element;
From_Cache : in out Handle;
With_Key : Key;
Status : in out Errors.Condition;
Format : Storage_Formats :=
Element_Cache.Subsystem_Relative);
--
-- Removes AN_ELEMENT stored under WITH_KEY from FROM_CACHE in
-- FORMAT representation. When AN_ELEMENT is not stored under
-- WITH_KEY in the specified FORMAT, UNDEFINED_ELEMENT is returned
-- in STATUS. When WITH_KEY is not defined in FROM_CACHE,
-- UNDEFINED_KEY is returned in STATUS.
procedure Add (An_Element_List : Element_List;
To_Cache : in out Handle;
With_Key : Key;
Status : in out Errors.Condition;
Format : Storage_Formats :=
Element_Cache.Subsystem_Relative);
--
-- Equivalent to single element ADD as defined above on each
-- element in AN_ELEMENT_LIST.
procedure Remove (An_Element_List : Element_List;
From_Cache : in out Handle;
With_Key : Key;
Status : in out Errors.Condition;
Format : Storage_Formats :=
Element_Cache.Subsystem_Relative);
--
-- Equivalent to single element REMOVE as defined above on each
-- element in AN_ELEMENT_LIST.
procedure Retrieve (Elements : out Element_List;
From_Cache : Handle;
With_Key : Key;
Status : in out Errors.Condition;
Format : Storage_Formats :=
Element_Cache.Subsystem_Relative;
In_Context : String := "<DEFAULT>");
--
-- Restores the ELEMENTS that were saved in FROM_CACHE under
-- WITH_KEY in FORMAT representation. The IN_CONTEXT parameter
-- determines how the resolution of saved elements will be
-- performed. In all cases, if the elements were saved in
-- FULLY_QUALIFED format this parameter is ignored. Otherwise, the
-- following algorithm is followed.
--
-- <DEFAULT> => For elements saved in SUBSYSTEM_RELATIVE format,
-- the view selected by the current activity and
-- the stored subsystem is used as the origin. The
-- spec or load origin of the representation is
-- used to choose the specific view. For elements
-- saved in VIEW_RELATIVE format, the current view
-- context is used as the origin.
--
-- Subsystem Name => For elements saved in SUBSYSTEM_RELATIVE format,
-- this behaves the same as <DEFAULT>. For elements
-- saved in VIEW_RELATIVE format, the view selected
-- by the current activity for the given subsystem
-- is used. The subsystem name can be followed by
-- "'SPEC" or "'LOAD" to force use of the spec view
-- or load view from the activity; DEFAULT: Spec View
--
-- View Name => For elements saved in SUBSYSTEM_RELATIVE format,
-- if the subsystem enclosing the given view name
-- matches the representation's subsystem, the
-- given view is used. Otherwise, this behaves
-- the same as <DEFAULT>. For elements saved in
-- VIEW_RELATIVE format the specified view is used.
----------------------
-- Cache Compaction --
----------------------
procedure Compactify (The_Cache : in out Handle;
Status : in out Errors.Condition);
--
-- Reorganizes cache data structures into a more optimal format.
-- Assert => MODE (THE_CACHE) /= READ.
--------------------------
-- Cache Handle Queries --
--------------------------
function Is_Open (Cache : Handle) return Boolean;
function Mode (Of_Cache : Handle) return Modes;
--
-- Raises FAILED when not IS_OPEN (OF_CACHE)
function Name (Of_Cache : Handle) return String;
--
-- Raises FAILED when not IS_OPEN (OF_CACHE)
function Object_Id (Of_Cache : Handle) return Directory.Object;
--
-- Raises FAILED when not IS_OPEN (OF_CACHE)
-------------------
-- Key Iterators --
-------------------
-- The following type and operations provide a means of
-- iterating over the set of keys defined for a given cache.
type Key_Iterator is private;
procedure Initialize (Iterator : in out Key_Iterator;
From_Cache : Handle);
function Done (Iterator : Key_Iterator) return Boolean;
function Value (Of_Iterator : Key_Iterator) return Key;
procedure Next (The_Iterator : in out Key_Iterator);
------------------------------
-- Predefined Status Values --
------------------------------
Undefined_Element : constant Errors.Error_Kinds :=
Errors.Make ("UNDEFINED_ELEMENT", Errors.Warn);
Undefined_Key : constant Errors.Error_Kinds :=
Errors.Make ("UNDEFINED_KEY", Errors.Warn);
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3593);
pragma Bias_Key (27);
private
type Handle_Data;
type Handle is access Handle_Data;
pragma Segmented_Heap (Handle);
type Key_Data;
type Key_Iterator is access Key_Data;
pragma Segmented_Heap (Key_Iterator);
end Element_Cache;with Profile;
with Simple_Status;
package Errors is
subtype Error_Kinds is Simple_Status.Condition_Name;
subtype Condition is Simple_Status.Condition;
subtype Error_Severity is Simple_Status.Condition_Class;
-- A CONDITION should be used to return error information from
-- procedure calls. They are relatively large and should always
-- be passed by mode IN OUT.
--
-- A CONDITION consists of an ERROR_KINDS and a message string. The
-- ERROR_KINDS indicates the type of error (if any) and how
-- serious the error is (or if completion was successful). The
-- Message provides additional information about the error. A
-- CONDITION is self-initializing to severity Normal and an empty
-- message.
--
-- By convention, the set of defined ERROR_KINDS in an application
-- should be standardized so that error conditions can be tested
-- programmatically.
----- Error_Severity Constants
--
Normal : constant Error_Severity := Simple_Status.Normal;
Warn : constant Error_Severity := Simple_Status.Warning;
Problem : constant Error_Severity := Simple_Status.Problem;
Fatal : constant Error_Severity := Simple_Status.Fatal;
function Make (Error_Name : String;
Severity : Error_Severity) return Error_Kinds
renames Simple_Status.Create_Condition_Name;
--
-- Useful for creating predefined ERROR_KINDS.
--
-- NOTE: The length of ERROR_NAME is limited to 63 characters.
procedure Append_Condition (A_Condition : in out Condition;
Owner : String;
Error_Kind : Error_Kinds;
Message : String);
procedure Set_Ok (A_Condition : in out Condition)
renames Simple_Status.Initialize;
procedure Set (A_Condition : in out Condition;
Error_Kind : Error_Kinds;
Message : String)
renames Simple_Status.Create_Condition;
--
-- Augment A_CONDITION with a new ERROR_KIND and MESSAGE. The REPORT
-- procedures declared below display the information most recently
-- SET. Use REPORT_CONDITION at the end of this package to display
-- all information stored in a given CONDITION.
function Kind (Of_Condition : Condition) return Error_Kinds
renames Simple_Status.Error_Type;
--
-- Returns the current ERROR_KIND from OF_CONDITION.
function Severity (Of_Condition : Condition) return Error_Severity
renames Simple_Status.Severity;
--
-- Returns the current ERROR_SEVERITY from OF_CONDITION.
function Info (From_Condition : Condition) return String;
--
-- Returns the most recently SET information contained in
-- FROM_CONDITION formatted in a style suitable for use in
-- generating log messages. The format of this information
-- is ... ERROR_NAME & ", " & MESSAGE
--
-- When either of ERROR_NAME or MESSAGE are the empty string, the
-- intervening delimiter is omitted. In this description,
-- ERROR_NAME refers to the value provided in the first parameter of
-- MAKE, and MESSAGE refers to the value provided in the MESSAGE
-- parameter of APPEND_CONDITION and SET.
function Exception_Info return String;
--
-- Called in the context of an exception handler, returns
-- descriptive information about the name of the exception
-- and the location at which it was raised.
function Is_Error (A_Condition : Condition;
Severity : Error_Severity := Errors.Warn)
return Boolean renames Simple_Status.Error;
--
-- Returns SEVERITY (A_CONDITION) >= SEVERITY.
-- (e.g. IS_ERROR (NONE) => False; IS_ERROR (OPEN_ERROR) => True)
function Is_Equal (A_Condition : Condition;
An_Error : Error_Kinds) return Boolean
renames Simple_Status.Equal;
--
-- Returns KIND (A_CONDITION) = AN_ERROR.
--
-- NOTE: The severity component of A_CONDITION does not
-- participate in the comparison.
----------------------------------------------------------
-- The following are utilities for logging error messages
----------------------------------------------------------
subtype Log_Level is Profile.Msg_Kind;
----- Log_Level Constants
--
Auxiliary : constant Log_Level := Profile.Auxiliary_Msg;
Debug : constant Log_Level := Profile.Debug_Msg;
Note : constant Log_Level := Profile.Note_Msg;
Positive : constant Log_Level := Profile.Positive_Msg;
Position : constant Log_Level := Profile.Position_Msg;
Negative : constant Log_Level := Profile.Negative_Msg;
Warning : constant Log_Level := Profile.Warning_Msg;
Error : constant Log_Level := Profile.Error_Msg;
Xception : constant Log_Level := Profile.Exception_Msg;
Sharp : constant Log_Level := Profile.Sharp_Msg;
At_Sign : constant Log_Level := Profile.At_Msg;
Dollar : constant Log_Level := Profile.Dollar_Msg;
procedure Report_Exception (Where, What : String;
Level : Log_Level := Errors.Error;
Dont_Log, In_Message_Window : Boolean := False);
--
-- To be called in the context of an exception handler to
-- display EXCEPTION_INFO in addition to information normally
-- generated by REPORT below.
procedure Report (Where, What : String;
With_Condition : Condition;
Level : Log_Level := Errors.Note;
Dont_Log, In_Message_Window : Boolean := False);
--
-- Generates a message of the following format to the current log
-- device ... WHERE & "; " & WHAT & " (" & INFO (WITH_CONDITION) & ')'
--
-- When WHERE is the null string, the semicolon separator is omitted
-- from the display. When WITH_CONDITION contains good status, the
-- parentheses and their contents are omitted from the display.
procedure Report (Where, What : String;
Level : Log_Level := Errors.Note;
Dont_Log, In_Message_Window : Boolean := False);
--
-- Generates a message of the following format to the current log
-- device ... WHERE & "; " & WHAT
--
-- When WHERE is the null string, the semicolon separator is omitted
-- from the display.
--------------------------------------------------------------
-- The following are errors used within the Design Facility
--------------------------------------------------------------
None : constant Error_Kinds :=
Make ("NONE", Errors.Normal);
Internal_Error : constant Error_Kinds :=
Make ("INTERNAL_ERROR", Errors.Fatal);
Unknown : constant Error_Kinds :=
Make ("UNKNOWN", Errors.Fatal);
Unhandled_Exception : constant Error_Kinds :=
Make ("UNHANDLED_EXCEPTION", Errors.Fatal);
Unimplemented : constant Error_Kinds :=
Make ("UNIMPLEMENTED", Errors.Fatal);
Open_Error : constant Error_Kinds :=
Make ("OPEN_ERROR", Errors.Problem);
Create_Error : constant Error_Kinds :=
Make ("CREATE_ERROR", Errors.Problem);
Access_Error : constant Error_Kinds :=
Make ("ACCESS_ERROR", Errors.Problem);
Lock_Error : constant Error_Kinds :=
Make ("LOCK_ERROR", Errors.Problem);
Mapping_Error : constant Error_Kinds :=
Make ("MAPPING_ERROR", Errors.Problem);
Inconsistency : constant Error_Kinds :=
Make ("INCONSISTENCY", Errors.Problem);
Table_Overflow : constant Error_Kinds :=
Make ("TABLE_OVERFLOW", Errors.Problem);
Undefined : constant Error_Kinds :=
Make ("UNDEFINED", Errors.Warn);
Obsolete : constant Error_Kinds :=
Make ("OBSOLETE", Errors.Warn);
Invalid_Options : constant Error_Kinds :=
Make ("INVALID_OPTIONS", Errors.Fatal);
Warnings_Generated : constant Error_Kinds :=
Make ("WARNINGS_GENERATED", Errors.Warn);
procedure Report_Condition (Status : Condition);
--
-- Displays the accumulated information contained in STATUS.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3584);
pragma Bias_Key (27);
end Errors;with System;
package Heap_Strings is
type Astring is access String;
pragma Segmented_Heap (Astring);
---------------------------------------------------------------------
-- If you're going to do a lot of ASTRING allocation within a
-- job, getting and initializing a STORAGE_HEAP object (and using
-- the flavor of calls that take a STORAGE_HEAP) will improve
-- preformance somewhat.
---------------------------------------------------------------------
type Storage_Heap is private;
function Initialize return Storage_Heap;
---------------------------------------------------------------------
-- Allocate new ASTRINGs. The order below indicates the relative
-- performance, the first is slowest, last is the fastest.
-- The middle call allocates the new ASTRING on the STORAGE_HEAP of
-- the FROM_POINTER param, if FROM_POINTER is uninitialized, the call
-- is identical to the first.
---------------------------------------------------------------------
function Allocate (Data : String) return Astring;
function Allocate (Data : String; From_Pointer : Astring) return Astring;
function Allocate (Data : String; From_Heap : Storage_Heap) return Astring;
---------------------------------------------------------------------
-- Append to an ASTRING. If the target is uninitialized, append will
-- allocate the strings on the default STORAGE_HEAP or on the
-- source's STORAGE_HEAP (if it is an ASTRING and it is initialized).
---------------------------------------------------------------------
procedure Append (To_Target : in out Astring; Source : String);
procedure Append (To_Target : in out Astring; Source : Astring);
procedure Replace (In_Target : Astring; The_Char, With_Char : Character);
-- Hide this one ...
function Allocate
(Data : String; From_Heap : System.Segment) return Astring;
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3580);
pragma Bias_Key (27);
private
type Storage_Heap is new System.Segment;
end Heap_Strings;with Ada_Program;
with Errors;
with Document;
with Pdl;
with System;
package Mapping is
subtype Area is Pdl.Area;
Nil_Area : Area renames Pdl.Default_Area;
procedure Set (The_Area : out Area;
First_Line : Natural;
First_Column : Natural;
Last_Line : Natural;
Last_Column : Natural)
renames Pdl.Set_Range;
Nil_Document : Document.Element renames Document.Nil_Element;
Nil_Pdl : Ada_Program.Element renames Ada_Program.Nil_Element;
-----------------------------------------------------------
-- TARGET_INFOs are not 'safe' objects. To save them in
-- permanent objects (like files) they must be converted to
-- TARGET_INFO_PERMANENT_REPRESENTATIONs.
-----------------------------------------------------------
type Target_Info is private;
Nil_Target_Info : constant Target_Info;
function Is_Nil (A_Target : Target_Info) return Boolean;
function Create (Pdl_Reference : Ada_Program.Element := Nil_Pdl;
Document_Reference : Document.Element := Nil_Document;
Pdl_Area : Area := Nil_Area;
Document_Area : Area := Nil_Area) return Target_Info;
function Create (Pdl_References : Ada_Program.Element_List;
Document_References : Document.Element_List)
return Target_Info;
procedure Add_Pdl_Reference (To_Target : in out Target_Info;
Pdl_References : Ada_Program.Element_List);
procedure Add_Pdl_Reference
(To_Target : in out Target_Info;
Pdl_Reference : Ada_Program.Element;
Pdl_Area : Area := Nil_Area);
procedure Add_Document_Reference
(To_Target : in out Target_Info;
Document_References : Document.Element_List);
procedure Add_Document_Reference
(To_Target : in out Target_Info;
Document_Reference : Document.Element;
Document_Area : Area := Nil_Area);
function Contains_Pdl_Reference (In_Target : Target_Info) return Boolean;
function Contains_Document_Reference
(In_Target : Target_Info) return Boolean;
function Documents_In (A_Target : Target_Info) return Document.Element_List;
function Pdl_In (A_Target : Target_Info) return Ada_Program.Element_List;
-----------------------------------------------------------
-- TARGET_INFOs are not 'safe' objects. To save them in
-- permanent objects (like files), they must be converted to
-- TARGET_INFO_PERMANENT_REPRESENTATIONs.
-----------------------------------------------------------
type Target_Info_Permanent_Representation is new String;
function Convert (Target : Target_Info;
Within : String := "<SUBSYSTEM>")
return Target_Info_Permanent_Representation;
-- The WITHIN parameter specifies how fully qualified the
-- representation is (or should be resolved). When converting from
-- a target info to a permanent representation, the values can be :
-- <FULL> - The info's fully qualified resolution is
-- returned.
-- <SUBSYSTEM> - The resolution of the info is subsystem
-- relative. Subsystem name and spec or load origin
-- is preserved.
-- <VIEW> - The resolution of the element is view relative.
-- No origin information is preserved.
--
-- Storage for <SUBSYSTEM> or <VIEW> representation are less than
-- <FULL> but some origin information is lost.
--
procedure Convert (Target_Rep : Target_Info_Permanent_Representation;
Result : out Target_Info;
Status : in out Errors.Condition;
Within : String := "<DEFAULT>");
-- When converting from a permanent representation to a target info,
-- an attempt is made to fill in any missing information in the
-- permanent representation from the WITHIN parameter. So, in all
-- cases, if the permanent representation was FULLy resolved the
-- WITHIN parameter is ignored, otherwise :
-- <DEFAULT> - For <SUBSYSTEM>, the view selected by
-- the current activity for the stored subsystem is
-- used as the origin. The spec or load origin of the
-- representation is used to pick the specific view.
-- For <VIEW>, the current view context is used as
-- the origin.
-- subsystem name - For <SUBSYSTEM>, same as <DEFAULT>.
-- For <VIEW>, the view selected by the current
-- activity for the specified subsystem is used.
-- The subsystem name can be followed by "'SPEC" or
-- "'LOAD" to force use of the spec view or load
-- view from the activity. (Defaults to Spec View)
-- view name - For <SUBSYSTEM>, if the subsystem containing the
-- specified view matches the representation's
-- subsystem, the specified view is used.
-- If no match, same as <DEFAULT>.
-- For <VIEW> the specified view is used.
procedure Definition (Of_Target_Info : Target_Info;
In_Place : Boolean := False;
Edit : Boolean := False;
Status : in out Errors.Condition);
-- Hide these ...
procedure Convert (Target_Rep : Target_Info_Permanent_Representation;
Result : out Target_Info;
Status : in out Errors.Condition;
Within : String := "<DEFAULT>";
Use_Heap : System.Segment);
function Create
(Pdl_Reference : Ada_Program.Element := Nil_Pdl;
Document_Reference : Document.Element := Nil_Document;
Pdl_Area : Area := Nil_Area;
Document_Area : Area := Nil_Area;
Use_Heap : System.Segment) return Target_Info;
function Create (Pdl_References : Ada_Program.Element_List;
Document_References : Document.Element_List;
Use_Heap : System.Segment) return Target_Info;
function Debug_Image (Of_Target_Info : Target_Info;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3583);
pragma Bias_Key (27);
private
type Target_Data;
type Target_Info is access Target_Data;
pragma Segmented_Heap (Target_Info);
Nil_Target_Info : constant Target_Info := null;
end Mapping;with Ada_Program;
with Errors;
with Heap_Strings;
with System;
pragma Private_Eyes_Only;
with Ada_Text;
package Pdl is
subtype Astring is Heap_Strings.Astring;
-------------------------
---- ADA ERROR MARKS ----
-------------------------
procedure Mark_Error (At_Element : Ada_Program.Element;
Message : String);
procedure Mark_Warning (At_Element : Ada_Program.Element;
Message : String);
-- For marking error or warning messages on a particular element node,
-- these will show up a underlined/annotated areas in the AOE.
-- Should be used only by knowledgeable individuals.
-------------------------
---- ERROR DIAGNOSIS ----
-------------------------
Failed : exception;
-- This exception indicates a specification or internal error, more
-- information can be extracted by calling DIAGNOSIS or STATUS.
function Diagnosis return String;
function Status return Errors.Condition;
-- Whenever an error condition is detected (and exception is raised)
-- a diagnostic message/status is stored. These functions retrieve the
-- diagnostic for the most recent error.
---------------
---- AREAs ----
---------------
-- AREAs are used to indicate where a construct lives in the ada image.
-- AREAs should only be used by knowledgeable individuals.
type Area is private;
Default_Area : constant Area;
procedure Get_Range (Of_Area : Area;
Start_Line, Start_Column,
Finish_Line, Finish_Column : out Natural);
procedure Set_Range (Of_Area : out Area;
Start_Line, Start_Column,
Finish_Line, Finish_Column : Natural);
\f
--------------------------------
---- PDL REGISTRATION TYPES ----
--------------------------------
--------------
-- Analysis --
--------------
type Analysis_Mode is (Complete, Demote, Promote);
type Unit_State is (Source, Installed, Coded);
-- At the start of PDL Analysis, the user is called through the
-- generic formal TRAVERSAL_PRE_OP. Several items of interest
-- are passed to the user at this point.
--
-- 1) The current analysis mode (Complete, Demote, Promote)
-- 2) The current unit state (Source, Installed, Coded)
-- 3) The desired goal state (Source, Installed, Coded)
--
-- This information should be used to determine the exact form
-- of analysis which is to be performed during the subsequent
-- traversal.
subtype Traversal_Control is Ada_Program.Traversal_Control;
type Analysis_Status is (Success, Warning, Error);
---------------------
-- Command Mapping --
---------------------
type Mapping_Operation is (Explain,
Definition,
Enclosing,
Show_Usage);
type Mapping_Parameters (For_Operation : Mapping_Operation) is
record
case For_Operation is
when Definition | Enclosing =>
In_Place : Boolean;
case For_Operation is
when Definition =>
Visible : Boolean;
when others =>
null;
end case;
when Explain =>
null;
when Show_Usage =>
In_World : Heap_Strings.Astring;
end case;
end record;
type Mapping_Status is (Success, Not_Defined, Error);
--------------------
-- Identification --
--------------------
subtype Pdl_Names is String;
type Pdl_Ids is (Pdl_01, Pdl_02, Pdl_03, Pdl_04, Pdl_05, Pdl_06,
Pdl_07, Pdl_08, Pdl_09, Pdl_10, Pdl_11, Pdl_12);
--------------------------------------------------------------------------
--
-- Official Interface to the Design Facility Operations.
--
-- The following operations require that one of the preceding
-- PDL_IDS has been registered on the machine and is associated
-- with the view in which they are executed.
--
-- Each operation raises Pdl.Failed when it cannot be
-- successfully completed.
--
package Operations is
procedure Complete (Include_Optional_Annotations : Boolean := False);
procedure Definition (In_Place : Boolean := False;
Visible : Boolean := True);
procedure Enclosing (In_Place : Boolean := False);
procedure Explain;
procedure Format;
procedure Show_Usage (In_World : String := "");
end Operations;
\f
------------------------------
---- ANNOTATION UTILITIES ----
------------------------------
-- The following functions are used as defaults for the annotation
-- generic. The defaults are the standard for Rational's PDL.
procedure At_Recognizer (S : String;
Keyword_Start, Keyword_End : out Natural;
Argument_Start : out Natural);
-- Recognizes strings that have '@' in them delimited by a ' '.
-- Returns position of '@' +1, ' ' -1 and ' ' +1.
function Bar_Recognizer (S : String) return Natural;
-- Given a string, returns the position of the first non-blank
-- characters after "--|". Returns 0 if the first non-blank
-- characters are not "--|". Returns S'Last + 1 if there are
-- no non-blank characters after the "--|".
function At_Prepend (S : String) return String;
-- Given a string, prepends '@' to it.
function Bar_Prepend (S : String) return String;
-- Given a string, prepends "--| " to it.
----------------------------
---- ANNOTATION GENERIC ----
----------------------------
generic
type Keywords is (<>); -- Keywords'First MUST be the enumeral Nil
type Phases is (<>); -- Phases'First MUST be the enumeral Nil
type Elements is (<>); -- Elements'First MUST be the enumeral Nil
type Rules is (<>); -- Rules'First MUST be the enumeral Nil
with function Keyword_Image (Keyword : Keywords)
return String is Keywords'Image;
with function Phase_Image (Phase : Phases)
return String is Phases'Image;
with function Element_Image (Element : Elements)
return String is Elements'Image;
with function Rule_Image (Rule : Rules)
return String is Rules'Image;
with function Annotation_Recognizer (Comment_Line : String)
return Natural is Bar_Recognizer;
-- Used to identify comments that are annotations.
-- Should return an index into COMMENT_LINE of the first non-blank
-- characters after the annotation indication. Should return 0
-- if the comment line is not an annotation. Should return
-- COMMENT_LINE'Last + 1 if there are no non-blank characters other
-- than the annotation indicators. The default recognizes the
-- characters "--|" as an annotation indicator.
with procedure Keyword_Recognizer
(S : String;
Keyword_Start, Keyword_End : out Natural;
Argument_Start : out Natural) is At_Recognizer;
-- Returns the locations in the string to scan for a keyword
-- and arguments.
-- KEYWORD_START = 0 indicates this string can't contain a
-- keyword. KEYWORD_END = 0 may be used to indicate that the
-- keyword extends to the end of the string. ARGUMENT_START
-- indicates the location to be used to start scanning for
-- arguments (if set to 0 indicates no argument exists in S).
-- Leading and trailing blanks between _START and _END are ignored.
-- The default recognizes '@' as the keyword prefix and ' ' as
-- the keyword terminator.
with function Keyword_Generator
(Keyword_Image : String) return String is At_Prepend;
-- Returns the formatted string that the keyword recognizer would
-- successfully recognize as a keyword. The default prepends an
-- '@' to the keyword image.
with function Annotation_Generator
(Annotation_Image : String) return String is
Bar_Prepend;
-- Returns the formatted string that the annotation recognizer would
-- successfully recognize as an annotation. The default prepends
-- "--| " to the annotation image.
package Annotation is
------------------------------
---- ANNOTATION ARGUMENTS ----
------------------------------
package Argument is
type Kinds is
(Nil, Name, Number, Text, Associated,
Indexed, Prompt, List, Reserved_None);
subtype Object_Kinds is Kinds range Name .. Prompt;
subtype Object_Identifier_Kinds is
Object_Kinds range Name .. Number;
type Kind_Vector is array (Kinds) of Boolean;
type Description is
record
Legal_Kinds : Kind_Vector;
User_Check : Boolean := False;
Prompt : Astring := null;
Error_Message : Astring := null;
Add_Prompt_Delimiters : Boolean := True;
end record;
function Create_Description
(Legal_Kinds : Kind_Vector;
User_Check : Boolean := False;
Prompt : Astring := null;
Error_Message : Astring := null;
Add_Prompt_Delimiters : Boolean := True)
return Description;
--
-- This procedure is supplied as a convenience for generating
-- a DESCRIPTION that has defaults.
type Info is private;
Nil_Info : constant Info;
function Is_Nil (An_Info : Info) return Boolean;
type Info_List is private;
Nil_List : constant Info_List;
function Is_Nil (A_List : Info_List) return Boolean;
function Create_Default
(Description_Info : Description) return Info;
-- Creates an argument with the correct kind and image (a prompt
-- if appropriate). This is mainly used in COMPLETION.
function Kind (Of_Info : Info) return Kinds;
-- NIL is returned if an uninitialized INFO is specified.
function Image (Of_Info : Info) return String;
-- Null string ("") is returned if an uninitialized INFO is specified.
function Argument_Area (Of_Info : Info) return Area;
-- DEFAULT_AREA is returned if an uninitialized INFO is specified or
-- if the INFO was not extracted from an Annotation that is attached
-- to an ADA_PROGRAM.ELEMENT. (e.g. created by CREATE_DEFAULT).
function Associated_Ada_Program_Element
(Of_Info : Info) return Ada_Program.Element;
-- ADA_PROGRAM.NIL_ELEMENT is returned if an uninitialized INFO is
-- specified or if the INFO was not extracted from an Annotation
-- that is attached to an ADA_PROGRAM.ELEMENT.
function Corresponding_Info
(At_Area : Area;
In_Element : Ada_Program.Element) return Info;
--
-- Returns the INFO described by AT_AREA and IN_ELEMENT. When
-- these parameters do not correlate to an INFO, the NIL_INFO
-- is returned.
procedure Definition (Of_Info : Info;
In_Place : Boolean := False;
Edit : Boolean := False;
Status : in out Errors.Condition);
--
-- Brings up an Ada window on the Ada element attached to OF_INFO.
---------------------------
-- Operations on OBJECTs --
---------------------------
-- Names : <ada-simple>
-- | { <ada-simple or prompt>. } <ada-simple or prompt>
-- | <directory-naming-expression>
subtype Name_Info is Info;
type Name_Kinds is (Ada_Simple, Ada_Complex, Naming_Expression,
Id_Prompt, Not_A_Name);
function Name_Kind (Of_Name : Name_Info) return Name_Kinds;
function Segment_Count (Of_Name : Name_Info) return Positive;
function Parent (Of_Name : Name_Info) return Name_Info;
-- Returns the parent of the name
-- Parent ("A.B.C") => "A.B"
-- Parent ("A") => Nil_Info
function Simple_Name (Of_Name : Name_Info) return Name_Info;
-- Returns the simple name of the name
-- Simple_Name ("A.B.C") => "C"
-- Simple_Name ("A") => "A"
-- Numbers : ada number
subtype Number_Info is Info;
type Number_Kinds is (Integer_Literal, Real_Literal, Not_A_Number);
function Number_Kind (Of_Number : Number_Info) return Number_Kinds;
function Value (Of_Integer_Number : Number_Info)
return Long_Integer;
--
-- Returns the integer value for OF_INTEGER_NUMBER.
-- When NUMBER_KIND (OF_INTEGER_NUMBER) /= INTEGER_LITERAL,
-- Long_Integer'First is returned.
function Value (Of_Real_Number : Number_Info) return Float;
--
-- Returns the float value for OF_REAL_NUMBER.
-- When NUMBER_KIND (OF_REAL_NUMBER) /= REAL_LITERAL,
-- Float'First is returned.
-- Associated Arguments : <name> => <info>
function Association_Name (For_Association : Info) return Name_Info;
-- returns NAME_INFOs only.
function Associated_Info (For_Association : Info) return Info;
-- returns any KINDS.
-- Indexed Arguments : <name> <list>
subtype Indexed_Info is Info;
function Indexed_Name (Of_Argument : Indexed_Info) return Name_Info;
-- returns NAME_INFOs only.
function Index_List (Of_Argument : Indexed_Info) return Info_List;
-- returns a list of INFOs of any KINDS.
-------------------------
-- Operations on LISTs --
-------------------------
function Initialize (From_Info : Info) return Info_List;
-- Works on anything;
-- If KIND is LIST, returns a iterator of list components.
-- If KIND is TEXT, examines the TEXT for list delimiters and
-- returns an iterator of those delimited components.
-- delimiters are NEW LINES and commas.
-- If KIND is anything else, returns a list containing the one
-- component, FROM_INFO.
procedure Copy (From : Info_List;
To : out Info_List);
--
-- The entire contents of FROM are copied onto TO regardless of
-- the current 'position' of FROM. The previous contents of
-- TO are lost, and INFOs are not shared between FROM and TO.
procedure Append (An_Info : Info;
To : in out Info_List);
procedure Prepend (An_Info : Info;
To : in out Info_List);
procedure Append (From : Info_List;
To : in out Info_List);
function Length (Of_List : Info_List) return Natural;
--
-- Returns the number of INFOs in OF_LIST. This operation is
-- independent of the current 'position' in the list. When
-- IS_NIL (OF_LIST), 0 is returned.
function Done (On_List : Info_List) return Boolean;
function Value (Of_List : Info_List) return Info;
procedure Next (On_List : in out Info_List);
procedure Reset (A_List : in out Info_List);
function Value_Image (Of_List : Info_List) return String;
-- Image of the current value, equivalent to the call:
-- Argument.Image (Argument.Value (Of_List))
----------------------------------
-- Argument Errors and Warnings --
----------------------------------
procedure Mark_Error (On_Info : Info; Message : String);
procedure Mark_Warning (On_Info : Info; Message : String);
--
-- For marking error or warning messages on a particular arguments,
-- these will show up a underlined/annotated areas in the AOE.
--
-- Raises PDL.FAILED when IS_NIL (ON_INFO) is true OR
-- when ON_INFO is not associated with an Ada image.
----------------------
-- Argument Parsing --
----------------------
procedure Parse (Input : String;
Result : out Info);
--
-- Parses INPUT and produces an argument info in RESULT.
-- Leading and trailing blanks are ignored. When INPUT
-- has syntax errors, PDL.FAILED is raised. STATUS and
-- DIAGNOSIS may be used to obtain additional information
-- about the error.
--
-- NOTE: Since RESULT is not associated with an
-- ADA_PROGRAM.ELEMENT, the result cannot
-- be used in a call to MARK_ERROR or
-- MARK_WARNING.
-- Hide these ...
function Create
(Kind : Kinds;
Image : String;
Use_Heap : System.Segment;
Add_Prompt_Delimiters : Boolean := True) return Info;
-- Creates an argument INFO. If the KIND is OBJECT_NAME the text string
-- is resolved as a fully qualified object name.
-- If the IMAGE is wrong for a particular KIND, FAILED is raised.
-- If the IMAGE string is defaulted, a default INFO (that may not
-- parse) is created.
procedure Parse (Input : String;
Use_Heap : System.Segment;
Result : in out Info);
-- Parse Input and produce an argument Info. Leading and
-- trailing blanks are ignored. Failed will be raised if
-- there is a syntax error in the argument.
-- Note that the result cannot be used to MARK_xxx.
procedure Parse (Associated : Ada_Program.Element;
Argument_Image_Area : Area;
Use_Heap : System.Segment;
Result : in out Info);
-- Parse argument specified by ARGUMENT_IMAGE_AREA in the
-- ASSOCIATED ada program image and produce an argument INFO.
-- Leading and trailing blanks are ignored. FAILED will be raised
-- if there is a syntax error in the argument.
procedure Field_Copy (From_Info : Info;
To_Info : in out Info);
-- If a data type contains an Info and that data type is stored
-- in a segmented heap and a selector on that pointed to object
-- returns an Info, use this to get the Info. It will un-
-- normalize the internal segmented heap pointers.
procedure Field_Copy (From_List : Info_List;
To_List : in out Info_List);
-- If a data type contains an Info_List and that data type is
-- stored in a segmented heap and a selector on that pointed
-- to object returns an Info, use this to get the Info. It
-- will un-normalize the internal segmented heap pointers.
function Debug_Image (Of_Info : Info;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_List : Info_List;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
private
type Node_Data (Kind : Kinds);
type Node is access Node_Data;
pragma Segmented_Heap (Node);
type Info is
record
-- True if this is from an Ada unit; False if it is
-- from a string
From_Ada_Unit : Boolean;
-- This field is there if From_Ada_Unit is True
Element : Ada_Program.Element;
-- This field is there if From_Ada_Unit is False
Source : Astring;
-- This is the root of the Info
Tree : Node;
end record;
Nil_Info : constant Info :=
Info'(From_Ada_Unit => False,
Element => Ada_Program.Nil_Element,
Source => null,
Tree => null);
type Info_List is
record
-- True if this is from an Ada unit; False if it is
-- from a string
From_Ada_Unit : Boolean;
-- This field is there if From_Ada_Unit is True
Element : Ada_Program.Element;
-- This field is there if From_Ada_Unit is False
Source : Astring;
-- The number of elements in the list
Length : Natural;
-- First is the start of the list. Current is the
-- current element of the list.
First : Node;
Current : Node;
end record;
Nil_List : constant Info_List :=
Info_List'(From_Ada_Unit => False,
Element => Ada_Program.Nil_Element,
Source => null,
Length => 0,
First => null,
Current => null);
end Argument;
-- Annotation ELEMENTs form the basis for querying and manipulating
-- annotations. Every ELEMENT is 'attached' to a ADA_PROGRAM.ELEMENT
-- (unless the annotation is isolated - separated from all ada
-- constructs by blank lines - or is generated by CREATE).
type Kinds is (Invalid, Keyword, Simple);
type Element is private;
Nil_Element : constant Element;
function Is_Nil (An_Element : Element) return Boolean;
function Is_Attached (The_Annotation : Element) return Boolean;
function Attached_To (The_Annotation : Element)
return Ada_Program.Element;
function Annotation_Area (The_Annotation : Element) return Area;
function Corresponding_Element
(At_Area : Area;
In_Element : Ada_Program.Element) return Element;
--
-- Returns the ELEMENT described by AT_AREA and IN_ELEMENT. When
-- these parameters do not correlate to any element, the NIL_ELEMENT
-- is returned.
procedure Definition (Of_Element : Element;
In_Place : Boolean := False;
Edit : Boolean := False;
Status : in out Errors.Condition);
--
-- Brings up an Ada window on OF_ELEMENT. This operation is
-- intended only for ELEMENTs for which IS_ATTACHED (OF_ELEMENT)
-- is TRUE.
----------------------
-- Query Operations --
----------------------
function Kind (Of_Annotation : Element) return Kinds;
function Image (Of_Annotation : Element) return String;
function Keyword (Of_Annotation : Element) return Keywords;
function Argument_Of (The_Annotation : Element) return Argument.Info;
-- Argument and Keyword are valid only for Keyword
-- kinds of annotations. FAILED is raised otherwise.
-- BAD_ANNOTATION may be raised if the annotation is bogus.
-- Use DIAGNOSE on that annotation to determine what the problem is.
Bad_Annotation : exception;
function Diagnose (An_Annotation : Element) return String;
-- Returns an analysis of a bad annotation or the null string
-- if nothing is wrong.
----------------------
-- Annotation Lists --
----------------------
-- Annotation ELEMENT_LISTs are the obvious. Operations are provided
-- to query and manipulate these lists.
type Element_List is private;
Nil_List : constant Element_List;
-- Assignment on ELEMENT_LISTs DOES NOT CAUSE A COPY TO BE MADE!
-- Use COPY to do that.
procedure Copy (From_List : Element_List;
To_List : in out Element_List);
procedure Add (An_Element : Element; To_List : in out Element_List);
procedure Append (A_List : Element_List; To_List : in out Element_List);
function Done (The_List : Element_List) return Boolean;
function Value (In_List : Element_List) return Element;
procedure Next (In_List : in out Element_List);
procedure Reset (The_List : in out Element_List);
-----------------------------
-- Annotation Manipulation --
-----------------------------
-- The following are operations to query, modify and mark PDL.
-- The mark and modification routines should only be used within
-- the confines of the PDL definition code (toolsmith code
-- registered by the PDL.ANNOTATION.DESCRIPTION generic)
type Positions is (Before, After, Inside, Any);
-- Annotations can live before, after or inside PDL elements.
-- (inside is the same as after if the PDL element doesn't have
-- internal structure, EG. Package specs or subprogram bodies
-- have internal structure while IDs or variable decls don't)
-- FIND and INSERT use the above enumeration to identify areas
-- of interest.
procedure Find (For_Element : Ada_Program.Element;
Result : in out Element_List;
Contains_Bad_Annotations : out Boolean;
Position : Positions := Any);
-- FIND can be used to find any annotations attached to an element.
-- If CONTAINS_BAD_ANNOTATIONS is true, some elements in the list
-- are bad (contain invalid keywords for example), use DIAGNOSE
-- on each list element to figure out which elements are bad.
-- The ATTACHED_TO and ATTACHED_AREA attributes of the annotation
-- element(s) found reflect their positions within the ADA image.
function Create (From_Image : String) return Element;
function Create (From_Keyword : Keywords; With_Argument : Argument.Info)
return Element;
-- These can be used to create an annotation to be attached
-- to an Ada_Program.Element with the Insert call.
-- The ATTACHED_TO and ATTACHED_AREA attributes of the annotation
-- element(s) are nil.
procedure Insert (On_Element : Ada_Program.Element;
An_Annotation : Element;
Position : Positions := Before;
After_Annotation : Element := Nil_Element;
Leading_Blanks : Natural := 0);
procedure Insert (On_Element : Ada_Program.Element;
Annotations : in out Element_List;
Position : Positions := Before;
After_Annotation : Element := Nil_Element;
Leading_Blanks : Natural := 0);
-- For adding annotations to the PDL. Mainly used in COMPLETion.
-- The AFTER_ANNOTATION parameter can be used to indicate where
-- in the image the new annotations are to be inserted. If
-- the parameter is defaulted the new annotation(s) are inserted
-- in such a way that FIND (with the same POSITION parameter)
-- could locate them.
-- If AFTER_ANNOTATION is not nil (and its ATTACHED_TO attribute
-- is also not nil), it must be attached to ON_ELEMENT.
-- POSITION = ANY is the same as the default.
-- LEADING_BLANKS indicates how many blanks to put before the
-- comment indicator ('--').
procedure Mark_Error (On_Annotation : Element;
Message : String;
Mark_Restriction : Area := Default_Area);
procedure Mark_Warning (On_Annotation : Element;
Message : String;
Mark_Restriction : Area := Default_Area);
-- For marking error or warning messages on a particular annotations,
-- these will show up a underlined/annotated areas in the AOE.
\f
------------------------------------------
---- DESCRIPTION REGISTRATION GENERIC ----
------------------------------------------
-----------------------
-- Relevance Vectors --
-----------------------
type Element_Relevance is array (Elements) of Boolean;
type Rule_Relevance is array (Rules) of Boolean;
Nil_Elements : constant Element_Relevance := (others => False);
Nil_Rules : constant Rule_Relevance := (others => False);
generic
Pdl_Name : Pdl_Names;
Pdl_Id : Pdl_Ids;
Allow_Reregistration : Boolean := False;
type Traversal_State is private;
with procedure Get_Elements
(Associated_With : Ada_Program.Element;
State : in out Traversal_State;
Result : out Element_Relevance);
--
-- GET_ELEMENTS is invoked during Semanticize and PDL
-- Completion to determine whether ASSOCIATED_WITH adheres
-- to invariants defined for ELEMENTS in the
-- ELEMENT_DESCRIPTION_FILE. This operation provides the
-- mapping between Ada_Program Elements and the members of
-- the ELEMENTS enumeration. When ASSOCIATED_WITH is not
-- related to a corresponding Design Element, NIL_ELEMENTS should
-- be returned in RESULT.
--
-- This operation is used to perform the automatic insertion
-- of annotations during PDL Completion and for PDL semantic
-- error detection during Semanticize.
--
with procedure Get_Rules
(Associated_With : Ada_Program.Element;
State : in out Traversal_State;
Result : out Rule_Relevance);
--
-- GET_RULES is invoked during Semanticize to determine
-- whether ASSOCIATED_WITH adheres to invariants defined for
-- RULES in the RULE_DESCRIPTION_FILE. This operation
-- provides the mapping between Ada_Program Elements and the
-- members of the RULES enumeration. When ASSOCIATED_WITH
-- is not related to a corresponding Design Rule, NIL_RULES
-- should be returned in RESULT.
--
-- This operation is used to detect Design Rule violations
-- during Semanticize.
--
with procedure Argument_Check (For_Keyword : Keywords;
With_Argument : Argument.Info;
On_Element : Ada_Program.Element;
Status : out Analysis_Status;
Message : out Astring);
--
-- Invoked when a keyword argument is processed and the User_Check
-- bit is set for that keyword after passing the gross syntax
-- type checks. The MESSAGE is displayed in the Message window along
-- with a success/failure message.
--
with procedure Mapping_Link (For_Keyword : Keywords;
With_Argument : Argument.Info;
On_Element : Ada_Program.Element;
Operation : Mapping_Operation;
Parameters : Mapping_Parameters;
Status : out Mapping_Status);
--
-- Invoked on a front door Definition, Enclosing, Explain or
-- Show_Usage where a keyword is selected. The closest
-- Ada_Program.Element 'attached' to the selection is
-- provided for context.
--
with procedure Traversal_Pre_Op
(Current_State : Unit_State;
Goal_State : Unit_State;
Mode : Analysis_Mode;
Phase : in out Phases;
Root_Element : Ada_Program.Element;
Major_Elements_Only : out Boolean;
User_State : out Traversal_State);
--
-- Invoked at the start of PDL Analysis to provide the user with
-- various information about the Ada element to be analyzed and
-- the kind of analysis to be performed. If this information is
-- needed during the subsequent traversal, then the user should
-- store the information in the TRAVERSAL_STATE parameter for
-- subsequent availability.
with procedure Element_Pre_Op
(On_Element : Ada_Program.Element;
User_State : in out Traversal_State;
Control : out Traversal_Control);
with procedure Element_Post_Op
(On_Element : Ada_Program.Element;
User_State : in out Traversal_State;
Control : out Traversal_Control);
with procedure Traversal_Post_Op
(User_State : in out Traversal_State;
Status : out Analysis_Status;
Message : out Astring);
--
-- Invoked upon traversal of an ada program during
-- completion, semanticization, promotion, and demotion.
-- The traversal is depth first and may be controlled by the
-- CONTROL parameter, which determines at what level the
-- traversal should continue. See ADA_PROGRAM.TRAVERSAL_CONTROL
-- for a detailed explanation of the mechanisms for controlling
-- the traversal.
--
-- TRAVERSAL_PRE_OP is called once before traversal starts
-- and may be used to initialize user state.
--
-- TRAVERSAL_POST_OP is called once after the traversal is
-- done. If TRAVERSAL_POST_OP returns STATUS = ERROR or
-- WARNING, then the unit will not be Installed
-- and MESSAGE is displayed on the user's message window.
--
-- If STATUS = ERROR and MODE = SEMANTICIZE, then
-- the semanticize operation is considered a failure.
--
pragma Must_Be_Constrained (Yes => Traversal_State);
package Description is
--------------------------------------
-- Description Types and Operations --
--------------------------------------
-- KEYWORD DESCRIPTION INFORMATION
function Argument_Description
(Of_Keyword : Keywords) return Argument.Description;
procedure Set_Description (Of_Keyword : Keywords;
To : Argument.Description);
--
-- This operation is provided for backward compatibility to
-- previous releases.
-- ELEMENT DESCRIPTION INFORMATION
type Annotation_Presence is (Nil, Forbidden, Optional,
Required, Required_Non_Prompt);
type Presence_Vector is array (Keywords) of Annotation_Presence;
function Presence (Of_Keyword : Keywords;
On_Element : Elements;
At_Phase : Phases) return Annotation_Presence;
function Keyword_Presence
(For_Element : Elements;
At_Phase : Phases) return Presence_Vector;
-- RULE DESCRIPTION INFORMATION
type Rule_Enforcement is (Nil, Forbidden, Required);
function Enforcement (Of_Rule : Rules;
At_Phase : Phases) return Rule_Enforcement;
--------------------------
-- Description Analysis --
--------------------------
procedure Register
(Keyword_Description_File : String;
Element_Description_File : String;
Rule_Description_File : String;
Response : String := "<VERBOSE>");
--
-- REGISTER provides the vehicle for registering the
-- description of Design Elements and Design Rules of a given
-- PDL. This instantiation must be elaborated in order to
-- provide the connection between the Design Facility common
-- commands and the user specified PDL analysis operations.
--
-- The call to an instantiation of DESCRIPTION.REGISTER reads
-- the given Description Files and registers the Keyword,
-- Element, and Rule descriptions with the Design Facility PDL
-- Entry mechanisms.
--
-- If the all of the Description File parameters are the
-- empty string (""), then the NIL enumeral restriction is
-- not enforced. This is provided for backward compatibility
-- with clients which choose not to use the new PDL
-- Description mechanisms.
--
-- If any errors are detected in the Description Files,
-- diagnostic messages are generated into the job log and
-- the exception FAILED is raised. Otherwise, the call does
-- not return.
--
end Description;
--
-- Hide these ...
--
function Create (From_Image : String;
Use_Heap : System.Segment) return Element;
function Create (From_Keyword : Keywords;
With_Argument : Argument.Info;
Use_Heap : System.Segment) return Element;
procedure Field_Copy (From_List : Element_List;
To_List : in out Element_List);
-- if a data type contains an ELEMENT_LIST and that data type is
-- stored in a segmented heap and a selector on that pointed to
-- object returns an ELEMENT_LIST, use this to get the
-- ELEMENT_LIST out, it will un-normalize the internal segmented
-- heap pointers.
package Keyword_Utilities is
function Contains_Keyword (In_String : String) return Boolean;
type Keyword_Status is
(Valid_Keyword, Not_A_Comment, Not_An_Annotation,
Not_A_Keyword, Invalid_Keyword);
procedure Keyword_Value (In_String : String;
Keyword : out Keywords;
Argument_Start : out Natural;
Status : out Keyword_Status);
-- Find the keyword annotation in the string IN_STRING.
-- If a match is found, ARGUMENT_START is set to the char index
-- after the keyword image and KEYWORD is set to the match value.
-- STATUS is set to reflect success or the reason for failure.
-- If INVALID_KEYWORD is detected ARGUMENT_START is left set to
-- the char index of the keyword.
-- If NOT_A_KEYWORD is detected ARGUMENT_START is left set to
-- the char index of the first non-blank characters after the
-- annotation indication (if there are no non-blanks, then
-- IN_STRING'last + 1 is returned).
end Keyword_Utilities;
function Debug_Image (Of_Element : Element;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_List : Element_List;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
private
type Element_Data;
type Element is access Element_Data;
pragma Segmented_Heap (Element);
Nil_Element : constant Element := null;
type List_Data;
type List_Data_Pointer is access List_Data;
pragma Segmented_Heap (List_Data_Pointer);
type Element_List is
record
Root, Tail : List_Data_Pointer;
Current : List_Data_Pointer;
end record;
Nil_List : constant Element_List := (null, null, null);
end Annotation;
----- HIDE THESE ...
--
function Debug_Image (Of_Area : Area;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
subtype Pdl_Keys is System.Package_Type;
procedure Kill (Pdl_Key : Pdl_Keys; Status : in out Errors.Condition);
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3598);
pragma Bias_Key (27);
private
type Area is new Ada_Text.Area;
Default_Area : constant Area := Area (Ada_Text.Nil_Area);
end Pdl;with Abstract_Document;
package Preview is
procedure Examine (Document_Name : String := "<CURSOR>";
Form : String := "";
In_Place : Boolean := False);
procedure Find (Node : Abstract_Document.Node;
Document_Name : String;
Form : String := "";
In_Place : Boolean := False);
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3591);
pragma Bias_Key (27);
end Preview;with Ada_Text;
with Directory_Tools;
with Object_Editor;
with Mapping;
with Ada_Program;
with Document;
package Traversal_Utilities is
----------------------------------------------------------------------------
-- Bring up a window on an object, Highlight a particular element
-- in that object (unless the element IS the object, as in the last call)
-- If the definition fails, and the FAIL_MESSAGE /= NO_MESSAGE the the
-- Message will be put into the message window (with a beep) with a
-- diagnosis for failure appended (in parens).
----------------------------------------------------------------------------
Default_Message : constant String := "Definition Failed ";
No_Message : constant String := "";
procedure Def (On_Element : Ada_Program.Element;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
procedure Def (On_Element_List : Ada_Program.Element_List;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
procedure Def (On_Document : Document.Element;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
procedure Def (On_Document_List : Document.Element_List;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
procedure Def (On_Target : Mapping.Target_Info;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
-- This operation can be used to obtain selections on arbitrary
-- AREAs of an Ada image. (e.g. Annotations and Arguments)
subtype Area is Ada_Text.Area;
procedure Def (On_Element : Ada_Program.Element;
In_Area : Area;
In_Place : Boolean := False;
Edit : Boolean := False;
Success : out Boolean;
Fail_Message : String := Default_Message);
procedure Cursor_Info (Line, Column : out Natural;
Focus : out Object_Editor.Focus;
Handle : out Directory_Tools.Object.Handle);
function Line_Image (Line : Positive) return String;
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3588);
pragma Bias_Key (27);
end Traversal_Utilities;with Action;
with Directory_Tools;
with Diana;
with Errors;
with Ada_Text;
package Ada_Program is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
package Object renames Directory_Tools.Object;
type Element is private;
Nil_Element : constant Element;
-- Ada programs are composed of a hierarchical structure
-- of elements. Operations are defined to determine what
-- kind a particular element is and to decompose elements
-- into sub-elements (children).
--
-- Each element may also have attributes that provide information
-- about that element. For example, all declaration elements will
-- have a name (identifier) associated with them. Certain static
-- expressions may have a value associated with them. Operations
-- are defined to provide this information for specific kinds of
-- elements.
--
-- If a query for a specific attribute is made to an inappropriate
-- kind of element the Inappropriate_Program_Element exception is raised.
--
-- Some elements "make reference to" other elements.
-- Declarations, for example, define named elements.
-- Other elements such as statements and expressions may make
-- reference to declarations.
--
-- Operations are available to find defining elements from
-- the elements that use those definitions.
--
-- All elements have an image, that is, a pretty printing of
-- that fragment of the program. Images of elements other than
-- top level kinds and IDs may not be very meaningful.
-- The images of these elements may be locked, or inaccessible
-- and so these operations may fail.
--
-- Comments may be isolated, adjacent to or attached to an element.
-- Comments that stand alone or are adjacent to an element
-- are generally intended to be related to some program element such
-- as a declaration or statement. This relation must be derived from the
-- convention established in the program using this interface and is not
-- captured in the semantics of this interface.
--
-- Many operations in this interface traverse from one program tree to
-- another. If in this traversal a new Ada object must be opened, the
-- traversal may fail due to a lock or access error. In this case
-- the FAILED exception is raised.
--
-- When an operation fails for any reason (a defined exception
-- propagates out of the operation) the DIAGNOSIS and STATUS calls
-- may be made to find out why the operation failed.
pragma Page;
function Is_Nil (Program_Element : Element) return Boolean;
-- Some program elements have optional attributes or sub-elements.
-- In the case where an attribute or sub-element could, but does
-- does not actually exist, a nil element will be returned.
function Parent (Program_Element : Element) return Element;
-- Returns the immediate parent element of the specified element.
-- If the element is a compilation_unit, (see definition below and
-- package Compilation_Unit) a nil element is returned.
function Line_Number (Of_Element : Element) return Natural;
-- Returns the line number on which the element resides.
-- A nil element returns 0.
-- This operation uses the element's image.
procedure Definition (Of_Element : Element;
In_Place : Boolean := False;
Edit : Boolean := False;
Status : in out Errors.Condition);
--
-- Brings up an Ada object editor on the unit containing OF_ELEMENT.
------------------------------------------------------------------
type Element_Iterator is private; -- A (read only) ordered set of Elements.
Nil_Iterator : constant Element_Iterator;
procedure Next (Iter : in out Element_Iterator);
function Done (Iter : Element_Iterator) return Boolean;
function Value (Iter : Element_Iterator) return Element;
procedure Reset (Iter : in out Element_Iterator);
-- Resets the iterator to the beginning of the list.
------------------------------------------------------------------
type Element_List is private; -- A (read/write) ordered list of Elements.
Nil_List : constant Element_List;
-- Elements lists are used for collecting together lists of elements
-- during traversal.
-- Assignment on LISTs DOES NOT CAUSE A COPY TO BE MADE!
-- Use COPY to do that.
procedure Copy (From_Iter : Element_Iterator; To_List : out Element_List);
procedure Copy (From_List : Element_List; To_List : out Element_List);
-- The entire contents of FROM_xxx is copied regardless of the current
-- 'position' of FROM_xxx or TO_LIST.
-- The contents of TO_LIST are lost.
procedure Append (Program_Element : Element;
To_List : in out Element_List);
procedure Prepend (Program_Element : Element;
To_List : in out Element_List);
procedure Append (From_List : Element_List;
To_List : in out Element_List);
-- Append/Prepend to the end/beginning of TO_LIST. The current position
-- of the list is undefined after these calls.
generic
with function Discard (Program_Element : Element) return Boolean;
procedure Filter (Source_List : Element_List;
Target_List : out Element_List);
generic
with function Discard (Program_Element : Element) return Boolean;
procedure Filter_Iterator (Source_Iterator : Element_Iterator;
Target_List : out Element_List);
procedure Next (List : in out Element_List);
function Done (List : Element_List) return Boolean;
function Value (List : Element_List) return Element;
procedure Reset (List : in out Element_List);
-- Resets the list to the beginning.
procedure Invert (List : in out Element_List);
-- Reverse the ordering of the given element list.
------------------------------------------------------------------
type Traversal_Control is (Continue,
Abandon_Children,
Abandon_Siblings,
Terminate_Immediately);
generic
type State_Record is private;
with procedure Pre_Operation (Program_Element : Element;
State : in out State_Record;
Control : in out Traversal_Control);
with procedure Post_Operation (Program_Element : Element;
State : in out State_Record;
Control : in out Traversal_Control);
procedure Depth_First_Traversal (Root_Element : Element;
State : in out State_Record;
Major_Elements_Only : Boolean := True);
-- Performs a depth-first traversal of Ada_Program elements rooted at
-- the given element. If Major_Elements_Only is True, then only
-- MAJOR Ada_Program elements are visited (see ELEMENT_KINDS enumeration
-- below)
--
-- For each element:
-- The formal procedure Pre_Operation is called when first visiting
-- the element. All sub-elements are then visited and then the
-- Post_Operation procedure is called when returning from visiting all
-- sub_elements. The State variable is passed from call to call.
--
-- Traversal can be controlled with the Control parameter.
-- The Abandon_Children option prevents traversal to the current element's
-- children, but picks up with the next sibling.
-- The Abandon_Sibling option abandons traversal through the
-- remaining siblings but continues traversal at the parent.
-- The Terminate_Immediately option does the obvious.
--
-- NOTES:
-- Abandon_Children in a POST_OPERATION is the same as CONTINUE (all
-- the children have already been visited).
-- Abandon_Siblings in a PRE_OPERATION skips the associated
-- POST_OPERATION.
------------------------------------------------------------------
type Line_Iterator is private;
subtype Line is String;
function Done (Iter : Line_Iterator) return Boolean;
function Value (Iter : Line_Iterator) return Line;
procedure Next (Iter : in out Line_Iterator);
function Image (Program_Element : Element) return Line_Iterator;
-- The image of a program element is made up of some number of lines.
-- Images can be iterated over to get each individual line.
function Image (Program_Element : Element) return String;
-- The image of a program element in a single string. Lines are separated
-- by Ascii.Lf characters.
function Preceding_Comments (An_Element : Element) return Line_Iterator;
function Following_Comments (An_Element : Element) return Line_Iterator;
-- Returns the comments, if any, that appear before or after the specified
-- element (including blank lines) Non blank comment lines include "--"s.
-- This function is appropriate for major elements such as statements,
-- declarations, context clauses, and generally things that can appear on
-- on a line by themselves. If no comments are present, a nil iterator is
-- returned.
function Internal_Comments (An_Element : Element) return Line_Iterator;
-- Returns the comments, if any, that appear attached to the internal
-- structure of an element. Examples of elements that have internal
-- structure are: Package Specs, Procedure Bodies.
function Attached_Comments (An_Element : Element) return Line_Iterator;
-- Returns the comments, if any, that are directly attached to
-- an element. In the case that no comments exist, a "Done"
-- iterator will be returned.
------------------------------------------------------------------
-- MAJOR program elements:
type Element_Kinds is (A_Compilation_Unit,
A_Context_Clause,
A_Declaration,
A_Statement,
A_Pragma,
A_Representation_Clause,
Not_A_Major_Element);
function Kind (Program_Element : Element) return Element_Kinds;
-- Once the KIND of an element is determined, further decomposition
-- or selection can be done by calling functions in the package that
-- deals with a specific element kind. (e.g. the COMPILATION_UNITS
-- package for kind A_COMPILATION_UNIT)
subtype Association is Element;
subtype Choice is Element;
subtype Compilation_Unit is Element;
subtype Context_Clause is Element;
subtype Declaration is Element;
subtype Expression is Element;
subtype Name is Element;
subtype Pragma_Usage is Element;
subtype Representation_Clause is Element;
subtype Statement is Element;
subtype Type_Definition is Element;
subtype Association_Iterator is Element_Iterator;
subtype Choice_Iterator is Element_Iterator;
subtype Compilation_Unit_Iterator is Element_Iterator;
subtype Context_Clause_Or_Pragma_Iterator is Element_Iterator;
subtype Declaration_Or_Context_Clause_Or_Representation_Clause_Or_Pragma_Iterator
is Element_Iterator;
subtype Expression_Iterator is Element_Iterator;
subtype Name_Iterator is Element_Iterator;
subtype Pragma_Iterator is Element_Iterator;
subtype Representation_Clause_Iterator is Element_Iterator;
subtype Statement_Or_Pragma_Iterator is Element_Iterator;
subtype Type_Definition_Iterator is Element_Iterator;
-- Note that some of the iterators can mix items of different major
-- kinds. Their name attempts to convey this information. For
-- instance a declarative part can contain, besides declarations,
-- context clauses (viz. use clauses), representation clauses or
-- pragmas.
------------------------------------------------------------------
-- IDENTIFIERS: -- LRM 2.3
subtype Identifier_Definition is Element;
subtype Identifier_Reference is Element;
-- The image of all Identifier_Definitions and Identifier_References
-- will provide the string name.
type Id_Kinds is (An_Identifier_Definition,
An_Identifier_Reference,
Not_An_Identifier);
function Id_Kind (An_Identifier : Element) return Id_Kinds;
function Definition (Reference : Element; Visible : Boolean := True)
return Identifier_Definition;
-- This call follows the ADA OBJECT EDITOR definition model. The
-- parameter VISIBLE indicates a preference. It may be that the
-- returned definition is not visible.
function Usage (Reference : Element;
Global : Boolean := True;
Limit : String := "<ALL_WORLDS>";
Closure : Boolean := False) return Element_List;
-- This call follows the ADA OBJECT EDITOR show usage model.
function Other_Part (Reference : Element) return Identifier_Definition;
-- Returns the other part of the given reference. If the given
-- reference has no other part, it returns Nil_Element. This call
-- follows the ADA OBJECT EDITOR other part model.
function String_Name (An_Identifier : Element) return String;
------------------------------------------------------------------
-- PROMPTS:
--
subtype Prompt is Element;
function Is_Prompt (An_Element : Element) return Boolean;
type Prompt_Kinds is (An_Alternative_Prompt,
A_Compilation_Unit_Prompt,
A_Context_Clause_Prompt,
A_Declaration_Prompt,
An_Expression_Prompt,
A_Generic_Parameter_Prompt,
An_Identifier_Prompt,
A_Pragma_Prompt,
A_Statement_Prompt,
Not_A_Prompt);
function Prompt_Kind (A_Prompt : Element) return Prompt_Kinds;
------------------------------------------------------------------
package Conversion is
function Normalize (Tree : Diana.Tree) return Element;
-- Given an arbitrary diana tree find the closest corresponding
-- ELEMENT. (This routine may walk UP a diana tree);
function Convert (A_Tree : Diana.Tree) return Element;
function Convert (An_Element : Element) return Diana.Tree;
procedure Register_Action (Action_Id : Action.Id);
-- Once an action is registered, all "opens" will be performed
-- under the specified action. Opens can be implicitly performed
-- when one traverses to definitions located in other objects
-- or if one accesses the element's image.
procedure Close_All_Objects;
--
-- Closes all objects opened by the current job. This operation
-- DOES NOT affect the Actions associated with the current job.
procedure Finish_Action;
-- Closes all objects opened under the previously registered
-- action or under the default action. This operation is similar
-- to CLOSE_ALL_OBJECTS except that the currently registered
-- action is also committed.
-- Construction of iterators:
function Build_Element_Iterator
(Sequence : Diana.Sequence) return Element_Iterator;
function Build_Element_Iterator
(Seq_Type : Diana.Seq_Type) return Element_Iterator;
-- Conversion functions to and from directory object handles and names.
function To_Directory_Object
(Comp_Unit : Compilation_Unit) return Object.Handle;
function To_Compilation_Unit (Directory_Object : Object.Handle;
Action_Id : Action.Id := Action.Null_Id)
return Compilation_Unit;
-- If the default Null_Id is provided, the currently registered
-- action will be used for this and all subsequent opens.
-- If no action has previously been registered, then one will be
-- constructed.
-- If a non-null action is specified it will be used for this open
-- and registered for all subsequent opens.
function Resolve (Element_Name : String)
return Element;
-- Does the best it can to resolve an unambiguous name of an
-- element to it's internal form. See notes below for GET_NAME.
function Resolve (Element_Names : String;
Visible : Boolean := True;
Look_Through_Stubs : Boolean := True)
return Element_List;
--
-- Resolves any name to a list of one or more Ada_Program
-- Elements. This form of RESOLVE behaves in a way similar to
-- COMMON.DEFINITION. When ELEMENT_NAMES resolves to multiple
-- units/declarations, the VISIBLE parameter has no effect. If
-- the name resolves to a subunit, the stub is returned if
-- Look_Through_Stubs is False, and the subunit if it is True.
-- This procedure is declared at the end of this package
-- to maintain compatibility.
--
-- procedure Resolve (Element_Names : String;
-- Result : out Element_List;
-- Status : in out Errors.Condition;
-- Context : Directory_Tools.Naming.Context :=
-- Directory_Tools.Naming.Default_Context;
-- Objects_Only : Boolean := False);
--
-- Resolves (ambiguous) naming expression in the given context.
-- This operation is similar in behavior to
-- Directory_Tools.Naming.Resolution'N(2). If Objects_Only is
-- true, only library level objects that match the name will be
-- included; when false, Ada_Program Elements will be included
-- in RESULT even if no separate directory object is associated
-- with them.
function Get_Name (Of_Element : Element) return String;
-- Does the best it can to give a fully resolved name of the
-- element, this works well for declarations and comp_units but
-- may not give useful results for other kinds of elements.
-- If it succeeds, the string may be used in RESOLVE to convert back
-- to the originating ELEMENT
------------------------------------
function Handle_Of (The_Element : Element) return Ada_Text.Handle;
-- Returns the currently open handle for the Ada image containing
-- THE_ELEMENT. If no handle exists, one will be opened and
-- future calls will return that handle.
-- ELEMENTs cannot be stored in permanent objects
-- like files. Use the following operations to generate an external
-- representation that can be saved and converted.
type Element_Permanent_Representation is new String;
function Convert (An_Element : Element;
Within : String := "<SUBSYSTEM>")
return Element_Permanent_Representation;
-- The WITHIN parameter specifies how fully qualified the
-- representation is (or should be resolved). When converting from
-- an element to a permanent representation, the values can be :
-- <FULL> - The element's fully qualified resolution is
-- returned.
-- <SUBSYSTEM> - The resolution of the element is subsystem
-- relative. Subsystem name and spec or load origin
-- is preserved.
-- <VIEW> - The resolution of the element is view relative.
-- No origin information is preserved.
--
-- Storage for <SUBSYSTEM> or <VIEW> representation are less than
-- <FULL> but some origin information is lost.
--
procedure Convert (An_Element_Rep : Element_Permanent_Representation;
Result : out Element;
Status : in out Errors.Condition;
Within : String := "<DEFAULT>");
-- When converting from a permanent representation to an element,
-- an attempt is made to fill in any missing information in the
-- permanent representation from the WITHIN parameter. So, in all
-- cases, if the permanent representation was FULLy resolved the
-- WITHIN parameter is ignored, otherwise :
-- <DEFAULT> - For <SUBSYSTEM>, the view selected by
-- the current activity for the stored subsystem is
-- used as the origin. The spec or load origin of the
-- representation is used to pick the specific view.
-- For <VIEW>, the current view context is used as
-- the origin.
-- subsystem name - For <SUBSYSTEM>, same as <DEFAULT>.
-- For <VIEW>, the view selected by the current
-- activity for the specified subsystem is used.
-- The subsystem name can be followed by "'SPEC" or
-- "'LOAD" to force use of the spec view or load
-- view from the activity. (Defaults to Spec View)
-- view name - For <SUBSYSTEM>, if the subsystem containing the
-- specified view matches the representation's
-- subsystem, the specified view is used.
-- If no match, same as <DEFAULT>.
-- For <VIEW> the specified view is used.
function Unique_Id (For_Element : Element) return Long_Integer;
-- Generates a unique number for any element.
-- Useful for building maps for elements.
-- This procedure is provided here to maintain compatibility.
--
procedure Resolve (Element_Names : String;
Result : out Element_List;
Status : in out Errors.Condition;
Context : Directory_Tools.Naming.Context :=
Directory_Tools.Naming.Default_Context;
Objects_Only : Boolean := False);
--
-- Resolves (ambiguous) naming expression in the given context.
-- This operation is similar in behavior to
-- Directory_Tools.Naming.Resolution'N(2). If Objects_Only is
-- true, only library level objects that match the name will be
-- included; when false, Ada_Program Elements will be included
-- in RESULT even if no separate directory object is associated
-- with them.
end Conversion;
Inappropriate_Program_Element : exception;
-- Raised when an operation is applied to an inappropriate
-- program element.
-- Use the DIAGNOSIS or STATUS calls to get more info.
Failed : exception;
-- Catch-all exception raised when an operation fails for reasons other
-- than the above inappropriate element reason.
-- Use the DIAGNOSIS or STATUS calls to get more info.
function Diagnosis return String;
function Status return Errors.Condition;
-- Whenever an error condition is detected (and exception is raised)
-- a diagnostic message/status is stored. These functions retrieve the
-- diagnostic for the most recent error.
-- The following provide debugger image functions for the
-- private types defined in this package.
function Debug_Image (Of_Element : Element;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_Iterator : Element_Iterator;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_List : Element_List;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
function Debug_Image (Of_Lines : Line_Iterator;
Level : Natural;
Prefix : String;
Expand_Pointers : Boolean) return String;
--
-- Hide these interfaces ...
--
procedure Field_Copy (From_List : Element_List;
To_List : in out Element_List);
-- if a data type contains a LIST and that data type is
-- stored in a segmented heap and a selector on that pointed
-- to object returns a LIST, use this to get the LIST out, it
-- will un-normalize the internal segmented heap pointers.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3570);
pragma Bias_Key (27);
private
type Element is new Diana.Tree;
Nil_Element : constant Element := Element (Diana.Empty);
-- ELEMENT_ITERATORs are read only
type Iterator_Kinds is (Sequence, Seq_Type);
type Element_Iterator is
record
Kind : Iterator_Kinds;
Sequence_Root, Sequence_Current : Diana.Sequence;
Seq_Type_Root, Seq_Type_Current : Diana.Seq_Type;
end record;
Nil_Iterator : constant Element_Iterator :=
Element_Iterator'(Kind => Sequence,
Sequence_Root => Diana.Sequence'(Diana.Make),
Sequence_Current => Diana.Sequence'(Diana.Make),
Seq_Type_Root => Diana.Seq_Type'(Diana.Make),
Seq_Type_Current => Diana.Seq_Type'(Diana.Make));
-- ELEMENT_LISTs are read/write
type Element_List is
record
First, Current, Last : Diana.Temp_Seq;
end record;
Nil_List : constant Element_List :=
Element_List'(First => Diana.Temp_Seq'(Diana.Make),
Current => Diana.Temp_Seq'(Diana.Make),
Last => Diana.Temp_Seq'(Diana.Make));
type Line_Iterator is new Ada_Text.Iterator;
end Ada_Program;with Ada_Program;
package Associations is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM 3.7.2, 6.4.1 and 12.3
-- This package provides operations on argument associations,
-- generic associations and parameter associations.
-- Local Renamings:
subtype Association is Ada_Program.Association;
subtype Identifier_Definition is Ada_Program.Identifier_Definition;
subtype Name_Expression is Ada_Program.Expression;
-------------------------------------------------------------------
type Association_Kinds is (Named_Association,
Positional_Association,
Defaulted,
Not_An_Association);
function Association_Kind
(An_Association : Association) return Association_Kinds;
-- Returns the kind of an association.
function Formal_Parameter (An_Association : Association)
return Identifier_Definition;
-- Returns the identifier of the formal name for the given
-- association. This function tries hard to return an identifier
-- definition. However, in the case of a pragma argument, only a
-- reference can be returned.
function Actual_Parameter
(An_Association : Association) return Name_Expression;
-- Returns the actual name or expression for the given association.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3578);
pragma Bias_Key (27);
end Associations;with Ada_Program;
package Compilation_Units is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM 10.1
--
-- Compilation units are composed of two distinct parts:
-- A context clause part and a declarative part.
-- The context clause part may contain actual context clauses
-- (with and use clauses) and pragmas.
-- The declaration associated with a compilation unit can either
-- be a package, procedure, function, or subunit.
-- Local Renamings:
subtype Compilation_Unit is Ada_Program.Compilation_Unit;
subtype Context_Clause is Ada_Program.Context_Clause;
subtype Declaration is Ada_Program.Declaration;
subtype Context_Clause_Or_Pragma_Iterator is
Ada_Program.Context_Clause_Or_Pragma_Iterator;
subtype Name_Iterator is Ada_Program.Name_Iterator;
subtype Pragma_Iterator is Ada_Program.Pragma_Iterator;
---------------------------------------------------------------
function Unit_Declaration
(A_Compilation_Unit : Compilation_Unit) return Declaration;
-- Returns the package, procedure, or function declaration of the
-- compilation unit. (Library and Secondary units as defined in the
-- LRM. The operations on declarations can be used to further
-- decompose these elements.
function Context_Clause_Elements (Of_Compilation_Unit : Compilation_Unit)
return Context_Clause_Or_Pragma_Iterator;
-- Returns a list of context clauses and pragmas that
-- reside in the context part of the compilation unit.
-- Context clauses are made up of one or more unit references.
--
-- ie with Bar; -- has one unit reference
-- use Foo, Bar; -- has two named unit references
--
-- All context clauses have an Image but only their elements
-- have a name.
type Context_Clause_Kinds is
(A_With_Clause, A_Use_Clause, Not_A_Context_Clause);
function Context_Clause_Kind
(A_Context_Clause : Context_Clause) return Context_Clause_Kinds;
function Referenced_Units
(A_Context_Clause : Context_Clause) return Name_Iterator;
-- Returns a list of identifier references in a context clause
function Parent_Compilation_Unit (Of_Program_Element : Ada_Program.Element)
return Compilation_Unit;
-- Returns the compilation unit that contains a particular
-- program element. If the PROGRAM_ELEMENT in question is a
-- compilation unit then this is an identity function.
function Is_Subunit (A_Compilation_Unit : Compilation_Unit) return Boolean;
-- Returns true if the compilation unit is a package, subprogram, or task
-- subunit.
function Subunit_Parent (Of_Subunit : Compilation_Unit)
return Compilation_Unit;
-- Returns the compilation unit that is the parent unit of the subunit.
function Body_Stub (Of_Subunit : Compilation_Unit) return Declaration;
-- Returns the subunit declaration in the parent.
function Attached_Pragmas
(To_Compilation_Unit : Compilation_Unit) return Pragma_Iterator;
-- Returns the list of pragmas attached to a compilation unit. Only
-- those pragmas that follow the compilation unit are returned here.
-- Pragmas that precede the compilation unit are part of the context
-- clause.
function Is_Main_Program
(Procedure_Or_Function : Compilation_Unit) return Boolean;
-- Returns true if the unit has a pragma Main attached.
subtype Name_Expression is Ada_Program.Expression;
function Parent_Unit_Name
(Of_Subunit : Compilation_Unit) return Name_Expression;
-- Returns a name expression describing the parent unit.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3571);
pragma Bias_Key (27);
end Compilation_Units;with Ada_Program;
package Declarations is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM Chapter 3
-- Local Renaming:
subtype Compilation_Unit is Ada_Program.Compilation_Unit;
subtype Declaration is Ada_Program.Declaration;
subtype Expression is Ada_Program.Expression;
subtype Name_Expression is Ada_Program.Name;
subtype Statement is Ada_Program.Statement;
subtype Type_Definition is Ada_Program.Type_Definition;
subtype Association_Iterator is Ada_Program.Association_Iterator;
subtype Declarative_Part_Iterator is
Ada_Program.
Declaration_Or_Context_Clause_Or_Representation_Clause_Or_Pragma_Iterator;
---------------------------------------------------------------
type Declaration_Kinds is (A_Variable_Declaration,
A_Constant_Declaration,
A_Deferred_Constant_Declaration,
An_Integer_Number_Declaration,
A_Real_Number_Declaration,
A_Type_Declaration,
An_Incomplete_Type_Declaration,
A_Subtype_Declaration,
A_Package_Declaration,
A_Package_Body_Declaration,
A_Procedure_Declaration,
A_Procedure_Body_Declaration,
A_Function_Declaration,
A_Function_Body_Declaration,
A_Package_Rename_Declaration,
A_Procedure_Rename_Declaration,
A_Function_Rename_Declaration,
An_Object_Rename_Declaration,
An_Exception_Rename_Declaration,
A_Generic_Package_Declaration,
A_Generic_Procedure_Declaration,
A_Generic_Function_Declaration,
A_Package_Instantiation,
A_Procedure_Instantiation,
A_Function_Instantiation,
A_Task_Declaration,
A_Task_Body_Declaration,
A_Task_Type_Declaration,
An_Entry_Declaration,
An_Exception_Declaration,
A_Procedure_Subunit,
A_Function_Subunit,
A_Package_Subunit,
A_Task_Subunit,
A_Subprogram_Formal_Parameter,
A_Generic_Formal_Parameter,
A_Discriminant,
A_Record_Component,
Not_A_Declaration);
function Kind (A_Declaration : Declaration) return Declaration_Kinds;
subtype Object_Declaration is Declaration; -- LRM 3.2.1
subtype Type_Declaration is Declaration; -- LRM 3.3.1
subtype Subtype_Declaration is Declaration; -- LRM 3.3.2
subtype Package_Declaration is Declaration; -- LRM 7.1
subtype Procedure_Declaration is Declaration; -- LRM 6.1
subtype Function_Declaration is Declaration; -- LRM 6.1
subtype Task_Declaration is Declaration; -- LRM 9.1
subtype Task_Specification is Type_Definition; -- LRM 9.2
subtype Entry_Declaration is Declaration; -- LRM 9.5
subtype Exception_Declaration is Declaration; -- LRM 11.1
function Is_Visible (A_Declaration : Declaration) return Boolean;
-- Returns True for units that are library level package or subprogram
-- specs, and for declarations inside library level package specs.
function Is_In_Private_Part (A_Declaration : Declaration) return Boolean;
-- Returns true is the declaration appears in the private part
-- of a package.
function Is_Generic_Formal (Element : Ada_Program.Element) return Boolean;
-- Returns true if a subprogram, type or object declaration is
-- a generic formal parameter or was derived from the GENERIC_PARAMETERS
-- selector.
function Is_Subprogram_Formal
(Element : Ada_Program.Element) return Boolean;
-- Returns true if the element was derived from the
-- SUBPROGRAM_PARAMETERS selector.
function Identifiers (A_Declaration : Declaration)
return Ada_Program.Element_List;
-- Returns a list of the identifier(s) introduced by the declaration.
function Name (A_Declaration : Declaration) return String;
-- Returns the identifier(s) image. Basically the same as calling
-- ADA_PROGRAM.STRING_NAME on the result of IDENTIFIERS for a
-- declaration.
function Enclosing_Declaration
(Element : Ada_Program.Element) return Declaration;
-- Returns the enclosing declaration for any element.
-- NOTE: This is the identity function if given a declaration.
---------------------------------------------------------------
-- OBJECT DECLARATIONS - LRM 3.2.1
-- The following operations apply to object declarations, component
-- declarations and discriminant specifications.
function Is_Initialized (Object_Decl : Object_Declaration) return Boolean;
-- Determines whether the object declaration includes an initial
-- value.
function Initial_Value (Object_Decl : Object_Declaration) return Expression;
-- Returns the optional expression that initializes an object or number
-- declaration, NIL_ELEMENT is otherwise returned.
function Object_Type (Object_Declaration_Or_Id : Object_Declaration)
return Type_Definition;
-- Returns the subtype indication following the colon in the object
-- declaration. This function will take either a declaration element
-- or identifier definition associated with the declaration.
function Type_Mark (Subprogram_Formal_Or_Deferred_Constant : Declaration)
return Name_Expression;
-- Returns the type mark associated with Subprogram Formal
-- parameters and Deferred Constants. Selectors in
-- NAMES_AND_EXPRESSIONS can then be used to extract more information.
-----------------------------------------------------------------
-- TYPE DECLARATIONS - LRM 3.3
function Is_Private (Type_Decl : Type_Declaration) return Boolean;
function Is_Limited (Type_Decl : Type_Declaration) return Boolean;
function Is_Incomplete (Type_Decl : Type_Declaration) return Boolean;
function Type_Specification
(Type_Declaration_Or_Id : Declaration) return Type_Definition;
-- Returns the type definition for a given type or subtype declaration
-- or the identifier definition associated with the declaration.
-- See the enumeration TYPE_INFORMATION.TYPE_DEFINITION_KINDS for
-- the various kinds of type definitions.
function Full_Type_Declaration
(Type_Declaration_Or_Id : Declaration) return Type_Declaration;
-- Given the declaration of an incomplete type, returns the
-- corresponding full type declaration. A nil element is returned
-- if the full type declaration is not yet compiled. NOTE: this is
-- the identity function if given a non-incomplete type declaration.
---------------------------------------------------------------
-- PROGRAM UNIT DECLARATIONS
-- LRM Chapters 5, 6, 9
-- Program units are package, subprogram, and task specifications
-- and bodies.
function Is_Spec (Program_Unit : Declaration) return Boolean;
-- Determines whether a package, procedure, function, or task
-- is a specification.
function Is_Package (A_Declaration : Declaration) return Boolean;
function Is_Task (A_Declaration : Declaration) return Boolean;
function Is_Procedure (A_Declaration : Declaration) return Boolean;
function Is_Function (A_Declaration : Declaration) return Boolean;
function Is_Subprogram (A_Declaration : Declaration) return Boolean;
-- Determines if a declaration is a particular kind of program unit
-- declaration regardless if it is generic, an instantiation, rename,
-- spec or body.
function Specification (Decl_Or_Id : Declaration) return Declaration;
-- Returns the specification of a program unit declaration or identifier.
-- If a specification is provided the same element is returned. If no
-- specification exists a nil element is returned.
function Unit_Body (Decl_Or_Id : Declaration) return Declaration;
-- Returns the body for a given program unit declaration or identifier
-- definition associated with the declaration. If a body is input,
-- the same element is returned. If no body exists a nil element is
-- returned. If a stub is given, the subunit is returned.
---------------------------------------------------------------
-- PACKAGES
-- LRM Chapter 7
function Visible_Part_Declarations
(Package_Specification : Package_Declaration)
return Declarative_Part_Iterator;
-- Returns a list of all declarations, representation
-- specifications, and pragmas in the visible part of a package in
-- the order of appearance. When applied to a package
-- instantiation, this operation yields the instance's visible
-- declarations.
function Private_Part_Declarations
(Package_Specification : Package_Declaration)
return Declarative_Part_Iterator;
-- Returns a list of all declarations, representation
-- specifications, and pragmas in the private part of the package in
-- order of appearance. When applied to a package instantiation,
-- this operation yields the instance's private declarations.
function Package_Body_Block
(Package_Body : Package_Declaration) return Statement;
-- Returns the block statement for a package body including
-- the declarative part, any elaboration statements, and
-- exception handler if any. The selectors for blocks in STATEMENTS
-- can then be used for further decomposition.
---------------------------------------------------------------
-- SUBPROGRAMS
subtype Subprogram_Formal_Parameter is Ada_Program.Element;
subtype Subprogram_Formal_Parameter_Iterator is
Ada_Program.Element_Iterator;
type Subprogram_Parameter_Kinds is (Default_In_Parameter, In_Parameter,
Out_Parameter,
In_Out_Parameter,
Not_A_Parameter);
function Subprogram_Parameter_Kind
(Of_Parameter : Subprogram_Formal_Parameter)
return Subprogram_Parameter_Kinds;
function Subprogram_Parameters (Subprogram_Or_Entry : Declaration)
return Subprogram_Formal_Parameter_Iterator;
-- Returns an ordered list of formal parameter declarations.
-- Use IS_INITIALIZED and INITIAL_VALUE to query
-- the information related to the presence of the default parameter
-- initialization, and use TYPE_MARK to obtain the parameter type mark.
-- When applied to a subprogram instantiation, this operation yields
-- the instance's parameters.
function Return_Type (Of_Function : Function_Declaration)
return Name_Expression;
-- Returns the name expression of the return type, selectors in
-- NAMES_AND_EXPRESSIONS can then be used to extract more information.
-- When applied to a function instantiation, this operation yields
-- the instance's return type.
function Is_Operator_Definition
(Function_Declaration : Declaration) return Boolean;
function Subprogram_Block (Subprogram_Body : Declaration) return Statement;
-- Returns the block statement for the body including
-- the declarative part, any elaboration statements, and
-- exception handler if any. The selectors for blocks in STATEMENTS
-- can then be used for further decomposition.
---------------------------------------------------------------
-- RENAMINGS
-- LRM Chapter 8.5
function Is_Renaming_Declaration
(A_Declaration : Declaration) return Boolean;
function Renamed_Name (A_Declaration : Declaration) return Name_Expression;
-- Returns the name of the entity being renamed. It can be a simple
-- name, an operator symbol, an indexed component, a slice, a
-- selected component or an attribute.
function Renamed_Declaration
(A_Declaration : Declaration) return Declaration;
-- If applied to the renaming of a simple name, an operator symbol
-- or an expanded name, returns the name's declaration. Returns nil
-- element otherwise. Use of this function is discouraged.
---------------------------------------------------------------
-- GENERIC PACKAGE and SUBPROGRAM SPECIFICATIONS
-- LRM Chapter 12
function Is_Generic
(Package_Or_Subprogram_Decl : Declaration) return Boolean;
subtype Generic_Formal_Parameter is Ada_Program.Element;
subtype Generic_Formal_Parameter_Or_Pragma_Iterator is
Ada_Program.Element_Iterator;
type Generic_Parameter_Kinds is (Subprogram,
Object,
Private_Type,
Limited_Private_Type,
Discrete_Type,
Integer_Type,
Floating_Point_Type,
Fixed_Point_Type,
Array_Type,
Access_Type,
Not_A_Generic_Parameter);
function Generic_Parameter_Kind
(Generic_Parameter : Generic_Formal_Parameter)
return Generic_Parameter_Kinds;
function Generic_Parameters
(Generic_Decl : Declaration)
return Generic_Formal_Parameter_Or_Pragma_Iterator;
-- Returns a list of formal parameters to the generic in order of
-- appearance.
-- Object parameters can be decomposed with subprogram formal parameter
-- and object declaration operations.
-- Array and access type declarations can be decomposed with the
-- operations corresponding to their types.
-- Subprogram parameters can be queried by the following operations and
-- can be further decomposed with subprogram declaration operations.
type Generic_Formal_Subprogram_Default_Kinds is
(Box, Name, None, Not_A_Generic_Formal_Subprogram);
function Generic_Formal_Subprogram_Default_Kind
(A_Generic_Formal_Subprogram : Generic_Formal_Parameter)
return Generic_Formal_Subprogram_Default_Kinds;
function Generic_Formal_Subprogram_Default
(A_Generic_Formal_Subprogram : Generic_Formal_Parameter)
return Name_Expression;
function Is_Generic_Instantiation
(Package_Or_Subprogram_Decl : Declaration) return Boolean;
function Generic_Unit_Declaration
(Generic_Instantiation_Or_Unit_Declaration : Declaration)
return Declaration;
-- Returns the declaration of the generic unit being instantiated.
function Generic_Instantiation_Parameters
(Generic_Instantiation : Declaration)
return Association_Iterator;
-- Returns an ordered list of parameter associations of a generic
-- instantiation. The operations defined in package ASSOCIATIONS
-- can be used to decompose them.
function Generic_Actual_Parameters (Generic_Instantiation : Declaration)
return Association_Iterator
renames Generic_Instantiation_Parameters;
-- Use of this form is discouraged.
---------------------------------------------------------------
-- TASK DECLARATIONS
-- LRM Chapter 9
function Task_Type_Specification
(Task_Decl : Task_Declaration) return Task_Specification;
-- Returns a task specification for a given task declaration.
function Entry_Declarations (Task_Decl : Task_Declaration)
return Declarative_Part_Iterator;
-- Returns a list of entry declarations associated with a TASK declaration.
function Task_Body_Block (Task_Body : Task_Declaration) return Statement;
-- Returns the block statement for the body including
-- the declarative part, any elaboration statements, and
-- exception handler if any.
---------------------------------------------------------------
-- ENTRY DECLARATIONS
-- LRM Chapter 9.5
-- The operations available for decomposing subprograms will
-- also work for entry declarations.
subtype Family_Index_Range is Ada_Program.Element;
function Family_Index (Entry_Family : Entry_Declaration)
return Family_Index_Range;
-- Returns the index range for the entry family. If the entry is not
-- a family, a nil element is returned.
-- Use operations on discrete ranges in TYPE_INFORMATION to analyze
-- the family index range.
---------------------------------------------------------------
-- EXCEPTION DECLARATIONS
-- LRM Chapter 11
-- The selector IDENTIFIERS can be used to get a list of identifier
-- definitions introduced by an exception declaration.
---------------------------------------------------------------
-- SUBUNIT STUBS
-- LRM Chapter 10.2
function Subunit (Of_Body_Stub : Declaration) return Compilation_Unit;
-- Returns the compilation unit corresponding to the subunit stub.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3572);
pragma Bias_Key (27);
end Declarations;with Ada_Program;
package Names_And_Expressions is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM Chapter 4
-- This chapter contains operations for manipulating names and
-- expressions.
-- Local Renamings:
subtype Declaration is Ada_Program.Declaration;
subtype Expression is Ada_Program.Expression;
subtype Name_Expression is Ada_Program.Name;
subtype Name is Ada_Program.Name;
subtype Subtype_Indication is Ada_Program.Element;
subtype Type_Definition is Ada_Program.Type_Definition;
subtype Association_Iterator is Ada_Program.Association_Iterator;
subtype Choice_Iterator is Ada_Program.Choice_Iterator;
subtype Expression_Iterator is Ada_Program.Expression_Iterator;
---------------------------------------------------------------------
function Expression_Type
(An_Expression : Expression) return Type_Definition;
-- Returns the type specification for the expression.
type Expression_Kinds is
(A_Simple_Name, An_Operator_Symbol, -- LRM 4.1
An_Indexed_Component, -- LRM 4.1.1
A_Slice, -- LRM 4.1.2
A_Selected_Component, -- LRM 4.1.3
An_Attribute, -- LRM 4.1.4
A_Character_Literal, An_Integer_Literal, A_Real_Literal,
An_Enumeration_Literal, A_Null_Literal, A_String_Literal,-- LRM 4.2
An_Aggregate, -- LRM 4.3
A_Type_Conversion, -- LRM 4.6
A_Qualified_Expression, -- LRM 4.7
An_Allocator, -- LRM 4.8
A_Complex_Expression, -- LRM 4.4/5
A_Function_Call,
Not_An_Expression);
function Kind (An_Expression : Expression) return Expression_Kinds;
function Is_Constant (A_Name : Name) return Boolean;
-- Returns True if the given name is constant. The name must be
-- of a syntactic form suitable for the left hand side of an
-- assignment (ie. not an attribute, a character, etc.).
function Is_Static (An_Expression : Expression) return Boolean;
function Static_Value
(An_Integer_Expression : Expression) return Long_Integer;
function Static_Value
(A_Character_Expression : Expression) return Character;
function Static_Value (A_Real_Expression : Expression) return Float;
function Static_Value (A_String_Expression : Expression) return String;
-- Note that STATIC_VALUE for strings will not return the quotes around
-- a string literal.
function Used_Names (An_Expression : Expression)
return Ada_Program.Element_List;
-- Returns a list of names of objects/types and operators in an expression.
-- EG. the expression (A + B.D (Q'(4))) would return the list :
-- A : A_SIMPLE_NAME
-- + : AN_OPERATOR_SYMBOL
-- B.D : A_SELECTED_COMPONENT
-- Q : A_SIMPLE_NAME
-- 4 : A_NUMERIC_LITERAL
---------------------------------------------------------------------
-- NAMES LRM 4.1
--
-- Simple_Names and operator symbols are instances of identifier references
-- The Ada_program.Definition function will return the defining Id.
subtype Discrete_Range is Ada_Program.Element;
function Prefix (Of_Name : Name) return Name;
-- Returns the prefix (the construct to the left of the rightmost
-- left paren in indexed or sliced objects, the rightmost 'dot' for
-- selected components or the rightmost tick for attributes).
-- LRM 4.1.1 -- Array component
function Index_Expressions (An_Indexed_Component : Name)
return Expression_Iterator;
-- Returns a list of expressions (possibly only one) within the parens.
-- LRM 4.1.2
function Slice_Range (A_Slice : Name) return Discrete_Range;
-- LRM 4.1.3
type Selection_Kinds is (Record_Discriminant, -- LRM 4.1.3 (a)
Record_Component, -- LRM 4.1.3 (b)
Task_Entry, -- LRM 4.1.3 (c)
Access_Object, -- LRM 4.1.3 (d)
Expanded_Name -- LRM 4.1.3 (e,f)
);
function Selection_Kind (Selected_Component : Name) return Selection_Kinds;
function Selector (Selected_Component : Name) return Name;
-- Returns the selector (the construct to the right of the rightmost
-- 'dot' in the selected component). Fails on selections of kind
-- Access_Object.
-- LRM 4.1.3 (a,b)
function Record_Object
(Discriminant_Or_Component_Selection : Name) return Declaration;
-- Returns the record object declaration for the selected object.
function Selected_Component (Discriminant_Or_Component_Selection : Name)
return Ada_Program.Element;
-- Returns the component declaration or discriminant in the record type
-- declaration. Operations in the package Declarations can be used to
-- manipulate record components.
-- LRM 4.1.3 (c)
function Selected_Task_Entry
(Task_Entry_Selection : Name) return Declaration;
-- Returns the entry declaration within the task type.
-- LRM 4.1.3 (d)
function Selected_Access_Type
(Access_Object_Selection : Name) return Declaration;
-- Returns the access type declaration.
-- LRM 4.1.3 (f)
function Named_Declaration (Expanded_Name : Name) return Declaration;
-- Returns the named declaration.
-- LRM 4.1.4
type Attribute_Designator_Kinds is (Address_Attribute,
Aft_Attribute,
Base_Attribute,
Callable_Attribute,
Constrained_Attribute,
Count_Attribute,
Delta_Attribute,
Digits_Attribute,
Emax_Attribute,
Epsilon_Attribute,
First_Attribute,
First_Bit_Attribute,
Fore_Attribute,
Image_Attribute,
Large_Attribute,
Last_Attribute,
Last_Bit_Attribute,
Length_Attribute,
Machine_Emax_Attribute,
Machine_Emin_Attribute,
Machine_Mantissa_Attribute,
Machine_Overflows_Attribute,
Machine_Radix_Attribute,
Machine_Rounds_Attribute,
Mantissa_Attribute,
Pos_Attribute,
Position_Attribute,
Pred_Attribute,
Range_Attribute,
Safe_Emax_Attribute,
Safe_Large_Attribute,
Safe_Small_Attribute,
Size_Attribute,
Small_Attribute,
Storage_Size_Attribute,
Succ_Attribute,
Terminated_Attribute,
Val_Attribute,
Value_Attribute,
Width_Attribute,
Not_A_Predefined_Attribute);
function Attribute_Designator_Kind
(Attribute : Name) return Attribute_Designator_Kinds;
-- Returns the kind of an attribute. If the attribute is
-- implementation-specific, Not_A_Predefined_Attribute is returned.
function Attribute_Designator_Name (Attribute : Name) return String;
-- This is the preferred way to analyze an implementation-specific
-- attribute. It returns an uppercase string for the attribute
-- simple name.
function Attribute_Designator_Name (Attribute : Name) return Name;
-- The Simple_Name returned here is only intended for use by
-- ADA_PROGRAM.STRING_NAME. Use of this function is discouraged.
function Attribute_Designator_Argument (Attribute : Name) return Expression;
-- Returns the static expression associated with the optional argument
-- of the attribute designator if one exists, Nil_Element otherwise.
---------------------------------------------------------------------
-- LITERALS LRM 4.2
--
-- The value of literals can be determined by using the
-- STATIC_VALUE selectors.
function Is_Literal (An_Expression : Expression) return Boolean;
function Position_Number (An_Enumeration_Or_Character_Literal : Expression)
return Long_Integer;
-- Returns the cardinality of the enumeration literal within the base type
-- of the enumeration type. (same as "'POS")
function Representation_Value
(An_Enumeration_Or_Character_Literal : Expression)
return Long_Integer;
-- Returns the internal representation of the enumeration literal.
-- (same as "'POS" if no rep spec defined for the enumeration type)
function Enumeration_Definition
(An_Enumeration_Or_Character_Literal : Expression)
return Declaration;
-- Since characters are enumerations, both regular enumeration and
-- character literals have enumeration root type declarations. The
-- operations in DECLARATIONS can be used to further analyze these
-- declarations.
---------------------------------------------------------------------
-- AGGREGATES LRM 4.3
subtype Aggregate_Component is Ada_Program.Element;
subtype Aggregate_Component_Iterator is Ada_Program.Element_Iterator;
function Components (An_Aggregate : Expression;
Normalized : Boolean := False)
return Aggregate_Component_Iterator;
-- Returns a list of the components of an aggregate.
-- If NORMALIZED is true a normalized list of the components of
-- an aggregate is returned (using positional notation).
-- NOTE THAT NORMALIZED INFO IS NOT AVAILIABLE FOR ARRAY AGGREGATES.
function Component_Choices
(Component : Aggregate_Component) return Choice_Iterator;
-- Returns the list of choices in the aggregate component.
-- May be a nil list if positional notation is used.
-- Use the CHOICE operations in TYPE_INFORMATION for further analysis.
function Component_Expression
(Component : Aggregate_Component) return Expression;
-- Returns the expression for the component association.
function Aggregate_Range (An_Aggregate : Expression) return Discrete_Range;
-- For an array aggregate, returns a range specifying the bounds of
-- the aggregate.
---------------------------------------------------------------------
-- TYPE CONVERSIONS and QUALIFIED EXPRESSIONS
-- LRM 4.6, 4.7
function Type_Mark (Type_Conversion_Or_Qualified_Expression : Expression)
return Name;
-- Returns the name of the type to which the expression is
-- being converted or the qualifying type. Use DEFINITION to get
-- the the defining type id.
function Converted_Or_Qualified_Expression
(Type_Conversion_Or_Qualified_Expression : Expression)
return Expression;
-- Returns the expression being converted or qualified.
---------------------------------------------------------------------
-- ALLOCATORS LRM 4.8
type Allocation_Kinds is (Allocation_From_Subtype,
Allocation_From_Qualified_Expression);
function Allocator_Kind (An_Allocator : Expression) return Allocation_Kinds;
function Allocation_Type (An_Allocator : Expression)
return Subtype_Indication;
-- Returns the subtype indication for the object being allocated.
function Qualified_Object_Expression
(An_Allocator : Expression) return Expression;
-- Returns the qualified expression for the object being allocated.
-- (in other words the KIND of the returned expression will be
-- A_QUALIFIED_EXPRESSION)
---------------------------------------------------------------------
-- COMPLEX EXPRESSIONS - LRM 4.4
--
-- When an expression kind is A_COMPLEX_EXPRESSION the following
-- operations can be used to do more detailed analysis.
subtype Special_Operation is Expression;
subtype Parenthesized_Expression is Expression;
subtype Range_Info is Ada_Program.Element;
type Complex_Expression_Kinds is (A_Parenthesized_Expression,
A_Special_Operation,
Not_A_Complex_Expression);
function Complex_Expression_Kind
(An_Expression : Expression) return Complex_Expression_Kinds;
function Expression_Parenthesized
(A_Parenthesized_Expression : Parenthesized_Expression)
return Expression;
-- Returns the expression within the parenthesis.
type Special_Operation_Kinds is (In_Range, Not_In_Range,
In_Type, Not_In_Type,
And_Then, Or_Else,
Not_A_Special_Operation);
function Special_Operation_Kind (An_Operation : Special_Operation)
return Special_Operation_Kinds;
function Special_Operation_Left_Hand_Side
(For_Special_Operation : Special_Operation) return Expression;
-- All special operation left hand sides are expressions.
function In_Range_Operation_Right_Hand_Side
(For_In_Range_Operation : Special_Operation) return Range_Info;
-- The right hand side for an IN_RANGE operation is a range which can be
-- analyzed using the range operations in TYPE_INFORMATION.
function In_Type_Operation_Right_Hand_Side
(For_In_Type_Operation : Special_Operation) return Name;
-- The right hand side for an IN_TYPE operation is a type mark which is
-- a name and can be further analyzed using this package.
function Short_Circuit_Operation_Right_Hand_Side
(For_Short_Circuit_Operation : Special_Operation)
return Expression;
-- The right hand side for a short circuit operation can be any
-- expression kind which can be further analyzed using this package.
---------------------------------------------------------------------
-- FUNCTION CALLS
-- Note that references to enumeration literals renamed as functions
-- are treated as genuine function calls.
function Is_Prefix_Call (A_Function_Call : Expression) return Boolean;
-- Returns true if the function call is in prefix form.
-- EG. - Foo (A, B); -- Returns TRUE
-- "<" (A, B); -- Returns TRUE
-- ... A < B ... -- Returns FALSE
function Is_Predefined (A_Function_Call : Expression) return Boolean;
-- Returns true if the function call has no real declaration associated
-- with it. (EG. STANDARD."+")
function Called_Function (A_Function_Call : Expression) return Declaration;
-- Returns the declaration of the called function if it is not predefined,
-- NIL_ELEMENT otherwise.
function Function_Call_Parameters
(A_Function_Call : Expression;
Normalized : Boolean := False) return Association_Iterator;
-- Returns a list of actual parameters for the call. If Normalized
-- is set to true, the (unspecified) default parameters will also be
-- included in the iterator. Use the operations from package
-- ASSOCIATIONS to further decompose the associations.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3573);
pragma Bias_Key (27);
end Names_And_Expressions;with Ada_Program;
package Pragmas is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM 2.8
-- This package provides operations on pragma elements
-- Local Renamings:
subtype Pragma_Usage is Ada_Program.Pragma_Usage;
subtype Declaration is Ada_Program.Declaration;
subtype Association_Iterator is Ada_Program.Association_Iterator;
-------------------------------------------------------------------
function Is_Predefined (A_Pragma : Pragma_Usage) return Boolean;
type Pragma_Kinds is (Controlled,
Elaborate,
Inline,
Interface,
List,
Memory_Size,
Optimize,
Pack,
Page,
Priority,
Shared,
Storage_Unit,
Suppress,
System_Name,
Not_A_Predefined_Pragma);
Unknown : constant Pragma_Kinds := Not_A_Predefined_Pragma;
function Kind (A_Pragma : Pragma_Usage) return Pragma_Kinds;
-- Returns the kind of a pragma. Returns Not_A_Predefined_Pragma on
-- implementation-specific pragmas.
function Name (A_Pragma : Pragma_Usage) return String;
-- Returns the uppercase simple name of any pragma. This is the way
-- to analyze implementation-specific pragmas.
function Arguments (A_Pragma : Pragma_Usage) return Association_Iterator;
-- Returns a list of the arguments to a pragma. Operations from
-- package ASSOCIATIONS can be used to decompose them.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3574);
pragma Bias_Key (27);
end Pragmas;with Ada_Program;
package Representation_Clauses is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM Chapter 13
-- Local Renamings:
subtype Declaration is Ada_Program.Declaration;
subtype Expression is Ada_Program.Expression;
subtype Identifier_Definition is Ada_Program.Identifier_Definition;
subtype Representation_Clause is Ada_Program.Representation_Clause;
subtype Type_Definition is Ada_Program.Element;
-------------------------------------------------------------------
type Representation_Clause_Kinds is (A_Length_Clause,
An_Enumeration_Representation_Clause,
A_Record_Representation_Clause,
An_Address_Clause,
Not_A_Representation_Clause);
function Kind (Clause : Representation_Clause)
return Representation_Clause_Kinds;
function Associated_Type
(Clause : Representation_Clause) return Type_Definition;
-- Returns the definition of the type specified in the length clause,
-- enumeration representation clause or record representation clause.
function Associated_Size (For_Type : Type_Definition) return Expression;
-- Returns the expression that describes the size associated with a type
-- definition if there is a rep spec associated with this type,
-- NIL_ELEMENT otherwise.
function Associated_Storage_Size
(For_Type : Type_Definition) return Expression;
-- Returns the expression that describes the size associated with a type
-- definition. Valid for access and task types and their derived types.
function Associated_Enumeration_Representation
(For_Enumeration_Literal : Identifier_Definition)
return Expression;
-- Returns the expression that describes the representation of
-- enumeration literal.
function Associated_Enumeration_Representation
(For_Enumeration_Literal : Identifier_Definition)
return Long_Integer;
-- Returns the representation value associated with
-- FOR_ENUMERATION_LITERAL.
function Associated_Record_Representation
(Record_Or_Component : Ada_Program.Element)
return Representation_Clause;
-- Returns the representation spec associated with the element.
function Associated_Address
(For_Element : Ada_Program.Element) return Ada_Program.Element;
-- Returns the element that defines the address value of FOR_ELEMENT,
-- valid for VARs, CONSTANTs, PACKAGEs, ENTRYs and TASK SPECs (or
-- their associated IDs).
-- For all the above routines, if no associated element exists
-- a NIL_ELEMENT is returned.
-------------------------------------------------------------------
-- LRM 13.2
type Length_Clause_Attribute_Kinds is (Size,
Collection_Storage_Size,
Task_Storage_Size,
Small);
function Attribute_Kind (A_Length_Clause : Representation_Clause)
return Length_Clause_Attribute_Kinds;
-------------------------------------------------------------------
-- LRM 13.3
function Representation_Aggregate
(Enumeration_Clause : Representation_Clause) return Expression;
-- Returns the aggregate of the representation clause.
-------------------------------------------------------------------
-- LRM 13.4
function Alignment_Expression
(Record_Clause : Representation_Clause) return Expression;
-- Returns the alignment expression for the representation clause.
-- If an alignment expression is not present, a nil element is
-- returned.
subtype A_Range is Ada_Program.Element;
subtype Record_Component_Clause is Ada_Program.Element;
subtype Record_Component_Clause_Or_Pragma_Iterator is
Ada_Program.Element_Iterator;
function Clause_Components
(Record_Clause : Representation_Clause)
return Record_Component_Clause_Or_Pragma_Iterator;
-- Returns a list of the components of the record clause in order
-- of appearance.
function Valid_Component
(Component_Clause : Record_Component_Clause) return Boolean;
-- Some components can be PRAGMAs, this return true if this component
-- is NOT a pragma.
function Component_Name
(Component_Clause : Record_Component_Clause) return String;
-- Returns the name of the component.
function Component_Offset
(Component_Clause : Record_Component_Clause) return Expression;
-- Returns the offset expression for the component.
function Component_Range
(Component_Clause : Record_Component_Clause) return A_Range;
-- Returns the range constraint for the component.
-------------------------------------------------------------------
-- LRM 13.5
function Addressed_Declaration
(Address_Clause : Representation_Clause) return Declaration;
-- Returns the declaration of the object, subprogram or entry
-- whose address is being specified.
function Address_Expression
(Address_Clause : Representation_Clause) return Expression;
-- Returns the expression for the address of the declaration.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3575);
pragma Bias_Key (27);
end Representation_Clauses;with Ada_Program;
with Declarations;
package Statements is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- LRM Chapter 5
-- Local Renames:
subtype Association is Ada_Program.Association;
subtype Declaration is Ada_Program.Declaration;
subtype Expression is Ada_Program.Expression;
subtype Identifier_Reference is Ada_Program.Identifier_Reference;
subtype Name_Expression is Ada_Program.Name;
subtype Name is Ada_Program.Name;
subtype Statement is Ada_Program.Statement;
subtype Association_Iterator is Ada_Program.Association_Iterator;
subtype Choice_Iterator is Ada_Program.Choice_Iterator;
subtype Declarative_Part_Iterator is
Ada_Program.
Declaration_Or_Context_Clause_Or_Representation_Clause_Or_Pragma_Iterator;
subtype Expression_Iterator is Ada_Program.Expression_Iterator;
subtype Name_Iterator is Ada_Program.Name_Iterator;
subtype Statement_Part_Iterator is Ada_Program.Statement_Or_Pragma_Iterator;
-------------------------------------------------------------------
function Is_Labeled (A_Statement : Statement) return Boolean;
function Labels (A_Statement : Statement) return Name_Iterator;
-- Returns an iterator on the names of the labels of a statement. A
-- statement can have several labels.
function Label_Name (A_Statement : Statement) return String;
-- Returns the null string if no label is present. Use of this
-- function is discouraged.
function Is_Named_Statement (A_Statement : Statement) return Boolean;
-- Returns true if applied to a loop or block that has a name.
function Statement_Name (A_Statement : Statement) return Name;
-- Returns the name of a block or loop. Returns Nil_Element if not
-- a block or loop, or if no name is present.
type Statement_Kinds is
-- Simple statements:
(A_Null_Statement, An_Assignment_Statement, A_Procedure_Call_Statement,
An_Exit_Statement, A_Return_Statement, A_Goto_Statement,
An_Entry_Call_Statement, A_Delay_Statement,
An_Abort_Statement, A_Raise_Statement, A_Code_Statement,
-- compound statements:
An_If_Statement, A_Case_Statement, A_Loop_Statement,
A_Block_Statement, An_Accept_Statement,
A_Select_Statement, A_Conditional_Entry_Call_Statement,
A_Timed_Entry_Call_Statement, Not_A_Statement);
function Kind (A_Statement : Statement) return Statement_Kinds;
---------------------------------------------------------------------
-- ASSIGNMENT STATEMENTS - LRM 5.2
function Object_Assigned_To (Assignment_Statement : Statement) return Name;
-- Returns the name of object to which the assignment is being made.
function Assignment_Expression
(Assignment_Statement : Statement) return Expression;
-- Returns the expression on the right hand side of the assignment.
---------------------------------------------------------------------
-- EXIT STATEMENTS - LRM 5.7
function Exit_Label (Exit_Statement : Statement) return String;
-- Returns the name of the exited loop if present, "" if not present
function Exit_Condition (Exit_Statement : Statement) return Expression;
-- Returns the when condition of the exit statement if present;
-- returns a nil element if not present.
function Loop_Exited (Exit_Statement : Statement) return Statement;
-- Returns the loop statement exited by this exit statement.
---------------------------------------------------------------------
-- RETURN STATEMENTS - LRM 5.8
function Return_Expression (Return_Statement : Statement) return Expression;
-- Returns the expression returned in the statement.
-- If no expression exists, a nil element is returned.
---------------------------------------------------------------------
-- GOTO STATEMENTS - LRM 5.9
function Goto_Label (Goto_Statement : Statement) return String;
-- Returns the name of label to which the goto statement may go.
function Destination_Statement
(Goto_Statement : Statement) return Statement;
-- Returns the statement to which the goto statement may go.
---------------------------------------------------------------------
-- IF STATEMENTS - LRM 5.3
subtype If_Statement_Arm is Ada_Program.Element;
subtype If_Statement_Arm_Iterator is Ada_Program.Element_Iterator;
function If_Arm_List (If_Statement : Statement)
return If_Statement_Arm_Iterator;
-- returns a list of the arms of the if statement
function Is_Else_Arm (Arm : If_Statement_Arm) return Boolean;
-- Returns true if the arm is an 'ELSE' arm, false if the arm is an
-- 'IF' or 'ELSIF'. The function Condition_Expression below may be used
-- on the arm in the false case.
function Condition_Expression (If_Arm : If_Statement_Arm) return Expression;
-- Returns the condition expression for an if statement or elsif arm.
function If_Arm_Statements (Arm : If_Statement_Arm)
return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in an arm.
---------------------------------------------------------------------
-- CASE STATEMENTS - LRM 5.4
function Case_Expression (Case_Statement : Statement) return Expression;
-- Returns the expression of the case statement that determines
-- which alternative will be taken.
subtype Case_Statement_Alternative is Ada_Program.Element;
subtype Case_Statement_Alternative_Iterator is Ada_Program.Element_Iterator;
function Case_Arms_List (Case_Statement : Statement)
return Case_Statement_Alternative_Iterator;
-- Return a list of all alternatives of the case statement.
function Is_When_Others
(Case_Alternative : Case_Statement_Alternative) return Boolean;
function Case_Alternative_Choices
(Case_Alternative : Case_Statement_Alternative)
return Choice_Iterator;
-- Returns a list of the 'WHEN <choice> | <choice>' choices.
-- Use the TYPE_INFORMATION package's CHOICES queries to extract
-- further information about the <choice>s.
function Case_Alternative_Statements
(Case_Alternative : Case_Statement_Alternative)
return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in this alternative.
---------------------------------------------------------------------
-- LOOP STATEMENTS - LRM 5.5
subtype For_Loop_Range is Ada_Program.Element;
type Loop_Kinds is (A_For_Loop, A_While_Loop, A_Simple_Loop);
function Loop_Kind (Loop_Statement : Statement) return Loop_Kinds;
function While_Condition (Loop_Statement : Statement) return Expression;
-- Returns the condition expression associated with the while loop.
function For_Loop_Index (Loop_Statement : Statement) return For_Loop_Range;
-- Returns the range for the loop index.
-- Use the TYPE_INFORMATION package's operations for discrete ranges
-- for more information.
function For_Loop_Index_Variable (Loop_Statement : Statement) return String;
-- Returns the name of the loop index variable.
function Is_Reverse_Iterator (Loop_Statement : Statement) return Boolean;
function Loop_Statements (Loop_Statement : Statement)
return Statement_Part_Iterator;
-- Returns a list of the statements pragmas in the body part of
-- the loop statement.
---------------------------------------------------------------------
-- BLOCK STATEMENTS - LRM 5.6
function Declarative_Items (Block_Statement : Statement)
return Declarative_Part_Iterator;
-- Returns a list of the declarations, pragmas, representation
-- specifications, and use clauses in the declarative part of the block.
-- A "Done" iterator indicates that there are no declarations.
function Block_Body_Statements (Block_Statement : Statement)
return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in the body part of the
-- block.
subtype Exception_Handler_Arm is Ada_Program.Element;
subtype Exception_Handler_Arm_Iterator is Ada_Program.Element_Iterator;
function Block_Exception_Handler_Arms (Block_Statement : Statement)
return Exception_Handler_Arm_Iterator;
-- Returns a list of the exception handler arms of the block.
function Exception_Choices
(Exception_Arm : Exception_Handler_Arm) return Choice_Iterator;
-- Returns a list of exception choices in the handler arm.
-- Use the TYPE_INFORMATION package's CHOICES queries to extract
-- further information about the <choice>s.
function Handler_Statements (Exception_Arm : Exception_Handler_Arm)
return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in the body part of
-- the handler.
---------------------------------------------------------------------
-- PROCEDURE CALL STATEMENTS - LRM 6.4
function Called_Procedure (Procedure_Or_Entry_Call_Statement : Statement)
return Declaration;
-- Returns the declaration of the called procedure or entry.
function Procedure_Call_Parameters
(Procedure_Or_Entry_Call_Statement : Statement;
Normalized : Boolean := False) return Association_Iterator;
-- Returns a list of actual parameters for the call.
-- If Normalized is set to true, the (unspecified) default
-- parameters will also be included in the iterator.
function Parameter_Expression (Parameter : Association) return Expression;
-- Returns the expression passed in for the actual parameter. Use
-- of this function is discouraged. Operations from package
-- PARAMETER_ASSOCIATIONS should be used instead.
---------------------------------------------------------------------
-- RAISE STATEMENTS - LRM 11.3
function Raised_Exception (Raise_Statement : Statement) return Name;
-- Returns the name of the raised exception or NIL_ELEMENT if there is
-- none. The NAMES_AND_EXPRESSIONS package can be used to decompose
-- the name.
---------------------------------------------------------------------
-- CODE STATEMENTS - LRM 13.8
function Qualified_Expression
(Code_Statement : Statement) return Expression;
-- Returns the qualified expression representing the code statement.
---------------------------------------------------------------------
-- ENTRY CALL STATEMENTS - LRM 9.5
function Family_Index
(Entry_Call_Or_Accept_Statement : Statement) return Expression;
-- Returns NIL_ELEMENT if not a family call/accept.
-- The operations on procedure calls and actual parameters defined above
-- may be used to get more information about an entry calls.
---------------------------------------------------------------------
-- ACCEPT STATEMENTS - LRM 9.5
function Accepted_Entry (Accept_Statement : Statement)
return Declarations.Entry_Declaration;
-- Returns the declaration of the entry accepted in this statement.
function Accept_Body_Statements
(Accept_Statement : Statement) return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in the body part of
-- the accept statement.
---------------------------------------------------------------------
-- DELAY STATEMENTS - LRM 9.6
function Delay_Expression (Delay_Statement : Statement) return Expression;
-- Returns the expression for the time of the delay
---------------------------------------------------------------------
-- SELECT, CONDITIONAL ENTRY and TIMED ENTRY STATEMENTS - LRM 9.7
subtype Select_Alternative is Ada_Program.Element;
subtype Select_Alternative_Iterator is Ada_Program.Element_Iterator;
function Select_Alternatives (Selective_Wait : Statement)
return Select_Alternative_Iterator;
-- Returns a list of the alternatives in the selective_wait statement.
function Is_Guarded (Alternative : Select_Alternative) return Boolean;
-- Returns true if a select alternative has a guard.
function Guard (Alternative : Select_Alternative) return Expression;
-- Returns the conditional expression guarding the alternative.
-- May return a nil element if there is no guard.
type Select_Alternative_Kinds is (Accept_Alternative,
Delay_Alternative,
Terminate_Alternative,
Not_A_Select_Alternative);
function Select_Alternative_Kind (Alternative : Select_Alternative)
return Select_Alternative_Kinds;
function Select_Alternative_Statements
(Accept_Or_Delay_Alternative : Select_Alternative)
return Statement_Part_Iterator;
-- Returns a list of the statements and pragmas in the the accept or
-- delay alternative including the accept statement and delay statements
-- themselves.
function Else_Statements
(Selective_Wait_Or_Conditional_Entry_Call : Statement)
return Statement_Part_Iterator;
-- Returns a list of statements and pragmas contained in the else
-- part of a selective_wait or conditional_entry_call. If no else
-- part exists, a "DONE" iterator is returned.
function Timed_Statements (Timed_Entry_Call : Statement)
return Statement_Part_Iterator;
-- Returns a list of statements and pragmas contained in the or
-- part of a timed entry call, including the delay statement itself.
function Entry_Call_Statements (Conditional_Or_Timed_Entry_Call : Statement)
return Statement_Part_Iterator;
-- Returns the statement list associated with the conditional or
-- timed entry call, including the actual entry call statement. Use
-- the ELSE_STATEMENTS or TIMED_STATEMENTS selector functions the get
-- the rest of the information about the call.
---------------------------------------------------------------------
-- ABORT STATEMENTS - LRM 9.10
function Aborted_Tasks (Abort_Statement : Statement) return Name_Iterator;
-- Returns a list of NAME_EXPRESSIONS for the aborted tasks.
-- Use ADA_PROGRAM.DEFINITION to get to the task declaration, or
-- the NAMES_AND_EXPRESSIONS package to decompose the names.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3576);
pragma Bias_Key (27);
end Statements;with Ada_Program;
package Type_Information is
--
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1987, 1988, 1989, 1990 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1987, 1988, 1989, 1990. ALL RIGHTS RESERVED.
--
-- Local Renaming:
subtype Declaration is Ada_Program.Declaration;
subtype Name_Expression is Ada_Program.Expression;
subtype Expression is Ada_Program.Expression;
subtype Identifier_Reference is Ada_Program.Identifier_Reference;
subtype Statement is Ada_Program.Statement;
subtype Task_Specification is Ada_Program.Type_Definition;
subtype Type_Definition is Ada_Program.Type_Definition;
subtype Association_Iterator is Ada_Program.Association_Iterator;
subtype Choice_Iterator is Ada_Program.Choice_Iterator;
subtype Declarative_Part_Iterator is
Ada_Program.
Declaration_Or_Context_Clause_Or_Representation_Clause_Or_Pragma_Iterator;
subtype Name_Iterator is Ada_Program.Name_Iterator;
---------------------------------------------------------------
type Type_Definition_Kinds is (A_Subtype_Indication,
An_Enumeration_Type_Definition,
An_Integer_Type_Definition,
A_Float_Type_Definition,
A_Fixed_Type_Definition,
An_Array_Type_Definition,
A_Record_Type_Definition,
An_Access_Type_Definition,
A_Derived_Type_Definition,
A_Task_Type_Definition,
A_Private_Type_Definition,
A_Limited_Private_Type_Definition,
Not_A_Type_Definition);
function Kind (A_Type_Definition : Type_Definition)
return Type_Definition_Kinds;
function Parent_Declaration (Type_Def : Type_Definition) return Declaration;
-- Returns the declaration associated with the type definition, if
-- any is available. Anonymous types for example have no associated
-- declaration.
function Base_Type (Type_Def : Type_Definition) return Type_Definition;
-- Returns the base type of the specified type definition as per LRM 3.3.
-- All subtypes are constraints applied to some base type. This function
-- returns that base type.
function Type_Structure (Type_Def : Type_Definition) return Type_Definition;
-- Returns the type structure from which the specified type definition has
-- been derived. This function will unwind recursive derivations until the
-- type definition derives a new representation or is no longer derived.
-- This function is different from GROUND_TYPE only for enumerations or
-- records that have derivations with rep specs.
function Ground_Type (Type_Def : Type_Definition) return Type_Definition;
-- This function recursively unwinds all type derivations and subtyping
-- to arrive at a type definition which is neither a derived type or a
-- subtype.
function Last_Constraint
(Type_Def : Type_Definition) return Type_Definition;
-- This function recursively unwinds subtyping to arrive at a type
-- definition which is either the base_type or imposes constraints.
function Is_Predefined (Type_Def : Type_Definition) return Boolean;
-- returns true if the type definition is one of:
-- Boolean, Character, String, Integer, Natural, Positive, Float
function Is_Universal (Type_Def : Type_Definition) return Boolean;
-- returns true if the type definition is a universal integer,
-- universal fixed or universal float.
subtype Subtype_Indication is Type_Definition;
subtype Enumeration_Type_Definition is Type_Definition;
subtype Integer_Type_Definition is Type_Definition;
subtype Float_Type_Definition is Type_Definition;
subtype Fixed_Type_Definition is Type_Definition;
subtype Array_Type_Definition is Type_Definition;
subtype Record_Type_Definition is Type_Definition;
subtype Access_Type_Definition is Type_Definition;
subtype Derived_Type_Definition is Type_Definition;
subtype Task_Type_Definition is Type_Definition;
---------------------------------------------------------------
-- TYPE CONSTRAINTS:
subtype Type_Constraint is Ada_Program.Element;
subtype Discrete_Range_Iterator is Ada_Program.Element_Iterator;
subtype Discriminant_Association_Iterator is Ada_Program.Element_Iterator;
type Type_Constraint_Kinds is (A_Simple_Range,
A_Range_Attribute,
A_Floating_Point_Constraint,
A_Fixed_Point_Constraint,
An_Index_Constraint,
A_Discriminant_Constraint,
Not_A_Constraint);
function Constraint_Kind (A_Constraint : Type_Constraint)
return Type_Constraint_Kinds;
function Discrete_Ranges (Of_Index_Constraint : Type_Constraint)
return Discrete_Range_Iterator;
-- Returns the list of Discrete_Range components of an Index_Constraint
function Discriminant_Associations
(Of_Discriminant_Constraint : Type_Constraint)
return Discriminant_Association_Iterator;
-- Returns the list of discriminant associations of
-- a Discriminant_Constraint.
-------------------------------------------------------------------
-- DISCRETE RANGES:
subtype Discrete_Range is Ada_Program.Element; -- LRM 3.6
type Range_Kinds is (A_Simple_Range,
A_Range_Attribute,
A_Subtype_Indication,
Not_A_Range);
function Range_Kind (A_Discrete_Range : Discrete_Range) return Range_Kinds;
subtype Range_Info is Ada_Program.Element;
procedure Bounds (A_Range : Range_Info;
Lower, Upper : out Expression);
-- This procedure returns the simple expression for the
-- upper and lower bounds of a range if one is present
-- NIL_ELEMENTs otherwise.
-- Note that range attributes are expressions and can be analyzed
-- by using the attribute operations in NAMES_AND_EXPRESSIONS.
---------------------------------------------------------------
-- CHOICES:
subtype Choice is Ada_Program.Element;
type Choice_Kinds is (A_Simple_Expression,
A_Discrete_Range,
Others_Choice,
An_Identifier_Reference,
Not_A_Choice);
function Choice_Kind (A_Choice : Choice) return Choice_Kinds;
function Choice_Expression (A_Choice : Choice) return Expression;
function Choice_Range (A_Choice : Choice) return Discrete_Range;
function Choice_Identifier (A_Choice : Choice) return Identifier_Reference;
---------------------------------------------------------------
-- SUBTYPE_INDICATIONS & TYPE_MARKS - LRM 3.3.2
function Type_Mark (A_Subtype_Indication : Subtype_Indication)
return Name_Expression;
-- Returns the type mark of a subtype indication.
-- The NAMES_AND_EXPRESSION package provides selectors to do further
-- decomposition.
function Constraint (A_Subtype_Indication : Subtype_Indication)
return Type_Constraint;
-- Returns the constraint applied to the subtype indication. A nil
-- element is returned if no constraint is present.
---------------------------------------------------------------
-- ENUMERATION TYPES - LRM 3.5.1
function Enumeration_Literals
(Enumeration_Type : Enumeration_Type_Definition)
return Name_Iterator;
-- Returns a list of the literals declared an enumeration type
-- declaration. Each of these elements has a Name.
---------------------------------------------------------------
-- INTEGER TYPES - LRM 3.5.4
function Integer_Constraint
(Integer_Type : Integer_Type_Definition) return Range_Info;
-- Returns the range constraint on the integer type declaration.
---------------------------------------------------------------
-- REAL TYPES - LRM 3.5.6
function Digits_Accuracy_Definition
(Floating_Point_Type : Float_Type_Definition) return Expression;
-- Returns the digits accuracy definition of a floating point type
-- definition or floating point constraint.
function Floating_Point_Constraint
(Floating_Point_Type : Float_Type_Definition) return Range_Info;
-- Returns the range constraint of a floating point type declaration.
function Delta_Accuracy_Definition
(Fixed_Point_Type : Fixed_Type_Definition) return Expression;
-- Returns the delta accuracy definition of a fixed point type definition
-- or fixed point constraint.
function Fixed_Point_Constraint
(Fixed_Point_Type : Fixed_Type_Definition) return Range_Info;
-- Returns the range constraint of the fixed point type definition.
---------------------------------------------------------------
-- ARRAY TYPES - LRM 3.6
function Is_Constrained_Array
(Array_Type : Array_Type_Definition) return Boolean;
function Index_Constraints (Constrained_Array_Type : Array_Type_Definition)
return Discrete_Range_Iterator;
-- Returns a list of the discrete range constraints for an
-- constrained array type declaration.
function Index_Subtype_Definitions
(Unconstrained_Array_Type : Array_Type_Definition)
return Name_Iterator;
-- Returns a list of the Index_Subtypes (Type_Marks) for an
-- unconstrained array type declaration.
function Component_Type (Array_Type : Array_Type_Definition)
return Subtype_Indication;
-- Returns the specification of the array component type.
---------------------------------------------------------------
-- DISCRIMINANTS - LRM 3.7.1
subtype Type_Definition_Or_Declaration is Ada_Program.Element;
subtype Discriminant_Iterator is Ada_Program.Element_Iterator;
function Is_Discriminated
(A_Type : Type_Definition_Or_Declaration) return Boolean;
-- This function applies to private, limited private, incomplete or
-- record types. It returns True if this type has discriminants.
-- It may be applied to type declaration to handle the case of
-- incomplete types.
function Discriminants (A_Type : Type_Definition_Or_Declaration)
return Discriminant_Iterator;
-- Returns a list of discriminants of the type. These elements may
-- then be manipulated with the functions provided in package
-- Declarations.
---------------------------------------------------------------
-- RECORD TYPES - LRM 3.7
subtype Record_Component is Ada_Program.Element;
subtype Record_Component_Or_Pragma_Iterator is Ada_Program.Element_Iterator;
subtype Variant is Ada_Program.Element;
subtype Variant_Or_Pragma_Iterator is Ada_Program.Element_Iterator;
function Record_Components (Record_Type : Record_Type_Definition)
return Record_Component_Or_Pragma_Iterator;
-- Returns a list of the record components of the record declaration.
type Component_Kinds is (A_Null_Component,
A_Variable_Component,
A_Variant_Part_Component,
Not_A_Component);
-- A component can be a Variable, NULL or Variant_Part.
-- A Null_Component is a NIL_ELEMENT.
-- The operations on Variables can be used to decompose Variable_Components.
function Component_Kind
(Component : Record_Component) return Component_Kinds;
function Associated_Discriminant
(Variant_Part : Record_Component) return Identifier_Reference;
function Variant_Item_List (Variant_Part : Record_Component)
return Variant_Or_Pragma_Iterator;
-- Returns a list of variants that make up the record component.
function Variant_Choices (Variant_Item : Variant) return Choice_Iterator;
-- Returns a list of the 'WHEN <choice> | <choice>' choices.
-- Use the above CHOICES queries to extract further information.
function Inner_Record_Components (Variant_Item : Variant)
return Record_Component_Or_Pragma_Iterator;
-- Returns a list of the record components of the inner record declaration.
-- Use Component_Kind to analyze further.
---------------------------------------------------------------
-- ACCESS TYPES - LRM 3.8
function Access_To (Access_Type : Access_Type_Definition)
return Subtype_Indication;
-- Returns the subtype indication associated with the access type.
---------------------------------------------------------------
-- DERIVED TYPES - LRM 3.4
function Derived_From (Derived_Type : Derived_Type_Definition)
return Subtype_Indication;
-- Returns the subtype indication associated with the derived type.
---------------------------------------------------------------
-- TASK TYPE DEFINITIONS
-- LRM Chapter 9
function Task_Components (Task_Spec : Task_Specification)
return Declarative_Part_Iterator;
-- Returns a list of entry declarations, representation clauses
-- and pragmas in a task specification. The list is in order of appearance.
-- The operations on subprogram declarations can be used to
-- decompose task entries.
pragma Subsystem (Design_Facility, Closed);
pragma Module_Name (4, 3577);
pragma Bias_Key (27);
end Type_Information