diff options
Diffstat (limited to 'disp_tree.adb')
-rw-r--r-- | disp_tree.adb | 1853 |
1 files changed, 1853 insertions, 0 deletions
diff --git a/disp_tree.adb b/disp_tree.adb new file mode 100644 index 000000000..6b3203f33 --- /dev/null +++ b/disp_tree.adb @@ -0,0 +1,1853 @@ +-- Node displaying (for debugging). +-- Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or +-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +-- for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with GCC; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. +with Ada.Text_IO; use Ada.Text_IO; +with System.Storage_Elements; +with Ada.Unchecked_Conversion; +with Types; use Types; +with Name_Table; +with Iirs_Utils; use Iirs_Utils; +with Tokens; +with Errorout; +with Files_Map; + +package body Disp_Tree is + procedure Disp_Tab (Tab: Natural) is + Blanks : String (1 .. Tab) := (others => ' '); + begin + Put (Blanks); + end Disp_Tab; + + function Addr_Image (A : System.Address) return String is + Res : String (1 .. System.Address'Size / 4); + Hex_Digits : constant array (Integer range 0 .. 15) of Character + := "0123456789abcdef"; + use System; + use System.Storage_Elements; + Addr_Num : Integer_Address := To_Integer (A); + begin + for I in reverse Res'Range loop + Res (I) := Hex_Digits (Integer (Addr_Num mod 16)); + Addr_Num := Addr_Num / 16; + end loop; + return Res; + end Addr_Image; + + procedure Disp_Iir_Address (Node: Iir) + is + function To_Addr is new Ada.Unchecked_Conversion + (Source => Iir, Target => System.Address); + begin + Put ('[' & Addr_Image (To_Addr (Node)) & ']'); + end Disp_Iir_Address; + + function Inc_Tab (Tab: Natural) return Natural is + begin + return Tab + 4; + end Inc_Tab; + + + -- For iir. + + procedure Disp_Tree_Flat (Tree: Iir; Tab: Natural); + + procedure Disp_Tree_List + (Tree_List: Iir_List; Tab: Natural; Flat_Decl : Boolean := False) + is + El: Iir; + begin + if Tree_List = Null_Iir_List then + Disp_Tab (Tab); + Put_Line (" null-list"); + elsif Tree_List = Iir_List_All then + Disp_Tab (Tab); + Put_Line (" list-all"); + elsif Tree_List = Iir_List_Others then + Disp_Tab (Tab); + Put_Line (" list-others"); + else + for I in Natural loop + El := Get_Nth_Element (Tree_List, I); + exit when El = Null_Iir; + Disp_Tree (El, Tab, Flat_Decl); + end loop; + end if; + end Disp_Tree_List; + + procedure Disp_Tree_Chain + (Tree_Chain: Iir; Tab: Natural; Flat_Decl : Boolean := False) + is + El: Iir; + begin + El := Tree_Chain; + while El /= Null_Iir loop + Disp_Tree (El, Tab, Flat_Decl); + El := Get_Chain (El); + end loop; + end Disp_Tree_Chain; + + procedure Disp_Tree_Flat_Chain (Tree_Chain: Iir; Tab: Natural) + is + El: Iir; + begin + El := Tree_Chain; + while El /= Null_Iir loop + Disp_Tree_Flat (El, Tab); + El := Get_Chain (El); + end loop; + end Disp_Tree_Flat_Chain; + + procedure Disp_Tree_List_Flat (Tree_List: Iir_List; Tab: Natural) + is + El: Iir; + begin + if Tree_List = Null_Iir_List then + Disp_Tab (Tab); + Put_Line (" null-list"); + elsif Tree_List = Iir_List_All then + Disp_Tab (Tab); + Put_Line (" list-all"); + elsif Tree_List = Iir_List_Others then + Disp_Tab (Tab); + Put_Line (" list-others"); + else + for I in Natural loop + El := Get_Nth_Element (Tree_List, I); + exit when El = Null_Iir; + Disp_Tree_Flat (El, Tab); + end loop; + end if; + end Disp_Tree_List_Flat; + + procedure Disp_Ident (Ident: Name_Id) + is + use Name_Table; + begin + if Ident /= Null_Identifier then + Image (Ident); + Put_Line (" '" & Name_Buffer (1 .. Name_Length) & '''); + else + Put_Line (" <anonymous>"); + end if; + end Disp_Ident; + + procedure Disp_Tree_Flat (Tree: Iir; Tab: Natural) + is + procedure Disp_Identifier (Identifying: Iir) + is + Ident : Name_Id; + begin + if Identifying /= Null_Iir then + Ident := Get_Identifier (Identifying); + Disp_Ident (Ident); + else + New_Line; + end if; + end Disp_Identifier; + + procedure Disp_Decl_Ident + is + A_Type: Iir; + begin + A_Type := Get_Type_Declarator (Tree); + if A_Type /= Null_Iir then + Disp_Identifier (A_Type); + else + Put_Line (" <unnamed>"); + return; + end if; + end Disp_Decl_Ident; + begin + Disp_Tab (Tab); + Disp_Iir_Address (Tree); + + if Tree = Null_Iir then + Put_Line (" *NULL*"); + return; + else + Put (' '); + end if; + + case Get_Kind (Tree) is + when Iir_Kind_Design_File => + Put_Line ("design file"); + + when Iir_Kind_Design_Unit => + Put ("design_unit"); + Disp_Identifier (Tree); + + when Iir_Kind_Use_Clause => + Put_Line ("use_clause"); + + when Iir_Kind_Library_Clause => + Put ("library clause"); + Disp_Identifier (Tree); + + when Iir_Kind_Library_Declaration => + Put ("library declaration"); + Disp_Identifier (Tree); + + when Iir_Kind_Proxy => + Put_Line ("proxy"); + + when Iir_Kind_Waveform_Element => + Put_Line ("waveform_element"); + + when Iir_Kind_Package_Declaration => + Put ("package_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Package_Body => + Put ("package_body"); + Disp_Identifier (Tree); + when Iir_Kind_Entity_Declaration => + Put ("entity_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Architecture_Declaration => + Put ("architecture_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Configuration_Declaration => + Put ("configuration_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Function_Declaration => + Put ("function_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Function_Body => + Put_Line ("function_body"); + when Iir_Kind_Procedure_Declaration => + Put ("procedure_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Procedure_Body => + Put_Line ("procedure_body"); + when Iir_Kind_Object_Alias_Declaration => + Put ("object_alias_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Non_Object_Alias_Declaration => + Put ("non_object_alias_declaration"); + Disp_Identifier (Tree); + + when Iir_Kind_Signal_Interface_Declaration => + Put ("signal_interface_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Signal_Declaration => + Put ("signal_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Variable_Interface_Declaration => + Put ("variable_interface_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Variable_Declaration => + if Get_Shared_Flag (Tree) then + Put ("(shared) "); + end if; + Put ("variable_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Constant_Interface_Declaration => + Put ("constant_interface_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Constant_Declaration => + Put ("constant_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Iterator_Declaration => + Put ("iterator_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_File_Interface_Declaration => + Put ("file_interface_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_File_Declaration => + Put ("file_declaration"); + Disp_Identifier (Tree); + + when Iir_Kind_Type_Declaration => + Put ("type_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Anonymous_Type_Declaration => + Put ("anonymous_type_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Subtype_Declaration => + Put ("subtype_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Component_Declaration => + Put ("component_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Element_Declaration => + Put ("element_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Attribute_Declaration => + Put ("attribute_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Group_Template_Declaration => + Put ("group_template_declaration"); + Disp_Identifier (Tree); + when Iir_Kind_Group_Declaration => + Put ("group_declaration"); + Disp_Identifier (Tree); + + when Iir_Kind_Enumeration_Type_Definition => + Put ("enumeration_type_definition"); + Disp_Decl_Ident; + when Iir_Kind_Enumeration_Subtype_Definition => + Put ("enumeration_subtype_definition"); + Disp_Decl_Ident; + when Iir_Kind_Integer_Subtype_Definition => + Put ("integer_subtype_definition"); + Disp_Decl_Ident; + when Iir_Kind_Integer_Type_Definition => + Put ("integer_type_definition"); + Disp_Identifier (Get_Type_Declarator (Tree)); + when Iir_Kind_Floating_Subtype_Definition => + Put ("floating_subtype_definition"); + Disp_Decl_Ident; + when Iir_Kind_Floating_Type_Definition => + Put ("floating_type_definition"); + Disp_Identifier (Get_Type_Declarator (Tree)); + when Iir_Kind_Array_Subtype_Definition => + Put ("array_subtype_definition"); + Disp_Decl_Ident; + when Iir_Kind_Array_Type_Definition => + Put ("array_type_definition"); + Disp_Decl_Ident; + when Iir_Kind_Record_Type_Definition => + Put ("record_type_definition"); + Disp_Decl_Ident; + when Iir_Kind_Access_Type_Definition => + Put ("access_type_definition"); + Disp_Decl_Ident; + when Iir_Kind_File_Type_Definition => + Put ("file_type_definition"); + Disp_Identifier (Get_Type_Declarator (Tree)); + when Iir_Kind_Subtype_Definition => + Put_Line ("subtype_definition"); + when Iir_Kind_Physical_Type_Definition => + Put ("physical_type_definition"); + Disp_Identifier (Get_Type_Declarator (Tree)); + when Iir_Kind_Physical_Subtype_Definition => + Put_Line ("physical_subtype_definition"); + + when Iir_Kind_Simple_Name => + Put ("simple_name "); + Disp_Identifier (Tree); + + when Iir_Kind_Operator_Symbol => + Put ("operator_symbol """); + Name_Table.Image (Get_Identifier (Tree)); + Put (Name_Table.Name_Buffer (1 .. Name_Table.Name_Length)); + Put_Line (""""); + + when Iir_Kind_Null_Literal => + Put_Line ("null_literal"); + + when Iir_Kind_Physical_Int_Literal => + Put_Line ("physical_int_literal"); + + when Iir_Kind_Physical_Fp_Literal => + Put_Line ("physical_fp_literal"); + + when Iir_Kind_Component_Instantiation_Statement => + Put ("component_instantiation_statement"); + Disp_Ident (Get_Label (Tree)); + when Iir_Kind_Block_Statement => + Put ("block_statement"); + Disp_Ident (Get_Label (Tree)); + when Iir_Kind_Sensitized_Process_Statement => + Put ("sensitized_process_statement"); + Disp_Ident (Get_Label (Tree)); + when Iir_Kind_Process_Statement => + Put ("process_statement"); + Disp_Ident (Get_Label (Tree)); + when Iir_Kind_Case_Statement => + Put_Line ("case_statement"); + when Iir_Kind_If_Statement => + Put_Line ("if_statement"); + when Iir_Kind_Elsif => + Put_Line ("Elsif"); + when Iir_Kind_For_Loop_Statement => + Put_Line ("for_loop_statement"); + when Iir_Kind_While_Loop_Statement => + Put_Line ("while_loop_statement"); + when Iir_Kind_Exit_Statement => + Put_Line ("exit_statement"); + when Iir_Kind_Next_Statement => + Put_Line ("next_statement"); + when Iir_Kind_Wait_Statement => + Put_Line ("wait_statement"); + when Iir_Kind_Assertion_Statement => + Put_Line ("assertion_statement"); + when Iir_Kind_Variable_Assignment_Statement => + Put_Line ("variable_assignment_statement"); + when Iir_Kind_Signal_Assignment_Statement => + Put_Line ("signal_assignment_statement"); + when Iir_Kind_Concurrent_Assertion_Statement => + Put_Line ("concurrent_assertion_statement"); + when Iir_Kind_Procedure_Call_Statement => + Put_Line ("procedure_call_statement"); + when Iir_Kind_Concurrent_Procedure_Call_Statement => + Put_Line ("concurrent_procedure_call_statement"); + when Iir_Kind_Return_Statement => + Put_Line ("return_statement"); + when Iir_Kind_Null_Statement => + Put_Line ("null_statement"); + + when Iir_Kind_Enumeration_Literal => + Put ("enumeration_literal"); + Disp_Identifier (Tree); + + when Iir_Kind_Character_Literal => + Put_Line ("character_literal"); + when Iir_Kind_Integer_Literal => + Put_Line ("integer_literal: " + & Iir_Int64'Image (Get_Value (Tree))); + when Iir_Kind_Floating_Point_Literal => + Put_Line ("floating_point_literal: " + & Iir_Fp64'Image (Get_Fp_Value (Tree))); + when Iir_Kind_String_Literal => + Put_Line ("string_literal: " & Image_String_Lit (Tree)); + when Iir_Kind_Unit_Declaration => + Put ("physical unit"); + Disp_Identifier (Tree); + when Iir_Kind_Entity_Class => + Put_Line ("entity_class '" + & Tokens.Image (Get_Entity_Class (Tree)) & '''); + + when Iir_Kind_Attribute_Name => + Put ("attribute_name"); + Disp_Ident (Get_Attribute_Identifier (Tree)); + + when Iir_Kind_Implicit_Function_Declaration => + Put ("implicit_function_declaration: "); + Put_Line (Iirs_Utils.Get_Predefined_Function_Name + (Get_Implicit_Definition (Tree))); + when Iir_Kind_Implicit_Procedure_Declaration => + Put ("implicit_procedure_declaration: "); + Put_Line (Iirs_Utils.Get_Predefined_Function_Name + (Get_Implicit_Definition (Tree))); + + when others => + Put_Line (Iir_Kind'Image (Get_Kind (Tree))); + end case; + end Disp_Tree_Flat; + + procedure Disp_Staticness (Static: Iir_Staticness) is + begin + case Static is + when Unknown => + Put ("???"); + when None => + Put ("none"); + when Globally => + Put ("global"); + when Locally => + Put ("local"); + end case; + end Disp_Staticness; + + procedure Disp_Flag (Bool : Boolean) is + begin + if Bool then + Put ("true"); + else + Put ("false"); + end if; + New_Line; + end Disp_Flag; + + procedure Disp_Expr_Staticness (Expr: Iir) is + begin + Put (" expr: "); + Disp_Staticness (Get_Expr_Staticness (Expr)); + New_Line; + end Disp_Expr_Staticness; + + procedure Disp_Type_Staticness (Atype: Iir) is + begin + Put (" type: "); + Disp_Staticness (Get_Type_Staticness (Atype)); + New_Line; + end Disp_Type_Staticness; + + procedure Disp_Name_Staticness (Expr: Iir) is + begin + Put (" expr: "); + Disp_Staticness (Get_Expr_Staticness (Expr)); + Put (", name: "); + Disp_Staticness (Get_Name_Staticness (Expr)); + New_Line; + end Disp_Name_Staticness; + + procedure Disp_Choice_Staticness (Expr: Iir) is + begin + Put (" choice: "); + Disp_Staticness (Get_Choice_Staticness (Expr)); + New_Line; + end Disp_Choice_Staticness; + + procedure Disp_Type_Resolved_Flag (Atype : Iir) is + begin + if Get_Resolved_Flag (Atype) then + Put_Line ("resolved"); + else + New_Line; + end if; + end Disp_Type_Resolved_Flag; + + procedure Disp_Lexical_Layout (Decl : Iir) + is + V : Iir_Lexical_Layout_Type; + begin + V := Get_Lexical_Layout (Decl); + if (V and Iir_Lexical_Has_Mode) /= 0 then + Put (" +mode"); + end if; + if (V and Iir_Lexical_Has_Class) /= 0 then + Put (" +class"); + end if; + if (V and Iir_Lexical_Has_Type) /= 0 then + Put (" +type"); + end if; + New_Line; + end Disp_Lexical_Layout; + + procedure Disp_Purity_State (State : Iir_Pure_State) + is + begin + case State is + when Pure => + Put (" pure"); + when Impure => + Put (" impure"); + when Maybe_Impure => + Put (" maybe_impure"); + when Unknown => + Put (" unknown"); + end case; + New_Line; + end Disp_Purity_State; + + procedure Disp_State (State : Tri_State_Type) + is + begin + case State is + when True => + Put (" true"); + when False => + Put (" false"); + when Unknown => + Put (" unknown"); + end case; + New_Line; + end Disp_State; + + procedure Disp_Depth (Depth : Iir_Int32) is + begin + Put (Iir_Int32'Image (Depth)); + New_Line; + end Disp_Depth; + + procedure Disp_Tree (Tree: Iir; + Tab: Natural := 0; + Flat_Decl: Boolean := false) is + Ntab: Natural := Inc_Tab (Tab); + Kind : Iir_Kind; + + procedure Header (Str: String; Nl: Boolean := true) is + begin + Disp_Tab (Ntab); + Put (Str); + if Nl then + New_Line; + end if; + end Header; + + procedure Disp_Label (Tree: Iir)is + Label : Name_Id; + begin + Label := Get_Label (Tree); + if Label /= Null_Identifier then + Header ("label: " & Name_Table.Image (Label)); + else + Header ("label: -"); + end if; + end Disp_Label; + begin + Disp_Tree_Flat (Tree, Tab); + if Tree = Null_Iir then + return; + end if; + + if Get_Location (Tree) /= Location_Nil then + Header ("loc: " & Errorout.Get_Location_Str (Get_Location (Tree))); + end if; + if False then + Header ("parent:"); + Disp_Tree_Flat (Get_Parent (Tree), Ntab); + end if; + + Kind := Get_Kind (Tree); + case Kind is + when Iir_Kind_Overload_List => + Header ("overload_list"); + Disp_Tree_List (Get_Overload_List (Tree), Ntab, Flat_Decl); + + when Iir_Kind_Error => + null; + + when Iir_Kind_Design_File => + Header ("design_file_filename: " + & Name_Table.Image (Get_Design_File_Filename (Tree))); + Header ("design_file_directory: " + & Name_Table.Image (Get_Design_File_Directory (Tree))); + Header ("analysis_time_stamp: " + & Files_Map.Get_Time_Stamp_String + (Get_Analysis_Time_Stamp (Tree))); + Header ("file_time_stamp: " + & Files_Map.Get_Time_Stamp_String + (Get_File_Time_Stamp (Tree))); + Header ("library:"); + Disp_Tree_Flat (Get_Parent (Tree), Ntab); + Header ("design_unit_chain:"); + Disp_Tree_Chain (Get_First_Design_Unit (Tree), Ntab, Flat_Decl); + + when Iir_Kind_Design_Unit => + if Flat_Decl then + return; + end if; + Header ("flags: date_state: " + & Date_State_Type'Image (Get_Date_State (Tree)) + & ", elab: " + & Boolean'Image (Get_Elab_Flag (Tree))); + Header ("date:" & Date_Type'Image (Get_Date (Tree))); + Header ("parent (design file):"); + Disp_Tree_Flat (Get_Design_File (Tree), Ntab); + Header ("dependence list:"); + Disp_Tree_List_Flat (Get_Dependence_List (Tree), Ntab); + if Get_Date_State (Tree) /= Date_Disk then + Header ("context items:"); + Disp_Tree_Chain (Get_Context_Items (Tree), Ntab); + end if; + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + Header ("library unit:"); + Disp_Tree (Get_Library_Unit (Tree), Ntab); + when Iir_Kind_Use_Clause => + Header ("selected name:"); + Disp_Tree (Get_Selected_Name (Tree), Ntab, True); + Header ("use_clause_chain:"); + Disp_Tree (Get_Use_Clause_Chain (Tree), Ntab); + when Iir_Kind_Library_Clause => + Header ("library declaration:"); + Disp_Tree_Flat (Get_Library_Declaration (Tree), Ntab); + + when Iir_Kind_Library_Declaration => + if Flat_Decl then + return; + end if; + Header ("library_directory: " + & Name_Table.Image (Get_Library_Directory (Tree))); + Header ("design file list:"); + Disp_Tree_Chain (Get_Design_File_Chain (Tree), Ntab); + + when Iir_Kind_Entity_Declaration => + Header ("generic chain:"); + Disp_Tree_Chain (Get_Generic_Chain (Tree), Ntab); + Header ("port chain:"); + Disp_Tree_Chain (Get_Port_Chain (Tree), Ntab); + Header ("declaration chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("concurrent_statements:"); + Disp_Tree_Chain (Get_Concurrent_Statement_Chain (Tree), Ntab); + when Iir_Kind_Package_Declaration => + if Flat_Decl then + return; + end if; + Header ("need_body: " & Boolean'Image (Get_Need_Body (Tree))); + Header ("declaration chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + when Iir_Kind_Package_Body => + Header ("package:"); + Disp_Tree_Flat (Get_Package (Tree), Ntab); + Header ("declaration:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + when Iir_Kind_Architecture_Declaration => + if Flat_Decl then + return; + end if; + Header ("entity:"); + Disp_Tree_Flat (Get_Entity (Tree), Ntab); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("concurrent_statements:"); + Disp_Tree_Chain (Get_Concurrent_Statement_Chain (Tree), Ntab); + Header ("default configuration:"); + Disp_Tree_Flat + (Get_Default_Configuration_Declaration (Tree), Ntab); + when Iir_Kind_Configuration_Declaration => + Header ("entity:"); + Disp_Tree_Flat (Get_Entity (Tree), Ntab); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("block_configuration:"); + Disp_Tree (Get_Block_Configuration (Tree), Ntab, True); + + when Iir_Kind_Entity_Aspect_Entity => + Header ("entity:"); + Disp_Tree_Flat (Get_Entity (Tree), Ntab); + Header ("architecture:"); + Disp_Tree_Flat (Get_Architecture (Tree), Ntab); + when Iir_Kind_Entity_Aspect_Configuration => + Header ("configuration:"); + Disp_Tree (Get_Configuration (Tree), Ntab, True); + when Iir_Kind_Entity_Aspect_Open => + null; + + when Iir_Kind_Block_Configuration => + Header ("block_specification:"); + Disp_Tree (Get_Block_Specification (Tree), Ntab, True); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("configuration_item_chain:"); + Disp_Tree_Chain (Get_Configuration_Item_Chain (Tree), Ntab); + Header ("prev_block_configuration:"); + Disp_Tree_Flat (Get_Prev_Block_Configuration (Tree), Ntab); + when Iir_Kind_Attribute_Specification => + Header ("attribute_designator:"); + Disp_Tree (Get_Attribute_Designator (Tree), Ntab, True); + Header ("entity_name_list:"); + Disp_Tree_List_Flat (Get_Entity_Name_List (Tree), Ntab); + Header ("entity_class: " + & Tokens.Image (Get_Entity_Class (Tree))); + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab); + Header ("attribute_value_spec_chain:"); + Disp_Tree_Chain (Get_Attribute_Value_Spec_Chain (Tree), Ntab); + when Iir_Kind_Configuration_Specification + | Iir_Kind_Component_Configuration => + Header ("instantiation_list:"); + Disp_Tree_List_Flat (Get_Instantiation_List (Tree), Ntab); + Header ("component_name:"); + Disp_Tree (Get_Component_Name (Tree), Ntab, True); + Header ("binding_indication:"); + Disp_Tree (Get_Binding_Indication (Tree), Ntab); + if Kind = Iir_Kind_Component_Configuration then + Header ("block_configuration:"); + Disp_Tree (Get_Block_Configuration (Tree), Ntab); + end if; + when Iir_Kind_Binding_Indication => + Header ("entity_aspect:"); + Disp_Tree (Get_Entity_Aspect (Tree), Ntab, True); + Header ("generic_map_aspect_chain:"); + Disp_Tree_Chain (Get_Generic_Map_Aspect_Chain (Tree), Ntab); + Header ("port_map_aspect_chain:"); + Disp_Tree_Chain (Get_Port_Map_Aspect_Chain (Tree), Ntab); + Header ("default_generic_map_aspect_chain:"); + Disp_Tree_Chain + (Get_Default_Generic_Map_Aspect_Chain (Tree), Ntab); + Header ("default_port_map_aspect_chain:"); + Disp_Tree_Chain (Get_Default_Port_Map_Aspect_Chain (Tree), Ntab); + when Iir_Kind_Block_Header => + Header ("generic chain:"); + Disp_Tree_Chain (Get_Generic_Chain (Tree), Ntab); + Header ("generic_map_aspect_chain:"); + Disp_Tree_Chain (Get_Generic_Map_Aspect_Chain (Tree), Ntab); + Header ("port chain:"); + Disp_Tree_Chain (Get_Port_Chain (Tree), Ntab); + Header ("port_map_aspect_chain:"); + Disp_Tree_Chain (Get_Port_Map_Aspect_Chain (Tree), Ntab); + when Iir_Kind_Attribute_Value => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("attribute_specification:"); + Disp_Tree_Flat (Get_Attribute_Specification (Tree), Ntab); + Header ("designated_entity:"); + Disp_Tree_Flat (Get_Designated_Entity (Tree), Ntab); + when Iir_Kind_Signature => + Header ("return_type:"); + Disp_Tree_Flat (Get_Return_Type (Tree), Ntab); + Header ("type_marks_list:"); + Disp_Tree_List (Get_Type_Marks_List (Tree), Ntab); + when Iir_Kind_Disconnection_Specification => + Header ("signal_list:"); + Disp_Tree_List (Get_Signal_List (Tree), Ntab, True); + Header ("type_mark:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("time expression:"); + Disp_Tree (Get_Expression (Tree), Ntab); + + when Iir_Kind_Association_Element_By_Expression => + Header ("whole_association_flag: ", False); + Disp_Flag (Get_Whole_Association_Flag (Tree)); + Header ("collapse_signal_flag: ", False); + Disp_Flag (Get_Collapse_Signal_Flag (Tree)); + Header ("formal:"); + Disp_Tree (Get_Formal (Tree), Ntab, True); + Header ("out_conversion:"); + Disp_Tree (Get_Out_Conversion (Tree), Ntab, True); + Header ("actual:"); + Disp_Tree (Get_Actual (Tree), Ntab, True); + Header ("in_conversion:"); + Disp_Tree (Get_In_Conversion (Tree), Ntab, True); + when Iir_Kind_Association_Element_By_Individual => + Header ("whole_association_flag: ", False); + Disp_Flag (Get_Whole_Association_Flag (Tree)); + Header ("formal:"); + Disp_Tree (Get_Formal (Tree), Ntab, True); + Header ("actual_type:"); + Disp_Tree (Get_Actual_Type (Tree), Ntab, True); + Header ("individual_association_chain:"); + Disp_Tree_Chain (Get_Individual_Association_Chain (Tree), Ntab); + when Iir_Kind_Association_Element_Open => + Header ("formal:"); + Disp_Tree (Get_Formal (Tree), Ntab, True); + + when Iir_Kind_Waveform_Element => + Header ("value:"); + Disp_Tree (Get_We_Value (Tree), Ntab, True); + Header ("time:"); + Disp_Tree (Get_Time (Tree), Ntab); + when Iir_Kind_Conditional_Waveform => + Header ("condition:"); + Disp_Tree (Get_Condition (Tree), Ntab); + Header ("waveform_chain:"); + Disp_Tree_Chain (Get_Waveform_Chain (Tree), Ntab); + + when Iir_Kind_Choice_By_Name => + Header ("name:"); + Disp_Tree (Get_Name (Tree), Ntab); + Header ("associated:"); + Disp_Tree (Get_Associated (Tree), Ntab, True); + when Iir_Kind_Choice_By_Others => + Header ("associated"); + Disp_Tree (Get_Associated (Tree), Ntab, True); + when Iir_Kind_Choice_By_None => + Header ("associated"); + Disp_Tree (Get_Associated (Tree), Ntab, True); + when Iir_Kind_Choice_By_Range => + Header ("staticness: ", False); + Disp_Choice_Staticness (Tree); + Header ("range:"); + Disp_Tree (Get_Expression (Tree), Ntab); + Header ("associated"); + Disp_Tree (Get_Associated (Tree), Ntab, True); + when Iir_Kind_Choice_By_Expression => + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab); + Header ("staticness: ", False); + Disp_Choice_Staticness (Tree); + Header ("associated"); + Disp_Tree (Get_Associated (Tree), Ntab, True); + + when Iir_Kind_Signal_Interface_Declaration => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Name_Staticness (Tree); + Header ("lexical layout:", False); + Disp_Lexical_Layout (Tree); + Header ("mode: " & Iir_Mode'Image (Get_Mode (Tree))); + Header ("signal kind: " + & Iir_Signal_Kind'Image (Get_Signal_Kind (Tree))); + Header ("has_active_flag: ", False); + Disp_Flag (Get_Has_Active_Flag (Tree)); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Variable_Interface_Declaration => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Name_Staticness (Tree); + Header ("lexical layout:", False); + Disp_Lexical_Layout (Tree); + Header ("mode: " & Iir_Mode'Image (Get_Mode (Tree))); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Constant_Interface_Declaration => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Name_Staticness (Tree); + Header ("lexical layout:", False); + Disp_Lexical_Layout (Tree); + Header ("mode: " & Iir_Mode'Image (Get_Mode (Tree))); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_File_Interface_Declaration => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Name_Staticness (Tree); + Header ("lexical layout:", False); + Disp_Lexical_Layout (Tree); + Header ("mode: " & Iir_Mode'Image (Get_Mode (Tree))); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kind_Signal_Declaration + | Iir_Kind_Guard_Signal_Declaration => + if Flat_Decl then + return; + end if; + Header ("kind: " & Iir_Signal_Kind'Image (Get_Signal_Kind (Tree))); + Header ("has_active_flag: ", False); + Disp_Flag (Get_Has_Active_Flag (Tree)); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + if Kind = Iir_Kind_Signal_Declaration then + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab, True); + Header ("signal_driver:"); + Disp_Tree_Flat (Get_Signal_Driver (Tree), Ntab); + else + Header ("guard expr:"); + Disp_Tree (Get_Guard_Expression (Tree), Ntab); + Header ("guard sensitivity list:"); + Disp_Tree_List (Get_Guard_Sensitivity_List (Tree), Ntab); + end if; + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Constant_Declaration + | Iir_Kind_Iterator_Declaration => + if Flat_Decl then + return; + end if; + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + if Kind = Iir_Kind_Constant_Declaration then + Header ("deferred flag: " & Boolean'Image + (Get_Deferred_Declaration_Flag (Tree))); + Header ("deferred: "); + Disp_Tree (Get_Deferred_Declaration (Tree), Ntab, True); + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab, True); + end if; + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Variable_Declaration => + if Flat_Decl then + return; + end if; + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("default value:"); + Disp_Tree (Get_Default_Value (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_File_Declaration => + if Flat_Decl then + return; + end if; + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("logical name:"); + Disp_Tree (Get_File_Logical_Name (Tree), Ntab); + Header ("mode: " & Iir_Mode'Image (Get_Mode (Tree))); + Header ("file_open_kind:"); + Disp_Tree (Get_File_Open_Kind (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Type_Declaration + | Iir_Kind_Subtype_Declaration => + if Flat_Decl then + return; + end if; + Header ("type (definition):"); + Disp_Tree (Get_Type (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Anonymous_Type_Declaration => + if Flat_Decl then + return; + end if; + Header ("type (definition):"); + Disp_Tree (Get_Type (Tree), Ntab); + when Iir_Kind_Component_Declaration => + if Flat_Decl then + return; + end if; + Header ("generic chain:"); + Disp_Tree_Chain (Get_Generic_Chain (Tree), Ntab); + Header ("port chain:"); + Disp_Tree_Chain (Get_Port_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Element_Declaration => + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Attribute_Declaration => + if Flat_Decl then + return; + end if; + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Function_Declaration + | Iir_Kind_Procedure_Declaration => + if Flat_Decl then + return; + end if; + Header ("interface_declaration_chain:"); + Disp_Tree_Chain (Get_Interface_Declaration_Chain (Tree), Ntab); + if Kind = Iir_Kind_Function_Declaration then + Header ("return type:"); + Disp_Tree (Get_Return_Type (Tree), Ntab, True); + Header ("pure_flag: ", False); + Disp_Flag (Get_Pure_Flag (Tree)); + else + Header ("purity_state:", False); + Disp_Purity_State (Get_Purity_State (Tree)); + end if; + Header ("wait_state:", False); + Disp_State (Get_Wait_State (Tree)); + + Header ("subprogram_depth:", False); + Disp_Depth (Get_Subprogram_Depth (Tree)); + Header ("subprogram_body:"); + Disp_Tree_Flat (Get_Subprogram_Body (Tree), Ntab); + Header ("driver list:"); + Disp_Tree_List (Get_Driver_List (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Procedure_Body + | Iir_Kind_Function_Body => + Header ("specification:"); + Disp_Tree_Flat (Get_Subprogram_Specification (Tree), Ntab); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("statements:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + when Iir_Kind_Implicit_Function_Declaration => + if Flat_Decl then + return; + end if; + Header ("operation: " + & Iir_Predefined_Functions'Image + (Get_Implicit_Definition (Tree))); + Header ("interface declaration chain:"); + Disp_Tree_Chain (Get_Interface_Declaration_Chain (Tree), Ntab); + Header ("return type:"); + Disp_Tree (Get_Return_Type (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Implicit_Procedure_Declaration => + if Flat_Decl then + return; + end if; + Header ("interface declaration chain:"); + Disp_Tree_Chain (Get_Interface_Declaration_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Object_Alias_Declaration => + if Flat_Decl then + return; + end if; + Header ("name:"); + Disp_Tree (Get_Name (Tree), Ntab); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Non_Object_Alias_Declaration => + if Flat_Decl then + return; + end if; + Header ("name:"); + Disp_Tree (Get_Name (Tree), Ntab); + Header ("signature:"); + Disp_Tree (Get_Signature (Tree), Ntab, True); + + when Iir_Kind_Group_Template_Declaration => + Header ("entity_class_entry:"); + Disp_Tree_Chain (Get_Entity_Class_Entry_Chain (Tree), Ntab); + when Iir_Kind_Group_Declaration => + Header ("group_constituent_list:"); + Disp_Tree_List_Flat (Get_Group_Constituent_List (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kind_Enumeration_Type_Definition => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("type declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("literals:"); + Disp_Tree_List (Get_Enumeration_Literal_List (Tree), Ntab); + when Iir_Kind_Integer_Type_Definition + | Iir_Kind_Floating_Type_Definition => + if Flat_Decl and then not Is_Anonymous_Type_Definition (Tree) + then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("type_declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + when Iir_Kind_Integer_Subtype_Definition + | Iir_Kind_Floating_Subtype_Definition + | Iir_Kind_Physical_Subtype_Definition + | Iir_Kind_Enumeration_Subtype_Definition + | Iir_Kind_Subtype_Definition => + if Flat_Decl + and then Kind /= Iir_Kind_Subtype_Definition + and then Get_Type_Declarator (Tree) /= Null_Iir + then + return; + end if; + if Kind /= Iir_Kind_Subtype_Definition then + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("type declarator:"); + Disp_Tree (Get_Type_Declarator (Tree), Ntab, True); + Header ("base type:"); + Disp_Tree (Get_Base_Type (Tree), Ntab, True); + end if; + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("resolution function:"); + Disp_Tree_Flat (Get_Resolution_Function (Tree), Ntab); + Header ("range constraint:"); + Disp_Tree (Get_Range_Constraint (Tree), Ntab); + when Iir_Kind_Range_Expression => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("left limit:"); + Disp_Tree (Get_Left_Limit (Tree), Ntab, True); + Header ("right limit:"); + Disp_Tree (Get_Right_Limit (Tree), Ntab, True); + Header ("direction: " + & Iir_Direction'Image (Get_Direction (Tree))); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Array_Subtype_Definition => + if Flat_Decl and then Get_Type_Declarator (Tree) /= Null_Iir then + return; + end if; + Header ("staticness:", false); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("type declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("base type:"); + declare + Base : Iir := Get_Base_Type (Tree); + Fl : Boolean; + begin + if Base /= Null_Iir + and then Kind = Iir_Kind_Array_Type_Definition + then + Fl := Get_Type_Declarator (Base) + /= Get_Type_Declarator (Tree); + else + Fl := False; + end if; + Disp_Tree (Base, Ntab, Fl); + end; + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("index_subtype_list:"); + Disp_Tree_List (Get_Index_Subtype_List (Tree), Ntab, True); + Header ("element_subtype:"); + Disp_Tree_Flat (Get_Element_Subtype (Tree), Ntab); + Header ("resolution function:"); + Disp_Tree_Flat (Get_Resolution_Function (Tree), Ntab); + when Iir_Kind_Unconstrained_Array_Subtype_Definition => + if Flat_Decl and then Get_Type_Declarator (Tree) /= Null_Iir then + return; + end if; + Header ("type declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("base type:"); + Disp_Tree (Get_Base_Type (Tree), Ntab, True); + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("resolution function:"); + Disp_Tree_Flat (Get_Resolution_Function (Tree), Ntab); + Header ("index_subtype_list:"); + Disp_Tree_List (Get_Index_Subtype_List (Tree), Ntab, True); + when Iir_Kind_Array_Type_Definition => + if Flat_Decl and then Get_Type_Declarator (Tree) /= Null_Iir then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("index_subtype_list:"); + Disp_Tree_List (Get_Index_Subtype_List (Tree), Ntab, True); + Header ("element_subtype:"); + Disp_Tree (Get_Element_Subtype (Tree), Ntab, True); + when Iir_Kind_Record_Type_Definition => + if Flat_Decl and then Get_Type_Declarator (Tree) /= Null_Iir then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("elements:"); + Disp_Tree_Chain (Get_Element_Declaration_Chain (Tree), Ntab, True); + when Iir_Kind_Record_Subtype_Definition => + if Flat_Decl and then not Is_Anonymous_Type_Definition (Tree) then + return; + end if; + Header ("type declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("base type:"); + Disp_Tree (Get_Base_Type (Tree), Ntab, True); + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("resolution function:"); + Disp_Tree_Flat (Get_Resolution_Function (Tree), Ntab); + when Iir_Kind_Physical_Type_Definition => + if Flat_Decl and then Get_Type_Declarator (Tree) /= Null_Iir then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("unit chain:"); + Disp_Tree_Chain (Get_Unit_Chain (Tree), Ntab); + when Iir_Kind_Unit_Declaration => + if Flat_Decl then + return; + end if; + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("physical_literal:"); + Disp_Tree (Get_Physical_Literal (Tree), Ntab, True); + Header ("physical_Unit_Value:"); + Disp_Tree (Get_Physical_Unit_Value (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kind_Access_Type_Definition => + if Flat_Decl then + return; + end if; + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("signal_type_flag: ", False); + Disp_Flag (Get_Signal_Type_Flag (Tree)); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("designated type:"); + Disp_Tree_Flat (Get_Designated_Type (Tree), Ntab); + when Iir_Kind_Access_Subtype_Definition => + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("resolved flag: ", False); + Disp_Type_Resolved_Flag (Tree); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("base type:"); + Disp_Tree (Get_Base_Type (Tree), Ntab, True); + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("designated type:"); + Disp_Tree_Flat (Get_Designated_Type (Tree), Ntab); + Header ("resolution function:"); + Disp_Tree_Flat (Get_Resolution_Function (Tree), Ntab); + + when Iir_Kind_Incomplete_Type_Definition => + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("base type:"); + Disp_Tree (Get_Base_Type (Tree), Ntab, True); + + when Iir_Kind_File_Type_Definition => + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("type mark:"); + Disp_Tree_Flat (Get_Type_Mark (Tree), Ntab); + when Iir_Kind_Protected_Type_Declaration => + Header ("staticness: ", False); + Disp_Type_Staticness (Tree); + Header ("declarator:"); + Disp_Tree_Flat (Get_Type_Declarator (Tree), Ntab); + Header ("protected_type_body:"); + Disp_Tree_Flat (Get_Protected_Type_Body (Tree), Ntab); + Header ("declarative_part:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + when Iir_Kind_Protected_Type_Body => + Header ("protected_type_declaration:"); + Disp_Tree_Flat (Get_Protected_Type_Declaration (Tree), Ntab); + Header ("declarative_part:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + + when Iir_Kind_Block_Statement => + if Flat_Decl then + return; + end if; + Disp_Label (Tree); + Header ("guard decl:"); + Disp_Tree (Get_Guard_Decl (Tree), Ntab); + Header ("block header:"); + Disp_Tree (Get_Block_Header (Tree), Ntab); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("concurrent statements:"); + Disp_Tree_Chain (Get_Concurrent_Statement_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Generate_Statement => + if Flat_Decl then + return; + end if; + Disp_Label (Tree); + Header ("generation_scheme:"); + Disp_Tree (Get_Generation_Scheme (Tree), Ntab); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("concurrent statements:"); + Disp_Tree_Chain (Get_Concurrent_Statement_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kind_Component_Instantiation_Statement => + Disp_Label (Tree); + Header ("instantiated unit:"); + Disp_Tree (Get_Instantiated_Unit (Tree), Ntab, True); + Header ("generic map aspect chain:"); + Disp_Tree_Chain (Get_Generic_Map_Aspect_Chain (Tree), Ntab); + Header ("port map aspect chain:"); + Disp_Tree_Chain (Get_Port_Map_Aspect_Chain (Tree), Ntab); + Header ("component_configuration:"); + Disp_Tree (Get_Component_Configuration (Tree), Ntab); + Header ("default binding indication:"); + Disp_Tree (Get_Default_Binding_Indication (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Concurrent_Conditional_Signal_Assignment => + Header ("guarded_target_flag: " + & Tri_State_Type'Image (Get_Guarded_Target_State (Tree))); + Header ("target:"); + Disp_Tree (Get_Target (Tree), Ntab, True); + if Get_Guard (Tree) = Tree then + Header ("guard: guarded"); + else + Header ("guard:"); + Disp_Tree_Flat (Get_Guard (Tree), Ntab); + end if; + Header ("conditional waveform chain:"); + Disp_Tree_Chain (Get_Conditional_Waveform_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Concurrent_Selected_Signal_Assignment => + Header ("guarded_target_flag: " + & Tri_State_Type'Image (Get_Guarded_Target_State (Tree))); + Header ("target:"); + Disp_Tree (Get_Target (Tree), Ntab, True); + if Get_Guard (Tree) = Tree then + Header ("guard: guarded"); + else + Header ("guard:"); + Disp_Tree_Flat (Get_Guard (Tree), Ntab); + end if; + Header ("choices:"); + Disp_Tree_Chain (Get_Selected_Waveform_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Concurrent_Assertion_Statement => + Header ("condition:"); + Disp_Tree (Get_Assertion_Condition (Tree), Ntab); + Header ("report expression:"); + Disp_Tree (Get_Report_Expression (Tree), Ntab); + Header ("severity expression:"); + Disp_Tree (Get_Severity_Expression (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kind_Sensitized_Process_Statement + | Iir_Kind_Process_Statement => + Disp_Label (Tree); + Header ("passive: " & Boolean'Image (Get_Passive_Flag (Tree))); + if Kind = Iir_Kind_Sensitized_Process_Statement then + Header ("sensivity list:"); + Disp_Tree_List (Get_Sensitivity_List (Tree), Ntab, True); + end if; + Header ("driver list:"); + Disp_Tree_List (Get_Driver_List (Tree), Ntab, True); + Header ("declaration_chain:"); + Disp_Tree_Chain (Get_Declaration_Chain (Tree), Ntab); + Header ("process statements:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_If_Statement => + Header ("condition:"); + Disp_Tree (Get_Condition (Tree), Ntab, True); + Header ("then sequence:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + Header ("elsif:"); + Disp_Tree (Get_Else_Clause (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Elsif => + Header ("condition:"); + Disp_Tree (Get_Condition (Tree), Ntab); + Header ("then sequence:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + Header ("elsif:"); + Disp_Tree (Get_Else_Clause (Tree), Tab); + when Iir_Kind_For_Loop_Statement => + Header ("iterator:"); + Disp_Tree (Get_Iterator_Scheme (Tree), Ntab); + Header ("statements:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_While_Loop_Statement => + Header ("condition:"); + Disp_Tree (Get_Condition (Tree), Ntab); + Header ("statements:"); + Disp_Tree_Chain (Get_Sequential_Statement_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Case_Statement => + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + Header ("choices chain:"); + Disp_Tree_Chain + (Get_Case_Statement_Alternative_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Signal_Assignment_Statement => + Header ("guarded_target_flag: " + & Tri_State_Type'Image (Get_Guarded_Target_State (Tree))); + Header ("target:"); + Disp_Tree (Get_Target (Tree), Ntab, True); + Header ("waveform_chain:"); + Disp_Tree_Chain (Get_Waveform_Chain (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Variable_Assignment_Statement => + Header ("target:"); + Disp_Tree (Get_Target (Tree), Ntab, True); + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Assertion_Statement => + Header ("condition:"); + Disp_Tree (Get_Assertion_Condition (Tree), Ntab); + Header ("report expression:"); + Disp_Tree (Get_Report_Expression (Tree), Ntab); + Header ("severity expression:"); + Disp_Tree (Get_Severity_Expression (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Report_Statement => + Header ("report expression:"); + Disp_Tree (Get_Report_Expression (Tree), Ntab); + Header ("severity expression:"); + Disp_Tree (Get_Severity_Expression (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Return_Statement => + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Wait_Statement => + Header ("sensitivity list:"); + Disp_Tree_List (Get_Sensitivity_List (Tree), Ntab, True); + Header ("condition:"); + Disp_Tree (Get_Condition_Clause (Tree), Ntab); + Header ("timeout:"); + Disp_Tree (Get_Timeout_Clause (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Procedure_Call_Statement + | Iir_Kind_Concurrent_Procedure_Call_Statement => + Disp_Label (Tree); + Header ("procedure_call:"); + Disp_Tree (Get_Procedure_Call (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Procedure_Call => + Header ("implementation:"); + Disp_Tree (Get_Implementation (Tree), Ntab, True); + Header ("method_object:"); + Disp_Tree (Get_Method_Object (Tree), Ntab); + Header ("parameters:"); + Disp_Tree_Chain (Get_Parameter_Association_Chain (Tree), Ntab); + when Iir_Kind_Exit_Statement + | Iir_Kind_Next_Statement => + Header ("loop:"); + Disp_Tree_Flat (Get_Loop (Tree), Ntab); + Header ("condition:"); + Disp_Tree (Get_Condition (Tree), Ntab); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + when Iir_Kind_Null_Statement => + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + + when Iir_Kinds_Dyadic_Operator => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("implementation:"); + Disp_Tree (Get_Implementation (Tree), Ntab, True); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("left:"); + Disp_Tree (Get_Left (Tree), Ntab, True); + Header ("right:"); + Disp_Tree (Get_Right (Tree), Ntab, True); + + when Iir_Kinds_Monadic_Operator => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("implementation:"); + Disp_Tree (Get_Implementation (Tree), Ntab, True); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("operand:"); + Disp_Tree (Get_Operand (Tree), Ntab, True); + + when Iir_Kind_Function_Call => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("implementation:"); + Disp_Tree_Flat (Get_Implementation (Tree), Ntab); + Header ("method_object:"); + Disp_Tree (Get_Method_Object (Tree), Ntab); + Header ("parameters:"); + Disp_Tree_Chain (Get_Parameter_Association_Chain (Tree), Ntab); + when Iir_Kind_Qualified_Expression => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("type mark:"); + Disp_Tree (Get_Type_Mark (Tree), Ntab, True); + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + when Iir_Kind_Type_Conversion => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + when Iir_Kind_Allocator_By_Expression => + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("expression:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + when Iir_Kind_Allocator_By_Subtype => + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("subtype indication:"); + Disp_Tree (Get_Expression (Tree), Ntab, True); + when Iir_Kind_Selected_Element => + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("selected element:"); + Disp_Tree (Get_Selected_Element (Tree), Ntab, True); + when Iir_Kind_Implicit_Dereference + | Iir_Kind_Dereference => + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + + when Iir_Kind_Aggregate => + Header ("staticness: value: ", false); + Disp_Staticness (Get_Value_Staticness (Tree)); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("aggregate_info:"); + Disp_Tree (Get_Aggregate_Info (Tree), Ntab); + Header ("associations:"); + Disp_Tree_Chain (Get_Association_Choices_Chain (Tree), Ntab); + when Iir_Kind_Aggregate_Info => + Header ("aggr_others_flag: ", False); + Disp_Flag (Get_Aggr_Others_Flag (Tree)); + Header ("aggr_named_flag: ", False); + Disp_Flag (Get_Aggr_Named_Flag (Tree)); + Header ("aggr_dynamic_flag: ", False); + Disp_Flag (Get_Aggr_Dynamic_Flag (Tree)); + Header ("aggr_low_limit:"); + Disp_Tree (Get_Aggr_Low_Limit (Tree), Ntab, False); + Header ("aggr_high_limit:"); + Disp_Tree (Get_Aggr_High_Limit (Tree), Ntab, False); + Header ("aggr_max_length:" & + Iir_Int32'Image (Get_Aggr_Max_Length (Tree))); + Header ("sub_aggregate_info:"); + Disp_Tree (Get_Sub_Aggregate_Info (Tree), Ntab); + when Iir_Kind_Operator_Symbol => + null; + when Iir_Kind_Simple_Name => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Indexed_Name => + Header ("staticness:", false); + Disp_Name_Staticness (Tree); + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("index:"); + Disp_Tree_List (Get_Index_List (Tree), Ntab, True); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Slice_Name => + Header ("staticness:", false); + Disp_Name_Staticness (Tree); + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("suffix:"); + Disp_Tree (Get_Suffix (Tree), Ntab); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Parenthesis_Name => + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, Flat_Decl); + Header ("association chain:"); + Disp_Tree_Chain (Get_Association_Chain (Tree), Ntab); + when Iir_Kind_Selected_By_All_Name => + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + when Iir_Kind_Selected_Name => + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("identifier: ", False); + Disp_Ident (Get_Suffix_Identifier (Tree)); + + when Iir_Kind_Attribute_Name => + Header ("prefix:"); + Disp_Tree (Get_Prefix (Tree), Ntab, True); + Header ("signature:"); + Disp_Tree (Get_Signature (Tree), Ntab); + + when Iir_Kind_Base_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Left_Type_Attribute + | Iir_Kind_Right_Type_Attribute + | Iir_Kind_High_Type_Attribute + | Iir_Kind_Low_Type_Attribute + | Iir_Kind_Ascending_Type_Attribute => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Image_Attribute + | Iir_Kind_Value_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("parameter:"); + Disp_Tree (Get_Parameter (Tree), Ntab); + when Iir_Kind_Pos_Attribute + | Iir_Kind_Val_Attribute + | Iir_Kind_Succ_Attribute + | Iir_Kind_Pred_Attribute + | Iir_Kind_Leftof_Attribute + | Iir_Kind_Rightof_Attribute => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("parameter:"); + Disp_Tree (Get_Parameter (Tree), Ntab); + when Iir_Kind_Left_Array_Attribute + | Iir_Kind_Right_Array_Attribute + | Iir_Kind_High_Array_Attribute + | Iir_Kind_Low_Array_Attribute + | Iir_Kind_Range_Array_Attribute + | Iir_Kind_Reverse_Range_Array_Attribute + | Iir_Kind_Length_Array_Attribute + | Iir_Kind_Ascending_Array_Attribute => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("parameter:"); + Disp_Tree (Get_Parameter (Tree), Ntab); + when Iir_Kind_Delayed_Attribute + | Iir_Kind_Stable_Attribute + | Iir_Kind_Quiet_Attribute + | Iir_Kind_Transaction_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("has_active_flag: ", False); + Disp_Flag (Get_Has_Active_Flag (Tree)); + when Iir_Kind_Event_Attribute + | Iir_Kind_Active_Attribute + | Iir_Kind_Last_Event_Attribute + | Iir_Kind_Last_Active_Attribute + | Iir_Kind_Last_Value_Attribute + | Iir_Kind_Driving_Attribute + | Iir_Kind_Driving_Value_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Behavior_Attribute + | Iir_Kind_Structure_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Simple_Name_Attribute + | Iir_Kind_Instance_Name_Attribute + | Iir_Kind_Path_Name_Attribute => + Header ("prefix:"); + Disp_Tree_Flat (Get_Prefix (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + + when Iir_Kind_Enumeration_Literal => + if Flat_Decl and then Get_Literal_Origin (Tree) = Null_Iir then + return; + end if; + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("value:" & Iir_Int32'Image (Get_Enum_Pos (Tree))); + Header ("attribute_value_chain:"); + Disp_Tree_Flat_Chain (Get_Attribute_Value_Chain (Tree), Ntab); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab, True); + when Iir_Kind_Integer_Literal => + Header ("staticness:", false); + Disp_Expr_Staticness (Tree); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab, True); + when Iir_Kind_Floating_Point_Literal => + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab, True); + when Iir_Kind_String_Literal => + Header ("value: """ & Iirs_Utils.Image_String_Lit (Tree) & """"); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab, True); + when Iir_Kind_Bit_String_Literal => + Header ("base:" & Base_Type'Image (Get_Bit_String_Base (Tree))); + Header ("value: """ & Iirs_Utils.Image_String_Lit (Tree) & """"); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Character_Literal => + Header ("value: '" & + Name_Table.Get_Character (Get_Identifier (Tree)) & + '''); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Physical_Int_Literal => + Header ("staticness:", False); + Disp_Expr_Staticness (Tree); + Header ("value: " & Iir_Int64'Image (Get_Value (Tree))); + Header ("unit_name: "); + Disp_Tree_Flat (Get_Unit_Name (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab); + when Iir_Kind_Physical_Fp_Literal => + Header ("staticness:", False); + Disp_Expr_Staticness (Tree); + Header ("fp_value: " & Iir_Fp64'Image (Get_Fp_Value (Tree))); + Header ("unit_name: "); + Disp_Tree_Flat (Get_Unit_Name (Tree), Ntab); + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab); + when Iir_Kind_Null_Literal => + Header ("type:"); + Disp_Tree_Flat (Get_Type (Tree), Ntab); + when Iir_Kind_Simple_Aggregate => + Header ("simple_aggregate_list:"); + Disp_Tree_List (Get_Simple_Aggregate_List (Tree), Ntab, True); + Header ("type:"); + Disp_Tree (Get_Type (Tree), Ntab, True); + Header ("origin:"); + Disp_Tree (Get_Literal_Origin (Tree), Ntab, True); + + when Iir_Kind_Proxy => + Header ("proxy:"); + Disp_Tree_Flat (Get_Proxy (Tree), Ntab); + when Iir_Kind_Entity_Class => + null; + end case; + end Disp_Tree; +end Disp_Tree; |