DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T V ┃
Length: 69489 (0x10f71) Types: TextFile Names: »V«
└─⟦d10a02448⟧ Bits:30000409 8mm tape, Rational 1000, ENVIRONMENT, D_12_7_3 └─ ⟦fc9b38f02⟧ »DATA« └─⟦9b46a407a⟧ └─⟦12c68c704⟧ └─⟦this⟧ └─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS └─ ⟦91c658230⟧ »DATA« └─⟦458657fb6⟧ └─⟦220843204⟧ └─⟦this⟧
with System; with Universal; package Diana is pragma Subsystem (Ada_Management); pragma Module_Name (4, 1110); -- Outline of Diana package -- NODE_NAME type -- TREE type -- Lexical types and operations -- List types and primitive operations -- Constructors and generalized selectors for tree nodes -- VALUE type and primitive operations -- Selectors for structural attributes -- Selectors for semantic attributes -- Selectors for code attributes -- Procedures for setting structural attributes -- Procedures for setting semantic attributes -- Procedures for setting code attributes -- PERMANENT_ATTRIBUTES, mechanism for extensible user-defined attributes -- TEMPORARY_ATTRIBUTES -- STANDARD_PACKAGE, providing access to the tree for Standard -- EDIT_UTILITIES for traversing and manipulating trees -- LIST_UTILITIES for more powerful list operations -- ID_UTILITIES for computing id lists and other id operations -- SYMBOLIC_IO for dumping diana tree in symbolic form -- TRAVERSAL provides generics for traversing trees -- ATTR_NAMES -- PRAGMA_NAMES -- OPERATOR_NAMES -- CHECK_NAMES -- EXCEPTION_NAMES -- constraint_error : exception; -- indicates attempt to apply incorrect selector to a node. Illegal_Structure : exception; -- Indicates attempt to introduce structural sharing --------------------------------------------------------------------------- type Node_Name is (Dn_Void, Dn_Aggregate, Dn_Deferred_Constant, Dn_Allocator, Dn_Binary, Dn_Conversion, Dn_Membership, Dn_Null_Access, Dn_Numeric_Literal, Dn_Parenthesized, Dn_Qualified, Dn_String_Literal, Dn_Used_Char, Dn_All, Dn_Attribute, Dn_Attribute_Call, Dn_Function_Call, Dn_Indexed, Dn_Selected, Dn_Slice, Dn_Used_Op, Dn_Used_Bltn_Op, Dn_Used_Object_Id, Dn_Used_Name_Id, Dn_Used_Bltn_Id, Dn_Attr_Id, Dn_Pragma_Id, Dn_Argument_Id, Dn_Comp_Id, Dn_Const_Id, Dn_Dscrmt_Id, Dn_Entry_Id, Dn_Exception_Id, Dn_Function_Id, Dn_Generic_Id, Dn_In_Id, Dn_In_Out_Id, Dn_Out_Id, Dn_Iteration_Id, Dn_Label_Id, Dn_Number_Id, Dn_Package_Id, Dn_Private_Type_Id, Dn_L_Private_Type_Id, Dn_Proc_Id, Dn_Subtype_Id, Dn_Task_Body_Id, Dn_Type_Id, Dn_Var_Id, Dn_Enum_Id, Dn_Def_Char, Dn_Def_Op, Dn_Box, Dn_No_Default, Dn_Instantiation, Dn_Exception, Dn_Constant, Dn_Var, Dn_Number, Dn_Type, Dn_Subtype, Dn_Subprogram_Decl, Dn_Package_Decl, Dn_Task_Decl, Dn_Pragma, Dn_Generic, Dn_Address, Dn_Record_Rep, Dn_Simple_Rep, Dn_Use, Dn_Task_Body, Dn_Package_Body, Dn_Subprogram_Body, Dn_Subunit, Dn_Loop, Dn_Abort, Dn_Accept, Dn_Assign, Dn_Block, Dn_Case, Dn_Code, Dn_Cond_Entry, Dn_Delay, Dn_Entry_Call, Dn_Exit, Dn_Goto, Dn_If, Dn_Labeled, Dn_Named_Stm, Dn_Named_Stm_Id, Dn_Null_Stm, Dn_Procedure_Call, Dn_Raise, Dn_Return, Dn_Select, Dn_Terminate, Dn_Timed_Entry, Dn_Range, Dn_Dscrmt_Aggregate, Dn_Dscrt_Range_S, Dn_Fixed, Dn_Float, Dn_Constrained, Dn_Formal_Dscrt, Dn_Formal_Fixed, Dn_Formal_Float, Dn_Formal_Integer, Dn_Access, Dn_Array, Dn_Derived, Dn_Enum_Literal_S, Dn_Integer, Dn_L_Private, Dn_Private, Dn_Record, Dn_Task_Spec, Dn_Universal_Integer, Dn_Universal_Fixed, Dn_Universal_Real, Dn_Stub, Dn_Pseudo_Stub, Dn_Entry, Dn_Function, Dn_Procedure, Dn_Package_Spec, Dn_Out, Dn_In, Dn_In_Out, Dn_Rename, Dn_For, Dn_Reverse, Dn_While, Dn_Context, Dn_With, Dn_In_Op, Dn_Not_In, Dn_Index, Dn_Alternative_S, Dn_Choice_S, Dn_Comp_Rep_S, Dn_Decl_S, Dn_Exp_S, Dn_Generic_Assoc_S, Dn_Generic_Param_S, Dn_Id_S, Dn_Item_S, Dn_Name_S, Dn_Param_Assoc_S, Dn_Param_S, Dn_Pragma_S, Dn_Select_Clause_S, Dn_Stm_S, Dn_Variant_S, Dn_Dscrmt_Var_S, Dn_Variant, Dn_Dscrmt_Var, Dn_And_Then, Dn_Or_Else, Dn_Select_Clause, Dn_Alternative, Dn_Comp_Rep, Dn_Cond_Clause, Dn_Inner_Record, Dn_Compilation, Dn_Others, Dn_Null_Comp, Dn_Variant_Part, Dn_Named, Dn_Comp_Unit, Dn_Assoc, Dn_Alignment, Dn_Nonterminal, Dn_Foo1, Dn_Foo2); --------------------------------------------------------------------------- -- basic node type type Tree is private; pragma Cache_Register (Tree, 12); function Get_Segment (T : Tree) return System.Segment; function Get_Offset (T : Tree) return System.Bit_Offset; function Empty return Tree; -- returns a constant void node function Is_Empty (T : Tree) return Boolean; function Kind (T : Tree) return Node_Name; function Is_Id_Node (Name : Node_Name) return Boolean; function Is_Id_Node (T : Tree) return Boolean; function Hash (T : Tree) return Integer; function Hash (T : Tree) return Long_Integer; pragma Consume_Offset; --------------------------------------------------------------------------- -- Types introduced to allow implementation of user-defined attributes -- to be visible in the body of diana. type Attr_Name is private; function Equal (X, Y : Attr_Name) return Boolean; pragma Consume_Offset; function Get_Segment (A : Attr_Name) return System.Segment; function Get_Offset (A : Attr_Name) return System.Bit_Offset; type Attr_List is private; pragma Cache_Register (Attr_List, 18); pragma Consume_Offset; function Get_Segment (A : Attr_List) return System.Segment; function Get_Offset (A : Attr_List) return System.Bit_Offset; --------------------------------------------------------------------------- -- Lexical types and operations type Symbol_Rep is private; pragma Cache_Register (Symbol_Rep, 13); pragma Consume_Offset; function Get_Segment (S : Symbol_Rep) return System.Segment; function Get_Offset (S : Symbol_Rep) return System.Bit_Offset; function Null_Text return Symbol_Rep; function Equal (X, Y : Symbol_Rep) return Boolean; function Lx_Symrep (T : Tree) return Symbol_Rep; function Id (T : Tree) return Symbol_Rep renames Lx_Symrep; procedure Lx_Symrep (T : Tree; V : Symbol_Rep); procedure Lx_Symrep (T : Tree; V : String); function Image (Symbol : Symbol_Rep) return String; function Symrep (Image : String) return Symbol_Rep; pragma Consume_Offset (2); function Length (Symbol : Symbol_Rep) return Natural; function Ith (Symbol : Symbol_Rep; Position : Natural) return Character; function Hash (Symbol : Symbol_Rep) return Integer; --------------------------------------------------------------------------- type Number_Rep is private; pragma Consume_Offset; function Get_Segment (N : Number_Rep) return System.Segment; function Get_Offset (N : Number_Rep) return System.Bit_Offset; function Equal (X, Y : Number_Rep) return Boolean; function Lx_Numrep (T : Tree) return Number_Rep; procedure Lx_Numrep (T : Tree; V : Number_Rep); function Image (Number : Number_Rep) return String; function Numrep (Image : String) return Number_Rep; pragma Consume_Offset (2); function Length (Number : Number_Rep) return Natural; function Ith (Number : Number_Rep; Position : Natural) return Character; procedure Lx_Prefix (T : Tree; V : Boolean); function Lx_Prefix (T : Tree) return Boolean; procedure Lx_Default (T : Tree; V : Boolean); function Lx_Default (T : Tree) return Boolean; procedure Lx_Separate (T : Tree; V : Boolean); function Lx_Separate (T : Tree) return Boolean; --------------------------------------------------------------------------- type Comment is private; function Get_Segment (C : Comment) return System.Segment; function Get_Offset (C : Comment) return System.Bit_Offset; function Make (Text : String; Start_Column : Natural; Trailing_Page_Marks : Natural := 0; Trailing_Line_Marks : Natural := 0) return Comment; function Text (C : Comment) return String; function Start_Column (C : Comment) return Natural; function Trailing_Page_Marks (C : Comment) return Natural; function Trailing_Line_Marks (C : Comment) return Natural; procedure Text (C : Comment; Value : String); procedure Start_Column (C : Comment; Value : Natural); procedure Trailing_Page_Marks (C : Comment; Value : Natural); procedure Trailing_Line_Marks (C : Comment; Value : Natural); --------------------------------------------------------------------------- -- Structural list type type Seq_Type is private; pragma Cache_Register (Seq_Type, 14); function Get_Segment (S : Seq_Type) return System.Segment; function Get_Offset (S : Seq_Type) return System.Bit_Offset; function Hash (S : Seq_Type) return Integer; function Make return Seq_Type; function Is_Empty (S : Seq_Type) return Boolean; function Head (L : Seq_Type) return Tree; function Tail (L : Seq_Type) return Seq_Type; function Cons (T : Tree; L : Seq_Type) return Seq_Type; procedure Replace_Head (L : in out Seq_Type; T : Tree); procedure Replace_Tail (L1 : Seq_Type; L2 : Seq_Type); pragma Consume_Offset; --------------------------------------------------------------------------- -- Non-structural list type type Sequence is private; pragma Cache_Register (Sequence, 15); function Get_Segment (S : Sequence) return System.Segment; function Get_Offset (S : Sequence) return System.Bit_Offset; function Hash (S : Sequence) return Integer; function Make return Sequence; function Is_Empty (L : Sequence) return Boolean; function Head (L : Sequence) return Tree; function Tail (L : Sequence) return Sequence; function Cons (T : Tree; L : Sequence) return Sequence; function Cons (T : Tree; L : Sequence; In_Segment : System.Segment) return Sequence; procedure Replace_Head (L : Sequence; T : Tree); procedure Replace_Tail (L1 : Sequence; L2 : Sequence); pragma Consume_Offset; --------------------------------------------------------------------------- -- list type which is not allocated in diana heap type Temp_Seq is private; pragma Cache_Register (Temp_Seq, 17); function Get_Segment (S : Temp_Seq) return System.Segment; function Get_Offset (S : Temp_Seq) return System.Bit_Offset; function Hash (S : Temp_Seq) return Integer; function Make return Temp_Seq; function Is_Empty (L : Temp_Seq) return Boolean; function Head (L : Temp_Seq) return Tree; function Tail (L : Temp_Seq) return Temp_Seq; function Cons (T : Tree; L : Temp_Seq) return Temp_Seq; function Cons (T : Tree; L : Temp_Seq; In_Segment : System.Segment) return Temp_Seq; procedure Replace_Head (L : Temp_Seq; T : Tree); procedure Replace_Tail (L1 : Temp_Seq; L2 : Temp_Seq); --------------------------------------------------------------------------- -- constructor functions for diana nodes function Make (C : Node_Name) return Tree; function Make (C : Node_Name; V : Symbol_Rep) return Tree; function Make (C : Node_Name; V : String) return Tree; function Make (C : Node_Name; V : Boolean) return Tree; function Make (C : Node_Name; T1 : Tree) return Tree; function Make (C : Node_Name; T1, T2 : Tree) return Tree; function Make (C : Node_Name; T1, T2, T3 : Tree) return Tree; function Make (C : Node_Name; L : Seq_Type) return Tree; function Make (L : Sequence) return Tree; -- returns dn_exp_s function Make (C : Node_Name; In_Segment : System.Segment) return Tree; --------------------------------------------------------------------------- type Arities is (Nullary, Unary, Binary, Ternary, Arbitrary); function Arity (T : Tree) return Arities; function Arity (N : Node_Name) return Arities; -- general selectors for subnodes function Child1 (T : Tree) return Tree; function Child2 (T : Tree) return Tree; function Child3 (T : Tree) return Tree; function List (T : Tree) return Seq_Type; function As_List (T : Tree) return Seq_Type renames List; function Son1 (T : Tree) return Tree renames Child1; function Son2 (T : Tree) return Tree renames Child2; function Son3 (T : Tree) return Tree renames Child3; -- changing subnodes procedure Child1 (T : Tree; V : Tree); procedure Child2 (T : Tree; V : Tree); procedure Child3 (T : Tree; V : Tree); procedure List (T : Tree; V : Seq_Type); procedure As_List (T : Tree; V : Seq_Type) renames List; procedure Son1 (T : Tree; V : Tree) renames Child1; procedure Son2 (T : Tree; V : Tree) renames Child2; procedure Son3 (T : Tree; V : Tree) renames Child3; --------------------------------------------------------------------------- -- Implementation defined Value type type Value_Kind is (Integer_Valued, Float_Valued, No_Value, Uninitialized); type Value is private; function Equal (V1, V2 : Value) return Boolean; function Kind (V : Value) return Value_Kind; function Make return Value; -- returns value'(kind=>no_value); function Make (I : Integer) return Value; function Make (F : Float) return Value; function Make (I : Universal.Integer) return Value; function Make (F : Universal.Float) return Value; function Make (F : Universal.Real) return Value; function Integer_Value (V : Value) return Universal.Integer; function Float_Value (V : Value) return Universal.Float; function Float_Value (V : Value) return Universal.Real; procedure Integer_Value (V : in out Value; I : Universal.Integer); procedure Float_Value (V : in out Value; F : Universal.Float); procedure Float_Value (V : in out Value; F : Universal.Real); function Is_Integer (V : Value) return Boolean; function Is_Float (V : Value) return Boolean; function Is_No_Value (V : Value) return Boolean; function Make (I : Integer) return Tree; function Make (F : Float) return Tree; function Make (I : Universal.Integer) return Tree; function Make (F : Universal.Float) return Tree; function Make (F : Universal.Real) return Tree; -- construct dn_numeric_literal with appropriate value function Is_Integer (T : Tree) return Boolean; function Is_Float (T : Tree) return Boolean; function Integer_Value (T : Tree) return Universal.Integer; function Float_Value (T : Tree) return Universal.Float; function Float_Value (T : Tree) return Universal.Real; --------------------------------------------------------------------------- -- selector functions for structural attributes function As_Actual (T : Tree) return Tree; function As_Alignment (T : Tree) return Tree; function As_Alternative_S (T : Tree) return Tree; function As_Binary_Op (T : Tree) return Tree; function As_Block_Stub (T : Tree) return Tree; function As_Choice_S (T : Tree) return Tree; function As_Comp_Rep_S (T : Tree) return Tree; function As_Constrained (T : Tree) return Tree; function As_Constraint (T : Tree) return Tree; function As_Context (T : Tree) return Tree; function As_Decl_S (T : Tree) return Tree; function As_Decl_S1 (T : Tree) return Tree; function As_Decl_S2 (T : Tree) return Tree; function As_Designator (T : Tree) return Tree; function As_Designator_Char (T : Tree) return Tree; function As_Dscrt_Range (T : Tree) return Tree; function As_Dscrt_Range_S (T : Tree) return Tree; function As_Dscrt_Range_Void (T : Tree) return Tree; function As_Exception_Def (T : Tree) return Tree; function As_Exp (T : Tree) return Tree; function As_Exp1 (T : Tree) return Tree; function As_Exp2 (T : Tree) return Tree; function As_Exp_Constrained (T : Tree) return Tree; function As_Exp_S (T : Tree) return Tree; function As_Exp_Void (T : Tree) return Tree; function As_Generic_Assoc_S (T : Tree) return Tree; function As_Generic_Header (T : Tree) return Tree; function As_Generic_Param_S (T : Tree) return Tree; function As_Header (T : Tree) return Tree; function As_Id (T : Tree) return Tree; function As_Id_S (T : Tree) return Tree; function As_Item_S (T : Tree) return Tree; function As_Iteration (T : Tree) return Tree; function As_Membership_Op (T : Tree) return Tree; function As_Name (T : Tree) return Tree; function As_Name_S (T : Tree) return Tree; function As_Name_Void (T : Tree) return Tree; function As_Object_Def (T : Tree) return Tree; function As_Package_Def (T : Tree) return Tree; function As_Param_Assoc_S (T : Tree) return Tree; function As_Param_S (T : Tree) return Tree; function As_Pragma_S (T : Tree) return Tree; function As_Range (T : Tree) return Tree; function As_Range_Void (T : Tree) return Tree; function As_Record (T : Tree) return Tree; function As_Select_Clause_S (T : Tree) return Tree; function As_Stm (T : Tree) return Tree; function As_Stm_S (T : Tree) return Tree; function As_Stm_S1 (T : Tree) return Tree; function As_Stm_S2 (T : Tree) return Tree; function As_Subprogram_Def (T : Tree) return Tree; function As_Subunit_Body (T : Tree) return Tree; function As_Task_Def (T : Tree) return Tree; function As_Type_Range (T : Tree) return Tree; function As_Type_Spec (T : Tree) return Tree; function As_Unit_Body (T : Tree) return Tree; function As_Variant_S (T : Tree) return Tree; function As_Dscrmt_Var_S (T : Tree) return Tree; function As_Parent (T : Tree) return Tree; --------------------------------------------------------------------------- -- selectors for semantic attributes function Sm_List (Exp_S : Tree) return Sequence; function Sm_Bits (T : Tree) return Integer; function Sm_Pos (T : Tree) return Integer; function Sm_Rep (T : Tree) return Integer; function Sm_Controlled (T : Tree) return Boolean; function Sm_Packing (T : Tree) return Boolean; function Sm_Actual_Delta (T : Tree) return Universal.Float; function Sm_Actual_Delta (T : Tree) return Universal.Real; function Sm_Value (T : Tree) return Value; function Sm_Address (T : Tree) return Tree; function Sm_Base_Type (T : Tree) return Tree; function Sm_Body (T : Tree) return Tree; function Sm_Constraint (T : Tree) return Tree; function Sm_Defn (T : Tree) return Tree; function Sm_Discriminants (T : Tree) return Tree; function Sm_Exp_Type (T : Tree) return Tree; function Sm_Exception_Def (T : Tree) return Tree; function Sm_Generic_Param_S (T : Tree) return Tree; function Sm_Init_Exp (T : Tree) return Tree; function Sm_Location (T : Tree) return Tree; function Sm_Obj_Def (T : Tree) return Tree; function Sm_Obj_Type (T : Tree) return Tree; function Sm_Size (T : Tree) return Tree; function Sm_Spec (T : Tree) return Tree; function Sm_Stm (T : Tree) return Tree; function Sm_Storage_Size (T : Tree) return Tree; function Sm_Type_Spec (T : Tree) return Tree; function Sm_Type_Struct (T : Tree) return Tree; function Sm_Comp_Spec (T : Tree) return Tree; function Sm_Decl_S (T : Tree) return Tree; function Sm_First (T : Tree) return Tree; function Sm_Normalized_Param_S (T : Tree) return Tree; function Sm_Stub (T : Tree) return Tree; function Sm_Record_Spec (T : Tree) return Tree; function Sm_Normalized_Comp_S (T : Tree) return Tree; function Sm_Parent (T : Tree) return Tree; function Sm_Ops (T : Tree) return Sequence; -- selectors for code attributes function Cd_Impl_Size (T : Tree) return Integer; --------------------------------------------------------------------------- -- procedures for setting structural attributes procedure As_Actual (T : Tree; V : Tree); procedure As_Alignment (T : Tree; V : Tree); procedure As_Alternative_S (T : Tree; V : Tree); procedure As_Binary_Op (T : Tree; V : Tree); procedure As_Block_Stub (T : Tree; V : Tree); procedure As_Choice_S (T : Tree; V : Tree); procedure As_Comp_Rep_S (T : Tree; V : Tree); procedure As_Constrained (T : Tree; V : Tree); procedure As_Constraint (T : Tree; V : Tree); procedure As_Context (T : Tree; V : Tree); procedure As_Decl_S (T : Tree; V : Tree); procedure As_Decl_S1 (T : Tree; V : Tree); procedure As_Decl_S2 (T : Tree; V : Tree); procedure As_Designator (T : Tree; V : Tree); procedure As_Designator_Char (T : Tree; V : Tree); procedure As_Dscrt_Range (T : Tree; V : Tree); procedure As_Dscrt_Range_S (T : Tree; V : Tree); procedure As_Dscrt_Range_Void (T : Tree; V : Tree); procedure As_Exception_Def (T : Tree; V : Tree); procedure As_Exp (T : Tree; V : Tree); procedure As_Exp1 (T : Tree; V : Tree); procedure As_Exp2 (T : Tree; V : Tree); procedure As_Exp_Constrained (T : Tree; V : Tree); procedure As_Exp_S (T : Tree; V : Tree); procedure As_Exp_Void (T : Tree; V : Tree); procedure As_Generic_Assoc_S (T : Tree; V : Tree); procedure As_Generic_Header (T : Tree; V : Tree); procedure As_Generic_Param_S (T : Tree; V : Tree); procedure As_Header (T : Tree; V : Tree); procedure As_Id (T : Tree; V : Tree); procedure As_Id_S (T : Tree; V : Tree); procedure As_Item_S (T : Tree; V : Tree); procedure As_Iteration (T : Tree; V : Tree); procedure As_Membership_Op (T : Tree; V : Tree); procedure As_Name (T : Tree; V : Tree); procedure As_Name_S (T : Tree; V : Tree); procedure As_Name_Void (T : Tree; V : Tree); procedure As_Object_Def (T : Tree; V : Tree); procedure As_Package_Def (T : Tree; V : Tree); procedure As_Param_Assoc_S (T : Tree; V : Tree); procedure As_Param_S (T : Tree; V : Tree); procedure As_Pragma_S (T : Tree; V : Tree); procedure As_Range (T : Tree; V : Tree); procedure As_Range_Void (T : Tree; V : Tree); procedure As_Record (T : Tree; V : Tree); procedure As_Select_Clause_S (T : Tree; V : Tree); procedure As_Stm (T : Tree; V : Tree); procedure As_Stm_S (T : Tree; V : Tree); procedure As_Stm_S1 (T : Tree; V : Tree); procedure As_Stm_S2 (T : Tree; V : Tree); procedure As_Subprogram_Def (T : Tree; V : Tree); procedure As_Subunit_Body (T : Tree; V : Tree); procedure As_Task_Def (T : Tree; V : Tree); procedure As_Type_Range (T : Tree; V : Tree); procedure As_Type_Spec (T : Tree; V : Tree); procedure As_Unit_Body (T : Tree; V : Tree); procedure As_Variant_S (T : Tree; V : Tree); procedure As_Dscrmt_Var_S (T : Tree; V : Tree); --------------------------------------------------------------------------- -- procedures for setting semantic attributes procedure Sm_Bits (T : Tree; V : Integer); procedure Sm_Pos (T : Tree; V : Integer); procedure Sm_Rep (T : Tree; V : Integer); procedure Sm_Controlled (T : Tree; V : Boolean); procedure Sm_Packing (T : Tree; V : Boolean); procedure Sm_Actual_Delta (T : Tree; V : Universal.Float); procedure Sm_Actual_Delta (T : Tree; V : Universal.Real); procedure Sm_Value (T : Tree; V : Value); procedure Sm_Address (T : Tree; V : Tree); procedure Sm_Base_Type (T : Tree; V : Tree); procedure Sm_Body (T : Tree; V : Tree); procedure Sm_Constraint (T : Tree; V : Tree); procedure Sm_Defn (T : Tree; V : Tree); procedure Sm_Discriminants (T : Tree; V : Tree); procedure Sm_Exp_Type (T : Tree; V : Tree); procedure Sm_Exception_Def (T : Tree; V : Tree); procedure Sm_Generic_Param_S (T : Tree; V : Tree); procedure Sm_Init_Exp (T : Tree; V : Tree); procedure Sm_Location (T : Tree; V : Tree); procedure Sm_Obj_Def (T : Tree; V : Tree); procedure Sm_Obj_Type (T : Tree; V : Tree); procedure Sm_Size (T : Tree; V : Tree); procedure Sm_Spec (T : Tree; V : Tree); procedure Sm_Stm (T : Tree; V : Tree); procedure Sm_Storage_Size (T : Tree; V : Tree); procedure Sm_Type_Spec (T : Tree; V : Tree); procedure Sm_Type_Struct (T : Tree; V : Tree); procedure Sm_Comp_Spec (T : Tree; V : Tree); procedure Sm_Decl_S (T : Tree; V : Tree); procedure Sm_First (T : Tree; V : Tree); procedure Sm_Normalized_Param_S (T : Tree; V : Tree); procedure Sm_Stub (T : Tree; V : Tree); procedure Sm_Record_Spec (T : Tree; V : Tree); procedure Sm_Normalized_Comp_S (T : Tree; V : Tree); procedure Sm_Parent (T : Tree; V : Tree); procedure Sm_Ops (T : Tree; S : Sequence); -- procedures for setting code attributes procedure Cd_Impl_Size (T : Tree; V : Integer); --------------------------------------------------------------------------- package Id_Table is -- ID_TABLE provides a mapping between DIANA.SYMBOL_REPS and -- DEF_IDs having that symbol representation in the context -- associated with the ID_TABLE. -- For the purpose of semantic analysis, id tables are attached -- to the following list headers and provide efficient random access -- (via symbol rep) to the declarations therein. -- Node Contents -- DECL_S package visible and private specs -- and task specs -- ITEM_S decls (including labels and statement ids) -- within blocks (including -- program unit bodies) -- RECORD all discriminants and fields of record -- PARAM_S parameters -- GENERIC_PARAM_S generic parameters -- DSCRMT_VAR_S discriminant vars of private type type Id_Map is private; Null_Table : constant Id_Map; procedure Create (Mumble_S : Diana.Tree); procedure Create (Mumble_S : Diana.Tree; Of_Size : Integer); procedure Enter (Mumble_S : Diana.Tree; Defn : Diana.Tree); procedure Enter (Mumble_S : Diana.Tree; Defns : Diana.Sequence); procedure Enter (Mumble_S : Diana.Tree; Defns : Diana.Seq_Type); -- DEFN(S) is a (list of) def id(s). procedure Enter_New (Mumble_S : Diana.Tree; Defn : Diana.Tree); -- enter an id from an incrementally inserted decl procedure Remove (Mumble_S, Defn_Or_Decl : Diana.Tree); -- DEFN(S) is a (list of) def id(s). procedure Remove (Decl : Diana.Tree); -- Decl must be rooted on the list of a decl_s, item_s, param_s, -- generic_param_s, or record. function Identify (Mumble_S : Diana.Tree; Symbol : Diana.Symbol_Rep; Stop_Decl : Diana.Tree) return Diana.Sequence; function Identify (Mumble_S : Diana.Tree; Symbol : Diana.Symbol_Rep) return Diana.Sequence; function Identify (Mumble_S : Diana.Tree; Symbol : Diana.Symbol_Rep; Stop_Decl : Diana.Tree) return Diana.Tree; function Identify (Mumble_S : Diana.Tree; Symbol : Diana.Symbol_Rep) return Diana.Tree; function Identify (Mumble_S : Diana.Tree; Name : String; Stop_Decl : Diana.Tree) return Diana.Sequence; -- IDENTIFY returns the DEFN_IDs associated with the given SYMBOL from -- the given table. -- The form returning a single node, returns an arbitrary node -- associated with the symbol and should be used only when one can -- guarantee that at most one association could exist. -- A null value is returned if no association exists. -- If a STOP_DECL is given, only those associations that were -- established "before" the given STOP_DECL are retrieved. -- The ordering of ids in the table is the order of declaration -- in the underlying MUMBLE_S (or ITEM_S). function Identify_Wild (Mumble_S : Diana.Tree; Symbol : Diana.Symbol_Rep; Seen : Diana.Temp_Seq; Stop_Decl : Diana.Tree := Diana.Empty) return Diana.Temp_Seq; function All_Ids (Mumble_S, Stop_Decl : Diana.Tree) return Diana.Temp_Seq; function All_Ids (Mumble_S : Diana.Tree) return Diana.Temp_Seq; function Copy (Table : Id_Map) return Id_Map; generic with function Translate (Def_Id : Diana.Tree) return Diana.Tree; procedure Convert (Table : Id_Map); function All_Ids (Mumble_S, Stop_Decl : Diana.Tree) return Diana.Sequence; function All_Ids (Mumble_S : Diana.Tree) return Diana.Sequence; function Header_Size (M : Id_Map) return Integer; function Links_Size (M : Id_Map) return Integer; function Total_Size (M : Id_Map) return Integer; function Sequence_Nodes (M : Id_Map) return Integer; type Local_Id_Table is private; function Xlate (T : Local_Id_Table) return Id_Map; function Xlate (T : Id_Map) return Local_Id_Table; generic with function Translate (Def_Id : Diana.Tree) return Diana.Tree; procedure Convert_Table (Old_Table, New_Table : Id_Map); private type Id_Map_Head; type Id_Map is access Id_Map_Head; pragma Segmented_Heap (Id_Map); type Local_Id_Table is new Id_Map; pragma Short_Pointer (Local_Id_Table); Null_Table : constant Id_Map := null; for Local_Id_Table'Size use 26; end Id_Table; --------------------------------------------------------------------------- package Permanent_Attributes is -- This is the low-level package for user-defined attributes. -- Usage of this package should be limited to small packages -- defining abstract user-defined attributes. Implementation -- of the abstract user-defined attributes must be in terms of -- the limited set of types provided here. More complex user-defined -- attributes (which are not directly representable as integers, trees, -- lists, etc.) may be implemented by using one of the simple types -- provided here for a key and having the package which encapsulates the -- the implementation of the user defined attribute do a mapping from -- the low-level type to a more appropriate type. Note that in -- this case the Ada Object Manager is only storing the handle or key -- that is stored on the attribute list; the implementation -- of the user defined attribute must provide storage facilities if -- the attribute is to be a permanent attribute. -- WARNING!!! Failure to follow these instructions may result in -- maintenance problems. This package is exporting low-level -- unencapsulated operations that are subject to change. Scattering -- usage of this package through millions of lines of code is strongly -- discouraged. Proper encapsulation of the definition of all -- user-defined attributes will minimize the impact of such changes, -- and may result in the Diana-hackers actually doing the maintenance -- for you. type Attr_Sort is (Tree_Attr, Sequence_Attr, Symbol_Rep_Attr, Integer_Attr, Float_Attr, Boolean_Attr, Short_Integer_Attr, Byte_Attr, Universal_Integer_Attr, Universal_Real_Attr, Comment_Attr, List_Attr, Id_Table_Attr); subtype Name is Attr_Name; function Equal (X, Y : Name) return Boolean renames Diana.Equal; function Hash (Attr : Attr_Name) return Integer; function Permanent_Attr_Name (Image : String) return Name; function Predefined_Attr_Name (Image : String) return Name; type Attr_Class is (Predefined, Permanent); function Class (Attr : Attr_Name) return Attr_Class; function Image (Attr : Name) return String; function Symbol (Attr : Name) return Symbol_Rep; subtype List is Attr_List; function Attrs (Node : Tree) return List; function Hash (L : List) return Integer; subtype Id_Table is Diana.Id_Table.Id_Map; type Short_Integer is range -(2 ** 15 - 1) .. 2 ** 15 - 1; type Byte is range 0 .. 2 ** 8 - 1; function Get (Node : Tree; Attr : Name) return Tree; function Get (Node : Tree; Attr : Name) return Sequence; function Get (Node : Tree; Attr : Name) return Symbol_Rep; function Get (Node : Tree; Attr : Name) return Boolean; function Get (Node : Tree; Attr : Name) return Integer; function Get (Node : Tree; Attr : Name) return Float; function Get (Node : Tree; Attr : Name) return Short_Integer; function Get (Node : Tree; Attr : Name) return Byte; function Get (Node : Tree; Attr : Name) return Universal.Integer; function Get (Node : Tree; Attr : Name) return Universal.Real; function Get (Node : Tree; Attr : Name) return Comment; function Get (Node : Tree; Attr : Name) return List; function Get (Node : Tree; Attr : Name) return Id_Table; procedure Add (Node : Tree; Attr : Name; V : Tree); procedure Add (Node : Tree; Attr : Name; V : Sequence); procedure Add (Node : Tree; Attr : Name; V : Symbol_Rep); procedure Add (Node : Tree; Attr : Name; V : Boolean); procedure Add (Node : Tree; Attr : Name; V : Float); procedure Add (Node : Tree; Attr : Name; V : Integer); procedure Add (Node : Tree; Attr : Name; V : Short_Integer); procedure Add (Node : Tree; Attr : Name; V : Byte); procedure Add (Node : Tree; Attr : Name; V : Universal.Integer); procedure Add (Node : Tree; Attr : Name; V : Universal.Real); procedure Add (Node : Tree; Attr : Name; V : Comment); procedure Add (Node : Tree; Attr : Name; V : List); procedure Add (Node : Tree; Attr : Name; V : Id_Table); function Has (Node : Tree; Attr : Name) return Boolean; procedure Remove (Node : Tree; Attr : Name); function Nil return List; function Is_Empty (Attrs : List) return Boolean; function Cons (Head : Tree; Attrs : List) return List; function Cons (Head : Sequence; Attrs : List) return List; function Cons (Head : Symbol_Rep; Attrs : List) return List; function Cons (Head : Boolean; Attrs : List) return List; function Cons (Head : Float; Attrs : List) return List; function Cons (Head : Integer; Attrs : List) return List; function Cons (Head : Short_Integer; Attrs : List) return List; function Cons (Head : Byte; Attrs : List) return List; function Cons (Head : Universal.Integer; Attrs : List) return List; function Cons (Head : Universal.Real; Attrs : List) return List; function Cons (Head : Comment; Attrs : List) return List; function Cons (Head : Id_Table; Attrs : List) return List; function Cons (Head : List; Attrs : List) return List; function Kind (Attrs : List) return Attr_Sort; function Get_Name (Attrs : List) return Name; -- returns the kind/name of the first element of the list. function Head (Attrs : List) return Tree; function Head (Attrs : List) return Sequence; function Head (Attrs : List) return Symbol_Rep; function Head (Attrs : List) return Boolean; function Head (Attrs : List) return Float; function Head (Attrs : List) return Integer; function Head (Attrs : List) return Short_Integer; function Head (Attrs : List) return Byte; function Head (Attrs : List) return Universal.Integer; function Head (Attrs : List) return Universal.Real; function Head (Attrs : List) return Id_Table; function Head (Attrs : List) return Comment; function Head (Attrs : List) return List; function Tail (Attrs : List) return List; procedure Replace_Head (Attrs : in out List; V : Tree); procedure Replace_Head (Attrs : in out List; V : Sequence); procedure Replace_Head (Attrs : in out List; V : Symbol_Rep); procedure Replace_Head (Attrs : in out List; V : Boolean); procedure Replace_Head (Attrs : in out List; V : Float); procedure Replace_Head (Attrs : in out List; V : Integer); procedure Replace_Head (Attrs : in out List; V : Short_Integer); procedure Replace_Head (Attrs : in out List; V : Byte); procedure Replace_Head (Attrs : in out List; V : Universal.Integer); procedure Replace_Head (Attrs : in out List; V : Universal.Real); procedure Replace_Head (Attrs : in out List; V : Id_Table); procedure Replace_Head (Attrs : in out List; V : Comment); procedure Replace_Head (Attrs : in out List; V : List); procedure Replace_Tail (L1, L2 : List); end Permanent_Attributes; --------------------------------------------------------------------------- package Edit_Utilities is function Copy (T : Tree) return Tree; -- copy a node including all its attributes and subtrees. function Copy (L : Seq_Type) return Seq_Type; -- copy a list - will copy all trees in the list. procedure Remove (T : Tree; Detach : Boolean := True); -- remove a tree from its parent. -- If DETACH is false, then the pointers in T will not be -- reset, and the resulting list structure will be illegal -- due to sharing. Any further operations on T are likely -- to fail in unpleasant ways. procedure Remove (L : Seq_Type); -- remove a tree from its parent. procedure Exchange (T1, T2 : Tree); -- replaces T1 by T2 and T2 by T1, updating backpointers and parents. function Copy (S : Seq_Type) return Sequence; -- convert from a seq_type to a sequence function Copy (S : Temp_Seq) return Sequence; -- convert from a temp_seq to a sequence function Copy (S : Sequence) return Temp_Seq; -- convert from a sequence to a temp_seq function Copy (S : Sequence; In_Segment : System.Segment) return Temp_Seq; -- convert from a sequence to a temp_seq procedure Move_Attributes (From : Tree; To : Tree); procedure Move_Attr_List (From, To : Tree); procedure Change_Node_Name (T : in out Tree; New_Name : Node_Name); procedure Change_Node (From : Tree; To : Tree; Move_Attrs : Boolean := True; Detach : Boolean := True); function Root (Node : Tree) return Tree; procedure Set_Back_Pointer (Child : Tree; Parent : Tree); function Invert (L : Seq_Type) return Seq_Type; -- reverse a seq_type in-place returning head of reversed list function Duplicate (T : Tree) return Tree; -- used be tree compaction to copy a tree and its attributes. end Edit_Utilities; --------------------------------------------------------------------------- package List_Utilities is type List_Arity is (Zero, One, Many); -- operations on DIANA.SEQ_TYPE function List (N1 : Tree) return Seq_Type; function List (N1, N2 : Tree) return Seq_Type; function List (N1, N2, N3 : Tree) return Seq_Type; function List (N1, N2, N3, N4 : Tree) return Seq_Type; function List (N1, N2, N3, N4, N5 : Tree) return Seq_Type; function Length (L : Seq_Type) return Integer; function Length_Is_One (L : Seq_Type) return Boolean; function Arity (L : Seq_Type) return List_Arity; function Is_Member (N : Tree; L : Seq_Type) return Boolean; -- test if node is a member of a list function Id_Is_Member (Id_Node : Tree; Id_List : Seq_Type) return Boolean; -- test if an id with name of ID_NODE occurs on ID_LIST function Nconc (L1, L2 : Seq_Type) return Seq_Type; -- lisp nconc, L2 is attached to LAST (L1), L1 returned -- is_empty (L1) => return L2; function Jth (L : Seq_Type; J : Integer) return Tree; -- returns J'th member of L -- in J > 0 and LENGTH (L) >= J function Last (L : Seq_Type) return Seq_Type; -- returns list part of last member of L -- is_empty (L) => return make function Pos (N : Tree; L : Seq_Type) return Integer; -- position of N within L counting from 0 -- N not in L => return -1 procedure Nconc (L : in out Seq_Type; T : Tree); -- equivalent to L := NCONC (L, CONS (T, make)) function Get_Seq_Type (List_Element : Tree) return Seq_Type; --| pre-condition: arity (as_parent (list_element)) = arbitrary. procedure Insert (Parent : Tree; Node : Tree; Position : Natural); -- Inserts NODE after the POSITION'th element in the AS_LIST of -- PARENT. (POSITION = 0) => NODE is new head of list. -- operations on DIANA.SEQUENCE. function List (N1 : Tree) return Sequence; function List (N1, N2 : Tree) return Sequence; function List (N1, N2, N3 : Tree) return Sequence; function List (N1, N2, N3, N4 : Tree) return Sequence; function List (N1, N2, N3, N4, N5 : Tree) return Sequence; function Length (L : Sequence) return Integer; function Length_Is_One (L : Sequence) return Boolean; function Arity (L : Sequence) return List_Arity; function Is_Member (N : Tree; L : Sequence) return Boolean; -- test if N occurs on list L function Id_Is_Member (Id_Node : Tree; Id_List : Sequence) return Boolean; -- test if an id with name of ID_NODE occurs on ID_LIST function Append (L1, L2 : Sequence) return Sequence; -- lisp append, L1 is copied, L2 is attached to copy which is returned function Nconc (L1, L2 : Sequence) return Sequence; -- lisp nconc, L2 is attached to LAST (L1), L1 returned -- is_empty (L1) => return L2; function Concat (L1, L2 : Sequence) return Sequence; -- L1 and L2 are copied then nconc'ed function Invert (L : Sequence) return Sequence; -- lisp reverse, makes new copy of list (reverse is a keyword) function Jth (L : Sequence; J : Integer) return Tree; -- returns J'th member of L -- in J > 0 and LENGTH (L) >= J function Last (L : Sequence) return Sequence; -- returns list part of last member of L -- is_empty (L) => return make function Pos (N : Tree; L : Sequence) return Integer; -- position of N within L counting from 0 -- N not in L => return -1 procedure Nconc (L : in out Sequence; T : Tree); -- equivalent to L := NCONC (L, CONS (T, make)) -- operations on DIANA.TEMP_SEQ function List (N1 : Tree) return Temp_Seq; function List (N1, N2 : Tree) return Temp_Seq; function List (N1, N2, N3 : Tree) return Temp_Seq; function List (N1, N2, N3, N4 : Tree) return Temp_Seq; function List (N1, N2, N3, N4, N5 : Tree) return Temp_Seq; function Length (L : Temp_Seq) return Integer; function Length_Is_One (L : Temp_Seq) return Boolean; function Arity (L : Temp_Seq) return List_Arity; function Is_Member (N : Tree; L : Temp_Seq) return Boolean; -- test if N occurs on list L function Id_Is_Member (Id_Node : Tree; Id_List : Temp_Seq) return Boolean; -- test if an id with name of ID_NODE occurs on ID_LIST function Append (L1, L2 : Temp_Seq) return Temp_Seq; function Append (L1 : Sequence; L2 : Temp_Seq) return Temp_Seq; -- lisp append, L1 is copied, L2 is attached to copy which is returned function Nconc (L1, L2 : Temp_Seq) return Temp_Seq; -- lisp nconc, L2 is attached to LAST (L1), L1 returned -- is_empty (L1) => return L2; function Concat (L1, L2 : Temp_Seq) return Temp_Seq; -- L1 and L2 are copied then nconc'ed function Invert (L : Temp_Seq) return Temp_Seq; -- lisp reverse, makes new copy of list (reverse is a keyword) function Jth (L : Temp_Seq; J : Integer) return Tree; -- returns J'th member of L -- in J > 0 and LENGTH (L) >= J function Last (L : Temp_Seq) return Temp_Seq; -- returns list part of last member of L -- is_empty (L) => return make function Pos (N : Tree; L : Temp_Seq) return Integer; -- position of N within L counting from 0 -- N not in L => return -1 procedure Nconc (L : in out Temp_Seq; T : Tree); -- equivalent to L := NCONC (L, CONS (T, make)) procedure Insert (Parent : Tree; Node : Tree; After : Diana.Tree); -- Inserts NODE after AFTER in the AS_LIST of PARENT. -- is_empty (AFTER) => node is new head of list. end List_Utilities; --------------------------------------------------------------------------- package Id_Utilities is procedure Set_Trace; procedure Reset_Trace; function Comp_Unit_Id (Comp_Unit : Tree) return Tree; -- Returns the Id for a comp unit. function Unit_Id (Unit : Tree) return Tree; -- Returns the Id or Designator as appropriate for -- a given program unit item. function Get_Id (Decl_Node : Diana.Tree) return Diana.Tree; -- get the id out of anything that has a single id function Is_Predefined (Id_Node : Tree) return Boolean; function Get_Defn (Name : Tree) return Tree; -- Given a using occurence or selected, returns the defining occurence. function Enclosing_Declaration (Id : Tree) return Tree; -- Finds the nearest enclosing declaration (item). function First_Def_Id (Item : Tree; Iterate : Boolean := True) return Tree; function Next_Def_Id (Def_Id : Tree) return Tree; -- These two functions allow traversal of the entities in a -- Decl_s or Item_s. Each Def_id will be visited to account for -- multiple object declarations (x,y:t). This only visits the -- def_ids for the explicit declarations at the top level. -- Does not go inside enumaration type declarations, visit -- implicit operators, visit parameters or record fields, etc. -- The optional iterate parameter causes first_def_id to -- search down the Item_s if Item is a use clause or some -- item which does not have an id. function First (Id : Diana.Tree) return Diana.Tree; -- Given a defining occurence, returns the first occurence. function Flatten (Name : Diana.Tree) return Diana.Sequence; function Fully_Qualified_Name (Def_Id : Diana.Tree) return Diana.Sequence; -- The following functions retrieve all visible entities. function All_Ids_Of (Decl_List : Tree; Until_Stub : Symbol_Rep := Null_Text) return Sequence; function All_Ids_Of (Decl_List : Tree; Until_Decl : Tree) return Sequence; function All_Ids_In_Visible_Part (Package_Spec : Tree) return Sequence; function All_Ids_In_Private_Part (Package_Spec : Tree) return Sequence; function All_Ids_In_Task_Spec (Task_Spec : Tree) return Sequence; function All_Param_Ids_Of (Params : Tree) return Sequence; function All_Field_Ids_Of (Component_List : Tree) return Sequence; function All_Label_Ids_Of (Block_Node : Tree) return Sequence; function All_Named_Stm_Ids_Of (Block_Node : Tree) return Sequence; function All_Ids_In_Block (Block_Node : Tree; Is_Unit : Boolean := True) return Sequence; end Id_Utilities; --------------------------------------------------------------------------- generic with procedure Put (S : String); with procedure New_Line; with procedure Print_Other_Attrs (Node : Diana.Tree; Indentation : Integer); package Symbolic_Io is procedure Output (List : Diana.Sequence; With_Attributes : Boolean := True); procedure Output (Node : Diana.Tree; With_Attributes : Boolean := True); end Symbolic_Io; --------------------------------------------------------------------------- package Attr_Names is function Attr_Address return Symbol_Rep; function Attr_Base return Symbol_Rep; function Attr_Size return Symbol_Rep; function Attr_First return Symbol_Rep; function Attr_Last return Symbol_Rep; function Attr_Image return Symbol_Rep; function Attr_Value return Symbol_Rep; function Attr_Pos return Symbol_Rep; function Attr_Val return Symbol_Rep; function Attr_Pred return Symbol_Rep; function Attr_Succ return Symbol_Rep; function Attr_Delta return Symbol_Rep; function Attr_Machine_Rounds return Symbol_Rep; function Attr_Digits return Symbol_Rep; function Attr_Mantissa return Symbol_Rep; function Attr_Emax return Symbol_Rep; function Attr_Small return Symbol_Rep; function Attr_Large return Symbol_Rep; function Attr_Epsilon return Symbol_Rep; function Attr_Machine_Radix return Symbol_Rep; function Attr_Machine_Emax return Symbol_Rep; function Attr_Machine_Emin return Symbol_Rep; function Attr_Length return Symbol_Rep; function Attr_Range return Symbol_Rep; function Attr_Constrained return Symbol_Rep; function Attr_Position return Symbol_Rep; function Attr_First_Bit return Symbol_Rep; function Attr_Last_Bit return Symbol_Rep; function Attr_Storage_Size return Symbol_Rep; function Attr_Terminated return Symbol_Rep; function Attr_Count return Symbol_Rep; function Attr_Machine_Mantissa return Symbol_Rep; function Attr_Machine_Overflows return Symbol_Rep; function Attr_Aft return Symbol_Rep; function Attr_Callable return Symbol_Rep; function Attr_Fore return Symbol_Rep; function Attr_Safe_Emax return Symbol_Rep; function Attr_Safe_Large return Symbol_Rep; function Attr_Safe_Small return Symbol_Rep; function Attr_Width return Symbol_Rep; end Attr_Names; package Pragma_Names is function Priority return Symbol_Rep; function Memory_Size return Symbol_Rep; function Suppress return Symbol_Rep; function Inline return Symbol_Rep; function List return Symbol_Rep; function Pack return Symbol_Rep; function Storage_Unit return Symbol_Rep; function Optimize return Symbol_Rep; function Interface return Symbol_Rep; function System_Name return Symbol_Rep; function Controlled return Symbol_Rep; function Elaborate return Symbol_Rep; function Page return Symbol_Rep; function Shared return Symbol_Rep; end Pragma_Names; package Operator_Names is function Abs_Op return Symbol_Rep; function Plus_Op return Symbol_Rep; function Minus_Op return Symbol_Rep; function Times_Op return Symbol_Rep; function Divide_Op return Symbol_Rep; function Mod_Op return Symbol_Rep; function Rem_Op return Symbol_Rep; function Exp_Op return Symbol_Rep; function And_Op return Symbol_Rep; function Or_Op return Symbol_Rep; function Xor_Op return Symbol_Rep; function Not_Op return Symbol_Rep; function Eq_Op return Symbol_Rep; function Ne_Op return Symbol_Rep; function Lt_Op return Symbol_Rep; function Gt_Op return Symbol_Rep; function Ge_Op return Symbol_Rep; function Le_Op return Symbol_Rep; function Concat_Op return Symbol_Rep; function Operators (Index : Positive) return Symbol_Rep; end Operator_Names; package Check_Names is function Access_Check return Symbol_Rep; function Discriminant_Check return Symbol_Rep; function Index_Check return Symbol_Rep; function Length_Check return Symbol_Rep; function Range_Check return Symbol_Rep; function Division_Check return Symbol_Rep; function Overflow_Check return Symbol_Rep; function Elaboration_Check return Symbol_Rep; function Storage_Check return Symbol_Rep; end Check_Names; package Exception_Names is function Constraint_Err return Symbol_Rep; function Numeric_Err return Symbol_Rep; function Storage_Err return Symbol_Rep; function Tasking_Err return Symbol_Rep; function Program_Err return Symbol_Rep; end Exception_Names; --------------------------------------------------------------------------- function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Tree; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Seq_Type; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Sequence; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Symbol_Rep; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Number_Rep; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Comment; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Attr_Name; function Convert (Segment : System.Segment; Offset : System.Bit_Offset) return Attr_List; function Convert (Node : Tree) return System.Address; --------------------------------------------------------------------------- function Node_Size (T : Diana.Tree) return Integer; function Node_Size (S : Diana.Seq_Type) return Integer; function Node_Size (S : Diana.Sequence) return Integer; function Node_Size (S : Diana.Temp_Seq) return Integer; function Node_Size (L : Attr_List) return Integer; function Size (S : Diana.Symbol_Rep) return Integer; function Size (S : Diana.Number_Rep) return Integer; function Size (S : Diana.Sequence) return Integer; function Size (S : Diana.Temp_Seq) return Integer; function Hash (S : Diana.Seq_Type) return Long_Integer; function Hash (S : Diana.Sequence) return Long_Integer; function Hash (S : Diana.Temp_Seq) return Long_Integer; --------------------------------------------------------------------------- -- Operator type type Operator is (No_Operation, Boolean_Eq, Boolean_Ne, Boolean_Lt, Boolean_Le, Boolean_Gt, Boolean_Ge, Boolean_And, Boolean_Or, Boolean_Xor, Boolean_Not, Other_Boolean_Eq, Other_Boolean_Ne, Other_Boolean_Lt, Other_Boolean_Le, Other_Boolean_Gt, Other_Boolean_Ge, Other_Boolean_And, Other_Boolean_Or, Other_Boolean_Xor, Other_Boolean_Not, Integer_Eq, Integer_Ne, Integer_Lt, Integer_Le, Integer_Gt, Integer_Ge, Integer_Plus, Integer_Neg, Integer_Abs, Integer_Add, Integer_Sub, Integer_Mul, Integer_Div, Integer_Mod, Integer_Rem, Integer_Exp, Short_Integer_Eq, Short_Integer_Ne, Short_Integer_Lt, Short_Integer_Le, Short_Integer_Gt, Short_Integer_Ge, Short_Integer_Plus, Short_Integer_Neg, Short_Integer_Abs, Short_Integer_Add, Short_Integer_Sub, Short_Integer_Mul, Short_Integer_Div, Short_Integer_Mod, Short_Integer_Rem, Short_Integer_Exp, Short_Short_Integer_Eq, Short_Short_Integer_Ne, Short_Short_Integer_Lt, Short_Short_Integer_Le, Short_Short_Integer_Gt, Short_Short_Integer_Ge, Short_Short_Integer_Plus, Short_Short_Integer_Neg, Short_Short_Integer_Abs, Short_Short_Integer_Add, Short_Short_Integer_Sub, Short_Short_Integer_Mul, Short_Short_Integer_Div, Short_Short_Integer_Mod, Short_Short_Integer_Rem, Short_Short_Integer_Exp, Long_Integer_Eq, Long_Integer_Ne, Long_Integer_Lt, Long_Integer_Le, Long_Integer_Gt, Long_Integer_Ge, Long_Integer_Plus, Long_Integer_Neg, Long_Integer_Abs, Long_Integer_Add, Long_Integer_Sub, Long_Integer_Mul, Long_Integer_Div, Long_Integer_Mod, Long_Integer_Rem, Long_Integer_Exp, Long_Long_Integer_Eq, Long_Long_Integer_Ne, Long_Long_Integer_Lt, Long_Long_Integer_Le, Long_Long_Integer_Gt, Long_Long_Integer_Ge, Long_Long_Integer_Plus, Long_Long_Integer_Neg, Long_Long_Integer_Abs, Long_Long_Integer_Add, Long_Long_Integer_Sub, Long_Long_Integer_Mul, Long_Long_Integer_Div, Long_Long_Integer_Mod, Long_Long_Integer_Rem, Long_Long_Integer_Exp, Formal_Integer_Eq, Formal_Integer_Ne, Formal_Integer_Lt, Formal_Integer_Le, Formal_Integer_Gt, Formal_Integer_Ge, Formal_Integer_Plus, Formal_Integer_Neg, Formal_Integer_Abs, Formal_Integer_Add, Formal_Integer_Sub, Formal_Integer_Mul, Formal_Integer_Div, Formal_Integer_Mod, Formal_Integer_Rem, Formal_Integer_Exp, Universal_Integer_Eq, Universal_Integer_Ne, Universal_Integer_Lt, Universal_Integer_Le, Universal_Integer_Gt, Universal_Integer_Ge, Universal_Integer_Plus, Universal_Integer_Neg, Universal_Integer_Abs, Universal_Integer_Add, Universal_Integer_Sub, Universal_Integer_Mul, Universal_Integer_Div, Universal_Integer_Mod, Universal_Integer_Rem, Universal_Integer_Exp, Other_Integer_Eq, Other_Integer_Ne, Other_Integer_Lt, Other_Integer_Le, Other_Integer_Gt, Other_Integer_Ge, Other_Integer_Plus, Other_Integer_Neg, Other_Integer_Abs, Other_Integer_Add, Other_Integer_Sub, Other_Integer_Mul, Other_Integer_Div, Other_Integer_Mod, Other_Integer_Rem, Other_Integer_Exp, Float_Eq, Float_Ne, Float_Lt, Float_Le, Float_Gt, Float_Ge, Float_Plus, Float_Neg, Float_Abs, Float_Add, Float_Sub, Float_Mul, Float_Div, Float_Exp, Short_Float_Eq, Short_Float_Ne, Short_Float_Lt, Short_Float_Le, Short_Float_Gt, Short_Float_Ge, Short_Float_Plus, Short_Float_Neg, Short_Float_Abs, Short_Float_Add, Short_Float_Sub, Short_Float_Mul, Short_Float_Div, Short_Float_Exp, Short_Short_Float_Eq, Short_Short_Float_Ne, Short_Short_Float_Lt, Short_Short_Float_Le, Short_Short_Float_Gt, Short_Short_Float_Ge, Short_Short_Float_Plus, Short_Short_Float_Neg, Short_Short_Float_Abs, Short_Short_Float_Add, Short_Short_Float_Sub, Short_Short_Float_Mul, Short_Short_Float_Div, Short_Short_Float_Exp, Long_Float_Eq, Long_Float_Ne, Long_Float_Lt, Long_Float_Le, Long_Float_Gt, Long_Float_Ge, Long_Float_Plus, Long_Float_Neg, Long_Float_Abs, Long_Float_Add, Long_Float_Sub, Long_Float_Mul, Long_Float_Div, Long_Float_Exp, Long_Long_Float_Eq, Long_Long_Float_Ne, Long_Long_Float_Lt, Long_Long_Float_Le, Long_Long_Float_Gt, Long_Long_Float_Ge, Long_Long_Float_Plus, Long_Long_Float_Neg, Long_Long_Float_Abs, Long_Long_Float_Add, Long_Long_Float_Sub, Long_Long_Float_Mul, Long_Long_Float_Div, Long_Long_Float_Exp, Formal_Float_Eq, Formal_Float_Ne, Formal_Float_Lt, Formal_Float_Le, Formal_Float_Gt, Formal_Float_Ge, Formal_Float_Plus, Formal_Float_Neg, Formal_Float_Abs, Formal_Float_Add, Formal_Float_Sub, Formal_Float_Mul, Formal_Float_Div, Formal_Float_Exp, Universal_Real_Eq, Universal_Real_Ne, Universal_Real_Lt, Universal_Real_Le, Universal_Real_Gt, Universal_Real_Ge, Universal_Real_Plus, Universal_Real_Neg, Universal_Real_Abs, Universal_Real_Add, Universal_Real_Sub, Universal_Real_Mul, Universal_Real_Div, Universal_Real_Exp, Universal_Integer_Real_Mul, Universal_Real_Integer_Mul, Universal_Real_Integer_Div, Universal_Fixed_Mul, Universal_Fixed_Div, Duration_Eq, Duration_Ne, Duration_Lt, Duration_Le, Duration_Gt, Duration_Ge, Duration_Plus, Duration_Neg, Duration_Abs, Duration_Add, Duration_Sub, Duration_Integer_Mul, Integer_Duration_Mul, Duration_Integer_Div, Formal_Fixed_Eq, Formal_Fixed_Ne, Formal_Fixed_Lt, Formal_Fixed_Le, Formal_Fixed_Gt, Formal_Fixed_Ge, Formal_Fixed_Plus, Formal_Fixed_Neg, Formal_Fixed_Abs, Formal_Fixed_Add, Formal_Fixed_Sub, Formal_Fixed_Integer_Mul, Integer_Formal_Fixed_Mul, Formal_Fixed_Integer_Div, Other_Fixed_Eq, Other_Fixed_Ne, Other_Fixed_Lt, Other_Fixed_Le, Other_Fixed_Gt, Other_Fixed_Ge, Other_Fixed_Plus, Other_Fixed_Neg, Other_Fixed_Abs, Other_Fixed_Add, Other_Fixed_Sub, Other_Fixed_Integer_Mul, Integer_Other_Fixed_Mul, Other_Fixed_Integer_Div, Character_Eq, Character_Ne, Character_Lt, Character_Le, Character_Gt, Character_Ge, Enumeration_Eq, Enumeration_Ne, Enumeration_Lt, Enumeration_Le, Enumeration_Gt, Enumeration_Ge, Formal_Discrete_Eq, Formal_Discrete_Ne, Formal_Discrete_Lt, Formal_Discrete_Le, Formal_Discrete_Gt, Formal_Discrete_Ge, String_Eq, String_Ne, String_Lt, String_Le, String_Gt, String_Ge, String_String_Cat, String_Character_Cat, Character_String_Cat, Character_Character_Cat, One_Dim_Array_Eq, One_Dim_Array_Ne, One_Dim_Discrete_Array_Lt, One_Dim_Discrete_Array_Le, One_Dim_Discrete_Array_Gt, One_Dim_Discrete_Array_Ge, One_Dim_Boolean_Array_Not, One_Dim_Boolean_Array_And, One_Dim_Boolean_Array_Or, One_Dim_Boolean_Array_Xor, One_Dim_Array_Array_Cat, One_Dim_Array_Element_Cat, One_Dim_Element_Array_Cat, One_Dim_Element_Element_Cat, Multi_Dim_Array_Eq, Multi_Dim_Array_Ne, One_Dim_Formal_Array_Eq, One_Dim_Formal_Array_Ne, One_Dim_Discrete_Formal_Array_Lt, One_Dim_Discrete_Formal_Array_Le, One_Dim_Discrete_Formal_Array_Gt, One_Dim_Discrete_Formal_Array_Ge, One_Dim_Boolean_Formal_Array_Not, One_Dim_Boolean_Formal_Array_And, One_Dim_Boolean_Formal_Array_Or, One_Dim_Boolean_Formal_Array_Xor, One_Dim_Formal_Array_Array_Cat, One_Dim_Formal_Array_Element_Cat, One_Dim_Formal_Element_Array_Cat, One_Dim_Formal_Element_Element_Cat, Multi_Dim_Formal_Array_Eq, Multi_Dim_Formal_Array_Ne, Record_Eq, Record_Ne, Access_Eq, Access_Ne, Formal_Access_Eq, Formal_Access_Ne, Private_Eq, Private_Ne, Formal_Private_Eq, Formal_Private_Ne); procedure Sm_Operator (T : Tree; V : Operator); function Sm_Operator (T : Tree) return Operator; procedure Sm_Operator_Value (T : Tree; V : Operator); function Sm_Operator_Value (T : Tree) return Operator; --------------------------------------------------------------------------- -- Line Count attribute for pretty printer. type Line_Count is new Integer range 0 .. 2 ** 24 - 1; function Lx_Line_Count (T : Tree) return Line_Count; procedure Lx_Line_Count (T : Tree; V : Line_Count); -- Predicates to facilitate efficient traversal of structural -- lists. function Is_In_List (T : Diana.Tree) return Boolean; -- returns true iff T is a member of a structural list, i.e. -- iff T = Diana.Head (S) for some seq_type value S. function Is_At_Lists_End (T : Diana.Tree) return Boolean; --------------------------------------------------------------------------- package Id_Table_Attrs is function Has_Sm_Seqnum (Id : Diana.Tree) return Boolean; procedure Sm_Seqnum (Id : Diana.Tree; Seqnum : Integer); function Sm_Seqnum (Id : Diana.Tree) return Integer; procedure Sm_Id_Table (Decl_Regn : Diana.Tree; Value : Id_Table.Id_Map); function Sm_Id_Table (Decl_Regn : Diana.Tree) return Id_Table.Id_Map; function Has_Sm_Id_Table (Decl_Regn : Diana.Tree) return Boolean; end Id_Table_Attrs; --------------------------------------------------------------------------- type Decl_Number is range 0 .. 4095; type Decl_Number_Mask_Array is array (Decl_Number) of Boolean; type Decl_Number_Mask is access Decl_Number_Mask_Array; pragma Segmented_Heap (Decl_Number_Mask); --------------------------------------------------------------------------- type Tree_Vector is array (Positive range <>) of Diana.Tree; function Is_Comment (Node : Diana.Tree) return Boolean; type Declaration_Number is new Natural; type Declaration_Number_Mask_Array is array (Declaration_Number range <>) of Boolean; type Declaration_Number_Mask is access Declaration_Number_Mask_Array; pragma Segmented_Heap (Declaration_Number_Mask); function Has_Lx_Line_Count (T : Diana.Tree) return Boolean; end Diana; pragma Cache_Register (Diana, 11);