aboutsummaryrefslogtreecommitdiffstats
path: root/iirs.ads
diff options
context:
space:
mode:
Diffstat (limited to 'iirs.ads')
-rw-r--r--iirs.ads1516
1 files changed, 986 insertions, 530 deletions
diff --git a/iirs.ads b/iirs.ads
index 8f707af32..22f6b9d9c 100644
--- a/iirs.ads
+++ b/iirs.ads
@@ -22,47 +22,47 @@ with Nodes;
with Lists;
package Iirs is
- -- This package defines the semantic tree and functions to handle it.
- -- The tree is roughly based on IIR (Internal Intermediate Representation),
- -- [AIRE/CE Advanced Intermediate Representation with Extensibility,
- -- Common Environment. http://www.vhdl.org/aire/index.html ]
- -- but oriented object features are not used, and sometimes, functions
- -- or fields have changed.
-
- -- Note: this tree is also used during syntaxic analysis, but with
- -- a little bit different meanings for the fields.
- -- The parser (parse package) build the tree.
- -- The semantic pass (sem, sem_expr, sem_name) transforms it into a
- -- semantic tree.
-
- -- Documentation:
- -- Only the semantic aspect is to be fully documented.
- -- The syntaxic aspect is only used between parse and sem.
-
- -- Each node of the tree is a record of type iir. The record has only
- -- one discriminent, which contains the kind of the node. There is
- -- currenlty no variant (but this can change, this is not public).
-
- -- The root of a semantic tree is a library_declaration.
- -- All the library_declarations are kept in a private list, held by
- -- package libraries.
- -- Exemple of a tree:
+ -- This package defines the semantic tree and functions to handle it.
+ -- The tree is roughly based on IIR (Internal Intermediate Representation),
+ -- [AIRE/CE Advanced Intermediate Representation with Extensibility,
+ -- Common Environment. http://www.vhdl.org/aire/index.html ]
+ -- but oriented object features are not used, and sometimes, functions
+ -- or fields have changed.
+
+ -- Note: this tree is also used during syntaxic analysis, but with
+ -- a little bit different meanings for the fields.
+ -- The parser (parse package) build the tree.
+ -- The semantic pass (sem, sem_expr, sem_name) transforms it into a
+ -- semantic tree.
+
+ -- Documentation:
+ -- Only the semantic aspect is to be fully documented.
+ -- The syntaxic aspect is only used between parse and sem.
+
+ -- Each node of the tree is a record of type iir. The record has only
+ -- one discriminent, which contains the kind of the node. There is
+ -- currenlty no variant (but this can change, this is not public).
+
+ -- The root of a semantic tree is a library_declaration.
+ -- All the library_declarations are kept in a private list, held by
+ -- package libraries.
+ -- Exemple of a tree:
-- library_declaration
-- +-- design_file
-- +-- design_unit
-- | +-- entity_declaration
-- +-- design_unit
-- +-- architecture_body
- -- ...
+ -- ...
- -- Since the tree can represent all the libraries and their contents, it
- -- is not always loaded into memory.
- -- When a library is loaded, only library_declaration, design_file,
- -- design_unit and library_unit nodes are created. When a design_unit is
- -- really loaded, the design_unit node is not replaced but modified (ie,
- -- access to this node are still valid).
+ -- Since the tree can represent all the libraries and their contents, it
+ -- is not always loaded into memory.
+ -- When a library is loaded, only library_declaration, design_file,
+ -- design_unit and library_unit nodes are created. When a design_unit is
+ -- really loaded, the design_unit node is not replaced but modified (ie,
+ -- access to this node are still valid).
- -- To add a new kind of node:
+ -- To add a new kind of node:
-- the name should be of the form iir_kind_NAME
-- add iir_kind_NAME in the definition of type iir_kind_type
-- document the node below: grammar, methods.
@@ -75,38 +75,39 @@ package Iirs is
-- General methods (can be used on all nodes): --
-------------------------------------------------
- -- Create a node of kind KIND.
- -- function Create_Iir (Kind: Iir_Kind) return Iir;
+ -- Create a node of kind KIND.
+ -- function Create_Iir (Kind: Iir_Kind) return Iir;
--
- -- Deallocate a node. Deallocate fields that where allocated by create_iir.
+ -- Deallocate a node. Deallocate fields that where allocated by
+ -- create_iir.
-- procedure Free_Iir (Target: in out Iir);
--
- -- Get the kind of the iir.
- -- See below for the (public) list of kinds.
+ -- Get the kind of the iir.
+ -- See below for the (public) list of kinds.
-- function Get_Kind (An_Iir: Iir) return Iir_Kind;
- -- Get the location of the node: ie the current position in the source
- -- file when the node was created. This is a little bit fuzzy.
+ -- Get the location of the node: ie the current position in the source
+ -- file when the node was created. This is a little bit fuzzy.
--
-- procedure Set_Location (Target: in out Iir; Location: Location_Type);
-- function Get_Location (Target: in out Iir) return Location_Type;
--
- -- Copy a location from a node to another one.
+ -- Copy a location from a node to another one.
-- procedure Location_Copy (Target: in out Iir; Src: in Iir);
- -- The next line marks the start of the node description.
+ -- The next line marks the start of the node description.
-- Start of Iir_Kind.
- -------------------------------------------------
- -- A set of methods are associed with a kind. --
- -------------------------------------------------
+ --------------------------------------------------
+ -- A set of methods are associed with a kind. --
+ --------------------------------------------------
-- Iir_Kind_Design_File (Medium)
- -- LRM93 11
- -- DESIGN_FILE ::= DESIGN_UNIT { DESIGN_UNIT}
+ -- LRM93 11
+ -- design_file ::= design_unit { design_unit }
--
- -- The library containing this design file.
+ -- The library containing this design file.
-- Get/Set_Library (Field0)
-- Get/Set_Parent (Alias Field0)
--
@@ -118,117 +119,116 @@ package Iirs is
--
-- Get/Set_File_Time_Stamp (Field4)
--
- -- Get the chain of unit contained in the file. This is a simply linked
- -- chain, but the tail is kept to speed-up appending operation.
+ -- Get the chain of unit contained in the file. This is a simply linked
+ -- chain, but the tail is kept to speed-up appending operation.
-- Get/Set_First_Design_Unit (Field5)
--
-- Get/Set_Last_Design_Unit (Field6)
--
- -- Identifier for the design file file name and dirname.
+ -- Identifier for the design file file name and dirname.
-- Get/Set_Design_File_Filename (Field12)
-- Get/Set_Design_File_Directory (Field11)
--
- -- Flag used during elaboration. Set when the file was already seen.
+ -- Flag used during elaboration. Set when the file was already seen.
-- Get/Set_Elab_Flag (Flag3)
-- Iir_Kind_Design_Unit (Medium)
- -- LRM93 11
- -- DESIGN_UNIT ::= CONTEXT_CLAUSE LIBRARY_UNIT
+ -- LRM93 11
+ -- design_unit ::= context_clause library_unit
--
- -- The design_file containing this design unit.
+ -- The design_file containing this design unit.
-- Get/Set_Design_File (Field0)
-- Get/Set_Parent (Alias Field0)
--
- -- Get the chain of context clause.
+ -- Get the chain of context clause.
-- Get_Context_Items (Field1)
--
-- Get/Set_Chain (Field2)
--
-- Get/Set_Identifier (Field3)
--
- -- Get/Set the library unit, which can be an entity, an architecture,
- -- a package, a package body or a configuration.
+ -- Get/Set the library unit, which can be an entity, an architecture,
+ -- a package, a package body or a configuration.
-- Get/Set_Library_Unit (Field5)
--
-- Get/Set_End_Location (Field6)
--
- -- Collision chain for units.
+ -- Collision chain for units.
-- Get/Set_Hash_Chain (Field7)
--
- -- Get the list of design units that must be analysed before this unit.
- -- See LRM93 11.4 for the rules defining the order of analysis.
+ -- Get the list of design units that must be analysed before this unit.
+ -- See LRM93 11.4 for the rules defining the order of analysis.
-- Get/Set_Dependence_List (Field8)
--
- -- FIXME: this field can be put in the library_unit, since it is only used
- -- when the units have been analyzed.
+ -- FIXME: this field can be put in the library_unit, since it is only used
+ -- when the units have been analyzed.
-- Get/Set_Analysis_Checks_List (Field9)
--
- -- This is a symbolic date, only used as a order of analysis of design
- -- units.
+ -- This is a symbolic date, only used as a order of analysis of design
+ -- units.
-- Get/Set_Date (Field10)
--
- -- Set the line and the offset in the line, only for the library manager.
- -- This is valid until the file is really loaded in memory. On loading,
- -- location will contain all this informations.
- -- Get/Set_Pos_Line_Off (Field1,Field11,Field12)
+ -- Set the line and the offset in the line, only for the library manager.
+ -- This is valid until the file is really loaded in memory. On loading,
+ -- location will contain all this informations.
+ -- Get/Set_Pos_Line_Off (Field1,Field11,Field12)
--
- -- Get/Set the date state, which indicates whether this design unit is in
- -- memory or not.
+ -- Get/Set the date state, which indicates whether this design unit is in
+ -- memory or not.
-- Get/Set_Date_State (State1)
--
- -- Flag used during elaboration. Set when the file was already seen.
+ -- Flag used during elaboration. Set when the file was already seen.
-- Get/Set_Elab_Flag (Flag3)
-- Iir_Kind_Library_Clause (Short)
- -- Note: a library_clause node is created for every logical_name.
- -- As a consequence, the scope of the library starts after the logical_name
- -- and not after the library_clause. However, since an identifier
- -- can only be used as a logical_name, and since the second occurence has
- -- no effect, this is correct.
--
- -- Get/Set_Parent (Field0)
+ -- LRM08 13.2 Design libraries
--
- -- Get/Set_Identifier (Field3)
+ -- library_clause ::= LIBRARY logical_name_list ;
--
- -- Get/Set_Library_Declaration (Field1)
+ -- logical_name_list ::= logical_name { , logical_name }
--
- -- Get/Set_Chain (Field2)
-
- --------------
- -- Literals --
- --------------
-
- -- Iir_Kind_Character_Literal (Short)
+ -- logical_name ::= identifier
--
- -- Get/Set_Type (Field1)
+ -- Note: a library_clause node is created for every logical_name.
+ -- As a consequence, the scope of the library starts after the logical_name
+ -- and not after the library_clause. However, since an identifier
+ -- can only be used as a logical_name, and since the second occurence has
+ -- no effect, this is correct.
+ --
+ -- Get/Set_Parent (Field0)
--
-- Get/Set_Identifier (Field3)
--
- -- Get/Set_Named_Entity (Field4)
+ -- Get/Set_Library_Declaration (Field1)
--
- -- Get/Set_Base_Name (Field5)
+ -- Get/Set_Chain (Field2)
--
- -- Get/Set_Expr_Staticness (State1)
+ -- Get/Set_Has_Identifier_List (Flag7)
+
+ ---------------
+ -- Literals --
+ ---------------
-- Iir_Kind_String_Literal (Short)
-- Iir_Kind_Bit_String_Literal (Medium)
--
-- Get/Set_Type (Field1)
--
- -- Used for computed literals. Literal_Origin contains the expression whose
- -- value was computed during analysis and replaces the expression.
+ -- Used for computed literals. Literal_Origin contains the expression
+ -- whose value was computed during analysis and replaces the expression.
-- Get/Set_Literal_Origin (Field2)
--
-- Get/Set_String_Id (Field3)
--
- -- As bit-strings are expanded to '0'/'1' strings, this is the number of
- -- characters.
+ -- As bit-strings are expanded to '0'/'1' strings, this is the number of
+ -- characters.
-- Get/Set_String_Length (Field0)
--
- -- For bit string only:
- -- Enumeration literal which correspond to '0' and '1'.
- -- This cannot be defined only in the enumeration type definition, due to
- -- possible aliases.
+ -- For bit string only:
+ -- Enumeration literal which correspond to '0' and '1'.
+ -- This cannot be defined only in the enumeration type definition, due to
+ -- possible aliases.
-- Only for Iir_Kind_Bit_String_Literal:
-- Get/Set_Bit_String_0 (Field4)
-- Only for Iir_Kind_Bit_String_Literal:
@@ -240,9 +240,10 @@ package Iirs is
-- Get/Set_Expr_Staticness (State1)
-- Iir_Kind_Integer_Literal (Int)
+ --
-- Get/Set_Type (Field1)
--
- -- Get/Set the value of the integer.
+ -- Get/Set the value of the integer.
-- Get/Set_Value (Int64)
--
-- Get/Set_Literal_Origin (Field2)
@@ -250,9 +251,10 @@ package Iirs is
-- Get/Set_Expr_Staticness (State1)
-- Iir_Kind_Floating_Point_Literal (Fp)
+ --
-- Get/Set_Type (Field1)
--
- -- Get/Set the value of the literal.
+ -- The value of the literal.
-- Get/Set_Fp_Value (Fp64)
--
-- Get/Set_Literal_Origin (Field2)
@@ -260,7 +262,7 @@ package Iirs is
-- Get/Set_Expr_Staticness (State1)
-- Iir_Kind_Null_Literal (Short)
- -- The null literal, which can be a disconnection or a null access.
+ -- The null literal, which can be a disconnection or a null access.
--
-- Get/Set_Type (Field1)
--
@@ -273,23 +275,23 @@ package Iirs is
--
-- Get/Set_Literal_Origin (Field2)
--
- -- Get/Set the physical unit of the literal.
+ -- The physical unit of the literal.
-- Get/Set_Unit_Name (Field3)
--
- -- Must be set to locally except for time literal, which is globally.
+ -- Must be set to locally except for time literal, which is globally.
-- Get/Set_Expr_Staticness (State1)
--
-- Only for Iir_Kind_Physical_Int_Literal:
- -- The multiplicand.
+ -- The multiplicand.
-- Get/Set_Value (Int64)
--
-- Only for Iir_Kind_Physical_Fp_Literal:
- -- The multiplicand.
+ -- The multiplicand.
-- Get/Set_Fp_Value (Fp64)
-- Iir_Kind_Simple_Aggregate (Short)
- -- This node can only be generated by evaluation: it is an unidimentional
- -- positional aggregate.
+ -- This node can only be generated by evaluation: it is an unidimentional
+ -- positional aggregate.
--
-- Get/Set_Type (Field1)
--
@@ -297,12 +299,12 @@ package Iirs is
--
-- Get/Set_Expr_Staticness (State1)
--
- -- List of elements
+ -- List of elements
-- Get/Set_Simple_Aggregate_List (Field3)
-- Iir_Kind_Overflow_Literal (Short)
- -- This node can only be generated by evaluation to represent an error: out
- -- of range, division by zero...
+ -- This node can only be generated by evaluation to represent an error: out
+ -- of range, division by zero...
--
-- Get/Set_Type (Field1)
--
@@ -310,15 +312,15 @@ package Iirs is
--
-- Get/Set_Expr_Staticness (State1)
- ------------
- -- Tuples --
- ------------
+ -------------
+ -- Tuples --
+ -------------
-- Iir_Kind_Association_Element_By_Expression (Short)
-- Iir_Kind_Association_Element_Open (Short)
-- Iir_Kind_Association_Element_By_Individual (Short)
- -- These are used for association element of an association list with
- -- an interface (ie subprogram call, port map, generic map).
+ -- These are used for association element of an association list with
+ -- an interface (ie subprogram call, port map, generic map).
--
-- Get/Set_Formal (Field1)
--
@@ -333,16 +335,16 @@ package Iirs is
-- Only for Iir_Kind_Association_Element_By_Individual:
-- Get/Set_Individual_Association_Chain (Field4)
--
- -- A function call or a type conversion for the association.
- -- FIXME: should be a name ?
+ -- A function call or a type conversion for the association.
+ -- FIXME: should be a name ?
-- Only for Iir_Kind_Association_Element_By_Expression:
-- Get/Set_In_Conversion (Field4)
--
-- Only for Iir_Kind_Association_Element_By_Expression:
-- Get/Set_Out_Conversion (Field5)
--
- -- Get/Set the whole association flag (true if the formal is associated in
- -- whole and not individually, see LRM93 4.3.2.2)
+ -- Get/Set the whole association flag (true if the formal is associated in
+ -- whole and not individually, see LRM93 4.3.2.2)
-- Get/Set_Whole_Association_Flag (Flag1)
--
-- Get/Set_Collapse_Signal_Flag (Flag2)
@@ -350,18 +352,6 @@ package Iirs is
-- Only for Iir_Kind_Association_Element_Open:
-- Get/Set_Artificial_Flag (Flag3)
- -- Iir_Kind_Proxy (Short)
- -- A proxy is used to avoid duplication of a node.
- -- Ex: instead of copying a default value of an insterface in the subprogram
- -- call, a proxy is used. The default value can't be so easily aliased
- -- due to annotation.
- --
- -- Create a proxy for PROXY.
- -- function Create_Proxy (Proxy: Iir) return Iir_Proxy;
- --
- -- Get/Set the value of the proxy.
- -- Get/Set_Proxy (Field1)
-
-- Iir_Kind_Waveform_Element (Short)
--
-- Get/Set_We_Value (Field1)
@@ -383,32 +373,31 @@ package Iirs is
-- Iir_Kind_Choice_By_Range (Short)
-- Iir_Kind_Choice_By_Name (Short)
-- Iir_Kind_Choice_By_Expression (Short)
- -- (Iir_Kinds_Choice)
+ -- (Iir_Kinds_Choice)
--
-- Get/Set_Parent (Field0)
--
- -- These are elements of an choice chain, which is used for
- -- case_statement, concurrent_select_signal_assignment, aggregates.
+ -- These are elements of an choice chain, which is used for
+ -- case_statement, concurrent_select_signal_assignment, aggregates.
--
- -- Get/Set what is associated with the choice. This can be:
- -- * a waveform_chain for a concurrent_select_signal_assignment,
- -- * an expression for an aggregate,
- -- * a sequential statement list for a case_statement.
- -- For a list of choices, only the first one is associated, the following
- -- associations have the same_alternative_flag set.
+ -- Get/Set what is associated with the choice. This can be:
+ -- * a waveform_chain for a concurrent_select_signal_assignment,
+ -- * an expression for an aggregate,
+ -- * a sequential statement list for a case_statement.
+ -- For a list of choices, only the first one is associated, the following
+ -- associations have the same_alternative_flag set.
-- Get/Set_Associated (Field1)
--
-- Get/Set_Chain (Field2)
--
-- Only for Iir_Kind_Choice_By_Name:
- -- Get/Set the name.
-- Get/Set_Name (Field4)
--
-- Only for Iir_Kind_Choice_By_Expression:
-- Get/Set_Expression (Field5)
--
-- Only for Iir_Kind_Choice_By_Range:
- -- Get/Set the range.
+ -- Get/Set the range.
-- Get/Set_Expression (Field5)
--
-- Get/Set_Same_Alternative_Flag (Flag1)
@@ -419,21 +408,17 @@ package Iirs is
-- Iir_Kind_Entity_Aspect_Entity (Short)
--
- -- Parse: a name
- -- Sem: a design unit
- -- Get/Set_Entity (Field2)
+ -- Get/Set_Entity_Name (Field2)
--
- -- parse: a simple name.
- -- sem: an architecture declaration or NULL_IIR.
+ -- parse: a simple name.
+ -- sem: an architecture declaration or NULL_IIR.
-- Get/Set_Architecture (Field3)
-- Iir_Kind_Entity_Aspect_Open (Short)
-- Iir_Kind_Entity_Aspect_Configuration (Short)
--
- -- Parse: a name
- -- Sem: a design unit
- -- Get/Set_Configuration (Field1)
+ -- Get/Set_Configuration_Name (Field1)
-- Iir_Kind_Block_Configuration (Short)
--
@@ -445,22 +430,22 @@ package Iirs is
--
-- Get/Set_Configuration_Item_Chain (Field3)
--
- -- Note: for default block configurations of iterative generate statement,
- -- the block specification is a selected_name, whose identifier is others.
+ -- Note: for default block configurations of iterative generate statement,
+ -- the block specification is a selected_name, whose identifier is others.
-- Get/Set_Block_Specification (Field5)
--
- -- Single linked list of block configuration that apply to the same
- -- for scheme generate block.
+ -- Single linked list of block configuration that apply to the same
+ -- for scheme generate block.
-- Get/Set_Prev_Block_Configuration (Field4)
-- Iir_Kind_Binding_Indication (Medium)
--
-- Get/Set_Default_Entity_Aspect (Field1)
--
- -- The entity aspect.
- -- It is a iir_kind_entity_aspect_entity, iir_kind_entity_aspect_open or
- -- iir_kind_entity_aspect_configuration. This may be transformed into a
- -- declaration by semantic.
+ -- The entity aspect.
+ -- It is a iir_kind_entity_aspect_entity, iir_kind_entity_aspect_open or
+ -- iir_kind_entity_aspect_configuration. This may be transformed into a
+ -- declaration by semantic.
-- Get/Set_Entity_Aspect (Field3)
--
-- Get/Set_Default_Generic_Map_Aspect_Chain (Field6)
@@ -474,13 +459,37 @@ package Iirs is
-- Iir_Kind_Component_Configuration (Short)
-- Iir_Kind_Configuration_Specification (Short)
--
- -- The declaration containing this type declaration.
+ -- LRM08 7.3 Configuration specification
+ --
+ -- configuration_specification ::=
+ -- simple_configuration_specification
+ -- | compound_configuration_specification
+ --
+ -- simple_configuration_specification ::=
+ -- FOR component_specification binding_indication ;
+ -- [ END FOR ; ]
+ --
+ -- compound_configuration_specification ::=
+ -- FOR component_specification binding_indication ;
+ -- verification_unit_binding_indication ;
+ -- { verification_unit_binding_indication ; }
+ -- END FOR ;
+ --
+ -- component_specification ::=
+ -- instantiation_list : component_name
+ --
+ -- instantiation_list ::=
+ -- instantiation_label { , instantiation_label }
+ -- | OTHERS
+ -- | ALL
+ --
+ -- The declaration containing this type declaration.
-- Get/Set_Parent (Field0)
--
-- Get/Set_Component_Name (Field4)
--
- -- Must be one of designator_list, designator_by_others or
- -- designator_by_all.
+ -- Must be one of designator_list, designator_by_others or
+ -- designator_by_all.
-- Get/Set_Instantiation_List (Field1)
--
-- Only for Iir_Kind_Component_Configuration:
@@ -492,16 +501,29 @@ package Iirs is
-- Iir_Kind_Disconnection_Specification (Short)
--
- -- The declaration containing this type declaration.
- -- Get/Set_Parent (Field0)
+ -- LRM08 7.4 Disconnection specification
--
- -- Get/Set_Signal_List (Field4)
+ -- disconnection_specification ::=
+ -- DISCONNECT guarded_signal_specification AFTER time_expression ;
--
- -- Get/Set_Type (Field1)
+ -- guarded_signal_specification ::=
+ -- guarded_signal_list : type_mark
--
- -- Get/Set_Expression (Field5)
+ -- signal_list ::=
+ -- signal_name { , signal_name }
+ -- | OTHERS
+ -- | ALL
+ --
+ -- The declaration containing this type declaration.
+ -- Get/Set_Parent (Field0)
--
-- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Signal_List (Field3)
+ --
+ -- Get/Set_Type_Mark (Field4)
+ --
+ -- Get/Set_Expression (Field5)
-- Iir_Kind_Block_Header (Medium)
--
@@ -521,6 +543,27 @@ package Iirs is
-- Iir_Kind_Attribute_Specification (Medium)
--
+ -- LRM08 7.2 Attribute specification
+ --
+ -- attribute_specification ::=
+ -- ATTRIBUTE attribute_designator OF entity_specification
+ -- IS expression ;
+ --
+ -- entity_specification ::= entity_name_list : entity_class
+ --
+ -- entity_name_list ::=
+ -- entity_designator { , entity_designator }
+ -- | OTHERS
+ -- | ALL
+ --
+ -- entity_designator ::= entity_tag [ signature ]
+ --
+ -- entity_tag ::= simple_name | character_literal | operator_symbol
+ --
+ -- LRM08 8.6 Attribute names
+ --
+ -- attribute_designator ::= /attribute/_simple_name
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Entity_Name_List (Field1)
@@ -533,18 +576,19 @@ package Iirs is
--
-- Get/Set_Expression (Field5)
--
+ -- Always a simple name.
-- Get/Set_Attribute_Designator (Field6)
--
-- Get/Set_Attribute_Specification_Chain (Field7)
-- Iir_Kind_Attribute_Value (Short)
- -- An attribute value is the element of the chain of attribute of an entity,
- -- marking the entity as decorated by the attribute.
- -- This node is built only by sem.
- -- In fact, the node is member of the chain of attribute of an entity, and
- -- of the chain of entity of the attribute specification.
- -- This makes elaboration (and more precisely, expression evaluation)
- -- easier.
+ -- An attribute value is the element of the chain of attribute of an
+ -- entity, marking the entity as decorated by the attribute.
+ -- This node is built only by sem.
+ -- In fact, the node is member of the chain of attribute of an entity, and
+ -- of the chain of entity of the attribute specification.
+ -- This makes elaboration (and more precisely, expression evaluation)
+ -- easier.
--
-- Get/Set_Spec_Chain (Field0)
--
@@ -562,35 +606,6 @@ package Iirs is
--
-- Get/Set_Name_Staticness (State2)
- -- Iir_Kind_Selected_Element (Short)
- -- A record element selection.
- --
- -- Get/Set_Prefix (Field0)
- --
- -- Get/Set_Type (Field1)
- --
- -- Get/Set_Selected_Element (Field2)
- --
- -- Get/Set_Base_Name (Field5)
- --
- -- Get/Set_Expr_Staticness (State1)
- --
- -- Get/Set_Name_Staticness (State2)
-
- -- Iir_Kind_Implicit_Dereference (Short)
- -- Iir_Kind_Dereference (Short)
- -- An implicit access dereference.
- --
- -- Get/Set_Prefix (Field0)
- --
- -- Get/Set_Type (Field1)
- --
- -- Get/Set_Base_Name (Field5)
- --
- -- Get/Set_Expr_Staticness (State1)
- --
- -- Get/Set_Name_Staticness (State2)
-
-- Iir_Kind_Psl_Expression (Short)
--
-- Get/Set_Type (Field1)
@@ -609,9 +624,9 @@ package Iirs is
--
-- Get/Set_Overload_List (Field1)
- ------------------
- -- Declarations --
- ------------------
+ -------------------
+ -- Declarations --
+ -------------------
-- Iir_Kind_Entity_Declaration (Medium)
--
@@ -647,9 +662,8 @@ package Iirs is
--
-- Get_Declaration_Chain (Field1)
--
- -- Entity declaration for the architecture.
- -- Before the semantic pass, it can be a name.
- -- Get/Set_Entity (Field2)
+ -- Name of the entity declaration for the architecture.
+ -- Get/Set_Entity_Name (Field2)
--
-- Get/Set_Identifier (Field3)
--
@@ -657,11 +671,9 @@ package Iirs is
--
-- Get/Set_Concurrent_Statement_Chain (Field5)
--
- -- The default configuration created by canon. This is a design unit.
+ -- The default configuration created by canon. This is a design unit.
-- Get/Set_Default_Configuration_Declaration (Field6)
--
- -- Get/Set_Entity_Name (Field7)
- --
-- Get/Set_Foreign_Flag (Flag3)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -679,9 +691,8 @@ package Iirs is
--
-- Get_Declaration_Chain (Field1)
--
- -- Set the entity of a configuration (a design_unit)
- -- Before the semantic pass, it can be an identifier.
- -- Get/Set_Entity (Field2)
+ -- Name of the entity of a configuration.
+ -- Get/Set_Entity_Name (Field2)
--
-- Get/Set_Identifier (Field3)
--
@@ -689,8 +700,6 @@ package Iirs is
--
-- Get/Set_Block_Configuration (Field5)
--
- -- Get/Set_Entity_Name (Field7)
- --
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_End_Has_Reserved_Id (Flag8)
@@ -727,8 +736,8 @@ package Iirs is
-- Get/Set_End_Has_Identifier (Flag9)
-- Iir_Kind_Package_Body (Short)
- -- Note: a body is not a declaration, that's the reason why there is no
- -- _declaration suffix in the name.
+ -- Note: a body is not a declaration, that's the reason why there is no
+ -- _declaration suffix in the name.
--
-- Get/Set_Parent (Field0)
-- Get/Set_Design_Unit (Alias Field0)
@@ -737,7 +746,7 @@ package Iirs is
--
-- Get/Set_Identifier (Field3)
--
- -- The corresponding package declaration.
+ -- The corresponding package declaration.
-- Get/Set_Package (Field4)
--
-- Get/Set_End_Has_Reserved_Id (Flag8)
@@ -765,13 +774,13 @@ package Iirs is
-- Iir_Kind_Library_Declaration (Medium)
--
- -- Design files in the library.
+ -- Design files in the library.
-- Get/Set_Design_File_Chain (Field1)
--
-- Get/Set_Chain (Field2)
--
- -- This node is used to contain all a library. Only internaly used.
- -- Name (identifier) of the library.
+ -- This node is used to contain all a library. Only internaly used.
+ -- Name (identifier) of the library.
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Date (Field10)
@@ -798,14 +807,31 @@ package Iirs is
--
-- Get/Set_Use_Flag (Flag6)
--
+ -- Get/Set_Has_Is (Flag7)
+ --
-- Get/Set_End_Has_Reserved_Id (Flag8)
--
-- Get/Set_End_Has_Identifier (Flag9)
+ -- LRM08 6.6 Alias declarations
+ --
+ -- alias_declaration ::=
+ -- ALIAS alias_designator [ : subtype_indication ] IS
+ -- name [ signature ] ;
+ --
+ -- alias_designator ::= identifier | character_literal | operator_symbol
+ --
+ -- Object aliases and non-object aliases are represented by two different
+ -- nodes, as their semantic is different. The parser only creates object
+ -- alias declaration nodes, but sem_decl replaces the node for non-object
+ -- alias declarations.
+
-- Iir_Kind_Object_Alias_Declaration (Short)
--
-- Get/Set_Parent (Field0)
--
+ -- The type can be deduced from the subtype indication, but this field is
+ -- present for uniformity (and speed).
-- Get/Set_Type (Field1)
--
-- Get/Set_Chain (Field2)
@@ -814,8 +840,8 @@ package Iirs is
--
-- Get/Set_Name (Field4)
--
- -- Note: base name is the alias itself.
- -- Get/Set_Base_Name (Field5)
+ -- The subtype indication may not be present.
+ -- Get/Set_Subtype_Indication (Field5)
--
-- Get/Set_Expr_Staticness (State1)
--
@@ -837,10 +863,10 @@ package Iirs is
--
-- Get/Set_Name (Field4)
--
- -- Get/Set_Signature (Field5)
+ -- Get/Set_Alias_Signature (Field5)
--
- -- Set when the alias was implicitely created (by Sem) because of an
- -- explicit alias of a type.
+ -- Set when the alias was implicitely created (by Sem) because of an
+ -- explicit alias of a type.
-- Get/Set_Implicit_Alias_Flag (Flag1)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -855,23 +881,45 @@ package Iirs is
--
-- Get/Set_Chain (Field2)
--
- -- Used for informative purpose only.
+ -- Used for informative purpose only.
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Subtype_Definition (Field4)
-- Iir_Kind_Type_Declaration (Short)
--
+ -- LRM08 6.3 Type declarations
+ --
+ -- type_declaration ::=
+ -- full_type_declaration
+ -- | incomplete_type_declaration
+ --
+ -- full_type_declaration ::=
+ -- TYPE identifier IS type_definition ;
+ --
+ -- type_definition ::=
+ -- scalar_type_definition
+ -- | composite_type_definition
+ -- | access_type_definition
+ -- | file_type_definition
+ -- | protected_type_definition
+ --
+ -- LRM08 5.4.2 Incomplete type declarations
+ --
+ -- incomplete_type_declaration ::=
+ -- TYPE identifier ;
+ --
-- Get/Set_Parent (Field0)
--
- -- Definition of the type.
- -- Note: the type definition can be a real type (unconstrained array,
- -- enumeration, file, record, access) or a subtype (integer, floating
- -- point).
- -- The parser set this field to null_iir for an incomplete type declaration.
- -- This field is set to an incomplete_type_definition node when first
- -- semantized.
+ -- Definition of the type.
+ -- Note: the type definition can be a real type (unconstrained array,
+ -- enumeration, file, record, access) or a subtype (integer, floating
+ -- point).
+ -- The parser set this field to null_iir for an incomplete type
+ -- declaration. This field is set to an incomplete_type_definition node
+ -- when first semantized.
-- Get/Set_Type_Definition (Field1)
+ -- Get/Set_Type (Alias Field1)
--
-- Get/Set_Chain (Field2)
--
@@ -885,6 +933,11 @@ package Iirs is
-- Iir_Kind_Subtype_Declaration (Short)
--
+ -- LRM08 6.3 Subtype declarations
+ --
+ -- subtype_declaration ::=
+ -- SUBTYPE identifier IS subtype_indication ;
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Type (Field1)
@@ -895,6 +948,8 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
+ -- Get/Set_Subtype_Indication (Field5)
+ --
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_Use_Flag (Flag6)
@@ -936,15 +991,14 @@ package Iirs is
-- Iir_Kind_Variable_Interface_Declaration (Medium)
-- Iir_Kind_File_Interface_Declaration (Medium)
--
- -- Note: If type is an iir_kind_proxy node, then type *and* default value
- -- (if any) must be extracted from proxy.
- --
- -- Get/Set the parent of an interface declaration.
- -- The parent is an entity declaration, a subprogram specification, a
- -- component declaration, a loop statement, a block declaration or ??
- -- Useful to distinguish a port and an interface.
+ -- Get/Set the parent of an interface declaration.
+ -- The parent is an entity declaration, a subprogram specification, a
+ -- component declaration, a loop statement, a block declaration or ??
+ -- Useful to distinguish a port and an interface.
-- Get/Set_Parent (Field0)
--
+ -- The type can be deduced from the subtype indication, but this field is
+ -- present for uniformity (and speed).
-- Get/Set_Type (Field1)
--
-- Get/Set_Chain (Field2)
@@ -953,9 +1007,9 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
+ -- Get/Set_Subtype_Indication (Field5)
--
- -- Must always be null_iir for iir_kind_file_interface_declaration.
+ -- Must always be null_iir for iir_kind_file_interface_declaration.
-- Get/Set_Default_Value (Field6)
--
-- Get/Set_Mode (Odigit1)
@@ -987,12 +1041,36 @@ package Iirs is
-- Iir_Kind_Function_Declaration (Medium)
-- Iir_Kind_Procedure_Declaration (Medium)
--
- -- Subprogram declaration.
+ -- LRM08 4.2 Subprogram declarations
+ --
+ -- subprogram_declaration ::= subprogram_specification ;
+ --
+ -- subprogram_specification ::=
+ -- procedure_specification | function_specification
+ --
+ -- procedure_specification ::=
+ -- PROCEDURE designator
+ -- subprogram_header
+ -- [ [ PARAMETER ] ( formal_parameter_list ) ]
+ --
+ -- function_specification ::=
+ -- [ PURE | IMPURE ] FUNCTION designator
+ -- subprogram_header
+ -- [ [ PARAMETER ] ( formal_parameter_list ) ] return type_mark
--
- -- The declaration containing this subrogram declaration.
+ -- designator ::= identifier | operator_symbol
+ --
+ -- operator_symbol ::= string_literal
+ --
+ -- Note: the subprogram specification of a body is kept, but should be
+ -- ignored if there is a subprogram declaration. The function
+ -- Is_Second_Subprogram_Specification returns True on such specification.
+ --
+ -- The declaration containing this subrogram declaration.
-- Get/Set_Parent (Field0)
--
-- Only for Iir_Kind_Function_Declaration:
+ -- FIXME: this is a type_mark.
-- Get/Set_Return_Type (Field1)
--
-- Only for Iir_Kind_Function_Declaration:
@@ -1010,7 +1088,9 @@ package Iirs is
--
-- Get/Set_Callees_List (Field7)
--
- -- Get/Set_Generic_Map_Aspect_Chain (Field8)
+ -- --Get/Set_Generic_Map_Aspect_Chain (Field8)
+ --
+ -- Get/Set_Return_Type_Mark (Field8)
--
-- Get/Set_Subprogram_Body (Field9)
--
@@ -1039,6 +1119,12 @@ package Iirs is
-- Only for Iir_Kind_Function_Declaration:
-- Get/Set_Resolution_Function_Flag (Flag7)
--
+ -- Only for Iir_Kind_Function_Declaration:
+ -- Get/Set_Has_Pure (Flag8)
+ --
+ -- True is the specification is immediately followed by a body.
+ -- Get/Set_Has_Body (Flag9)
+ --
-- Get/Set_Wait_State (State1)
--
-- Only for Iir_Kind_Procedure_Declaration:
@@ -1049,10 +1135,21 @@ package Iirs is
-- Iir_Kind_Function_Body (Short)
-- Iir_Kind_Procedure_Body (Short)
--
+ -- LRM08 4.3 Subprogram bodies
+ --
+ -- subprogram_body ::=
+ -- subprogram_specification IS
+ -- subprogram_declarative_part
+ -- BEGIN
+ -- subprogram_statement_part
+ -- END [ subprogram_kind ] [ designator ] ;
+ --
+ -- subprogram_kind ::= PROCEDURE | FUNCTION
+ --
-- Get/Set_Parent (Field0)
--
- -- The parse stage always puts a declaration before a body.
- -- Sem will remove the declaration if there is a forward declaration.
+ -- The parse stage always puts a declaration before a body.
+ -- Sem will remove the declaration if there is a forward declaration.
--
-- Get_Declaration_Chain (Field1)
--
@@ -1071,9 +1168,9 @@ package Iirs is
-- Iir_Kind_Implicit_Procedure_Declaration (Medium)
-- Iir_Kind_Implicit_Function_Declaration (Medium)
--
- -- This node contains a subprogram_declaration that was implicitly defined
- -- just after a type declaration.
- -- This declaration is inserted by sem.
+ -- This node contains a subprogram_declaration that was implicitly defined
+ -- just after a type declaration.
+ -- This declaration is inserted by sem.
--
-- Get/Set_Parent (Field0)
--
@@ -1130,14 +1227,14 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
+ -- Get/Set_Subtype_Indication (Field5)
--
-- Get/Set_Default_Value (Field6)
--
- -- For a non-resolved signal: null_iir if the signal has no driver, or
- -- a process/concurrent_statement for which the signal should have a
- -- driver. This is used to catch at analyse time unresolved signals with
- -- several drivers.
+ -- For a non-resolved signal: null_iir if the signal has no driver, or
+ -- a process/concurrent_statement for which the signal should have a
+ -- driver. This is used to catch at analyse time unresolved signals with
+ -- several drivers.
-- Get/Set_Signal_Driver (Field7)
--
-- Get/Set_Has_Disconnect_Flag (Flag1)
@@ -1150,6 +1247,8 @@ package Iirs is
--
-- Get/Set_Use_Flag (Flag6)
--
+ -- Get/Set_Has_Identifier_List (Flag7)
+ --
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Name_Staticness (State2)
@@ -1168,8 +1267,6 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
- --
-- Get/Set_Guard_Sensitivity_List (Field6)
--
-- Get/Set_Block_Statement (Field7)
@@ -1199,24 +1296,28 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
+ -- Only for Iir_Kind_Constant_Declaration:
+ -- Get/Set_Subtype_Indication (Field5)
+ --
+ -- Only for Iir_Kind_Iterator_Declaration:
+ -- Get/Set_Discrete_Range (Field5)
--
-- Only for Iir_Kind_Constant_Declaration:
- -- Default value of a deferred constant points to the full constant
- -- declaration.
+ -- Default value of a deferred constant points to the full constant
+ -- declaration.
-- Get/Set_Default_Value (Field6)
--
-- Only for Iir_Kind_Constant_Declaration:
- -- Summary:
- -- | constant C1 : integer; -- Deferred declaration (in a package)
- -- | constant C2 : integer := 4; -- Declaration
- -- | constant C1 : integer := 3; -- Full declaration (in a body)
- -- | NAME Deferred_declaration Deferred_declaration_flag
- -- | C1 Null_iir or C1' (*) True
- -- | C2 Null_Iir False
- -- | C1' C1 False
- -- |(*): Deferred_declaration is Null_Iir as long as the full declaration
- -- | has not been analyzed.
+ -- Summary:
+ -- | constant C1 : integer; -- Deferred declaration (in a package)
+ -- | constant C2 : integer := 4; -- Declaration
+ -- | constant C1 : integer := 3; -- Full declaration (in a body)
+ -- | NAME Deferred_declaration Deferred_declaration_flag
+ -- | C1 Null_iir or C1' (*) True
+ -- | C2 Null_Iir False
+ -- | C1' C1 False
+ -- |(*): Deferred_declaration is Null_Iir as long as the full declaration
+ -- | has not been analyzed.
-- Get/Set_Deferred_Declaration (Field7)
--
-- Only for Iir_Kind_Constant_Declaration:
@@ -1226,6 +1327,8 @@ package Iirs is
--
-- Get/Set_Use_Flag (Flag6)
--
+ -- Get/Set_Has_Identifier_List (Flag7)
+ --
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Name_Staticness (State2)
@@ -1242,23 +1345,40 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
+ -- Get/Set_Subtype_Indication (Field5)
--
-- Get/Set_Default_Value (Field6)
--
- -- True if the variable is a shared variable.
+ -- True if the variable is a shared variable.
-- Get/Set_Shared_Flag (Flag2)
--
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_Use_Flag (Flag6)
--
+ -- Get/Set_Has_Identifier_List (Flag7)
+ --
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Name_Staticness (State2)
-- Iir_Kind_File_Declaration (Medium)
--
+ -- LRM08 6.4.2.5 File declarations
+ --
+ -- file_declaration ::=
+ -- FILE identifier_list : subtype_indication [ file_open_information ] ;
+ --
+ -- file_open_information ::=
+ -- [ OPEN file_open_kind_expression ] IS file_logical_name
+ --
+ -- file_logical_name ::= string_expression
+ --
+ -- LRM87
+ --
+ -- file_declaration ::=
+ -- FILE identifier : subtype_indication IS [ mode ] file_logical_name ;
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Type (Field1)
@@ -1269,39 +1389,58 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
+ -- Get/Set_Subtype_Indication (Field5)
--
-- Get/Set_File_Logical_Name (Field6)
--
- -- This is not used in vhdl 87.
+ -- This is not used in vhdl 87.
-- Get/Set_File_Open_Kind (Field7)
--
- -- This is used only in vhdl 87.
+ -- This is used only in vhdl 87.
-- Get/Set_Mode (Odigit1)
--
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_Use_Flag (Flag6)
--
+ -- Get/Set_Has_Identifier_List (Flag7)
+ --
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Name_Staticness (State2)
+ --
+ -- Get/Set_Has_Mode (Flag8)
-- Iir_Kind_Element_Declaration (Short)
--
+ -- LRM08 5.3.3 Record types
+ --
+ -- element_declaration ::=
+ -- identifier_list : element_subtype_definition ;
+ --
+ -- identifier_list ::= identifier { , identifier }
+ --
+ -- element_subtype_definition ::= subtype_indication
+ --
+ -- The type can be deduced from the subtype indication, but this field is
+ -- present for uniformity (and speed).
-- Get/Set_Type (Field1)
--
-- Get/Set_Identifier (Field3)
--
- -- Return the position of the element in the record, starting from 0 for the
- -- first record element, increasing by one for each successive element.
+ -- Return the position of the element in the record, starting from 0 for
+ -- the first record element, increasing by one for each successive element.
-- Get/Set_Element_Position (Field4)
--
+ -- Get/Set_Subtype_Indication (Field5)
+ --
-- Get/Set_Visible_Flag (Flag4)
+ --
+ -- Get/Set_Has_Identifier_List (Flag7)
-- Iir_Kind_Record_Element_Constraint (Short)
--
- -- Record subtype definition which defines this constraint.
+ -- Record subtype definition which defines this constraint.
-- Get/Set_Parent (Field0)
--
-- Get/Set_Type (Field1)
@@ -1310,14 +1449,19 @@ package Iirs is
--
-- Get/Set_Identifier (Field3)
--
- -- Return the position of the element in the record, starting from 0 for the
- -- first record element, increasing by one for each successive element.
+ -- Return the position of the element in the record, starting from 0 for
+ -- the first record element, increasing by one for each successive element.
-- Get/Set_Element_Position (Field4)
--
-- Get/Set_Visible_Flag (Flag4)
-- Iir_Kind_Attribute_Declaration (Short)
--
+ -- LRM08 6.7 Attribute declarations
+ --
+ -- attribute_declaration ::=
+ -- ATTRIBUTE identifier : type_mark ;
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Type (Field1)
@@ -1326,6 +1470,8 @@ package Iirs is
--
-- Get/Set_Identifier (Field3)
--
+ -- Get/Set_Type_Mark (Field4)
+ --
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_Use_Flag (Flag6)
@@ -1334,9 +1480,9 @@ package Iirs is
--
-- Get/Set_Parent (Field0)
--
- -- List of entity class entry.
- -- To handle `<>', the last element of the list can be an entity_class of
- -- kind tok_box.
+ -- List of entity class entry.
+ -- To handle `<>', the last element of the list can be an entity_class of
+ -- kind tok_box.
-- Get/Set_Entity_Class_Entry_Chain (Field1)
--
-- Get/Set_Chain (Field2)
@@ -1349,10 +1495,10 @@ package Iirs is
-- Iir_Kind_Group_Declaration (Short)
--
- -- The declaration containing this type declaration.
+ -- The declaration containing this type declaration.
-- Get/Set_Parent (Field0)
--
- -- List of constituent.
+ -- List of constituents.
-- Get/Set_Group_Constituent_List (Field1)
--
-- Get/Set_Chain (Field2)
@@ -1377,10 +1523,10 @@ package Iirs is
--
-- Get/Set_Identifier (Field3)
--
- -- Valid only for property declaration.
+ -- Valid only for property declaration.
-- Get/Set_PSL_Clock (Field7)
--
- -- Valid only for property declaration without parameters.
+ -- Valid only for property declaration without parameters.
-- Get/Set_PSL_NFA (Field8)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -1413,8 +1559,6 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
- --
-- Get/Set_Default_Value (Field6)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -1438,8 +1582,6 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
- --
-- Get/Set_Default_Value (Field6)
--
-- Get/Set_Tolerance (Field7)
@@ -1458,6 +1600,11 @@ package Iirs is
-- Iir_Kind_Use_Clause (Short)
--
+ -- LRM08 12.4 Use clauses
+ --
+ -- use_clause ::=
+ -- USE selected_name { , selected_name } ;
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Selected_Name (Field1)
@@ -1467,50 +1614,50 @@ package Iirs is
-- Get/Set_Use_Clause_Chain (Field3)
- ----------------------
- -- type definitions --
- ----------------------
+ -----------------------
+ -- type definitions --
+ -----------------------
-- For Iir_Kinds_Type_And_Subtype_Definition:
--
- -- Type_Declarator:
- -- Points to the type declaration or subtype declaration that has created
- -- this definition. For some types, such as integer and floating point
- -- types, both type and subtype points to the declaration.
- -- However, there are cases where a type definition doesn't point to
- -- a declarator: anonymous subtype created by index contraints, or
- -- anonymous subtype created by an object declaration.
- -- Note: a type definition cannot be anoynymous.
+ -- Type_Declarator:
+ -- Points to the type declaration or subtype declaration that has created
+ -- this definition. For some types, such as integer and floating point
+ -- types, both type and subtype points to the declaration.
+ -- However, there are cases where a type definition doesn't point to
+ -- a declarator: anonymous subtype created by index contraints, or
+ -- anonymous subtype created by an object declaration.
+ -- Note: a type definition cannot be anoynymous.
-- Get/Set_Type_Declarator (Field3)
--
- -- Get/Set the base type.
- -- For a subtype, it returns the type.
- -- For a type, it must return the type itself.
+ -- The base type.
+ -- For a subtype, it returns the type.
+ -- For a type, it must return the type itself.
-- Get/Set_Base_Type (Field4)
--
- -- Get/Set the staticness of a type, according to LRM93 7.4.1.
- -- Note: These types definition are always locally static:
- -- enumeration, integer, floating.
- -- However, their subtype are not necessary locally static.
+ -- The staticness of a type, according to LRM93 7.4.1.
+ -- Note: These types definition are always locally static:
+ -- enumeration, integer, floating.
+ -- However, their subtype are not necessary locally static.
-- Get/Set_Type_Staticness (State1)
--
- -- Get/Set the resolved flag of a subtype, according to LRM93 2.4
+ -- The resolved flag of a subtype, according to LRM93 2.4
-- Get/Set_Resolved_Flag (Flag1)
--
- -- Get/Set the signal_type flag of a type definition.
- -- It is true when the type can be used for a signal.
+ -- The signal_type flag of a type definition.
+ -- It is true when the type can be used for a signal.
-- Get/Set_Signal_Type_Flag (Flag2)
--
-- Get/Set_Has_Signal_Flag (Flag3)
-- Iir_Kind_Enumeration_Type_Definition (Short)
--
- -- Get the range of the type (This is just an ascending range from the
- -- first literal to the last declared literal).
+ -- Get the range of the type (This is just an ascending range from the
+ -- first literal to the last declared literal).
-- Get/Set_Range_Constraint (Field1)
--
- -- Return the list of literals. This list is created when the node is
- -- created.
+ -- Return the list of literals. This list is created when the node is
+ -- created.
-- Get/Set_Enumeration_Literal_List (Field2)
--
-- Get/Set_Type_Declarator (Field3)
@@ -1529,8 +1676,9 @@ package Iirs is
-- Iir_Kind_Enumeration_Literal (Medium)
--
- -- Nota: two literals of the same type are equal iff their value is the
- -- same; in other words, there may be severals literals with the same value.
+ -- Nota: two literals of the same type are equal iff their value is the
+ -- same; in other words, there may be severals literals with the same
+ -- value.
--
-- Get/Set_Parent (Field0)
--
@@ -1543,13 +1691,11 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Get/Set_Base_Name (Field5)
- --
- -- The declaration of the literal. If LITERAL_ORIGIN is not set, then this
- -- is the node itself, else this is the literal defined.
+ -- The declaration of the literal. If LITERAL_ORIGIN is not set, then this
+ -- is the node itself, else this is the literal defined.
-- Get/Set_Enumeration_Decl (Field6)
--
- -- The value of an enumeration literal is the position.
+ -- The value of an enumeration literal is the position.
-- Get/Set_Enum_Pos (Field10)
--
-- Get/Set_Subprogram_Hash (Field11)
@@ -1558,8 +1704,8 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
--
- -- Never set to true, but possible when used as a prefix of an expanded
- -- name in a overloaded subprogram.
+ -- Never set to true, but possible when used as a prefix of an expanded
+ -- name in a overloaded subprogram.
-- Get/Set_Is_Within_Flag (Flag5)
--
-- Get/Set_Expr_Staticness (State1)
@@ -1589,6 +1735,14 @@ package Iirs is
-- Iir_Kind_Unit_Declaration (Medium)
--
+ -- LRM08 5.2.4 Physical types
+ --
+ -- primary_unit_declaration ::= identifier ;
+ --
+ -- secondary_unit_declaration ::= identifier = physical_literal ;
+ --
+ -- physical_literal ::= [ abstract_literal ] /unit/_name
+ --
-- Get/Set_Type (Field1)
--
-- Get/Set_Chain (Field2)
@@ -1597,23 +1751,39 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
+ -- The Physical_Literal is the expression that appear in the sources, so
+ -- this is Null_Iir for a primary unit.
-- Get/Set_Physical_Literal (Field6)
--
+ -- The value of the unit, computed from the primary unit. This is always
+ -- a physical integer literal.
-- Get/Set_Physical_Unit_Value (Field7)
--
-- Get/Set_Expr_Staticness (State1)
--
+ -- Get/Set_Name_Staticness (State2)
+ --
-- Get/Set_Visible_Flag (Flag4)
+ -- LRM08 5.2 Scalar types
+ --
+ -- range_constraint ::= RANGE range
+ --
+ -- range ::=
+ -- range_attribute_name
+ -- | simple_expression direction simple_expression
+ --
+ -- direction ::= to | downto
+
-- Iir_Kind_Integer_Type_Definition (Short)
-- Iir_Kind_Floating_Type_Definition (Short)
--
- -- Get/Set the declarator that has created this integer type.
+ -- The type declarator that has created this type.
-- Get/Set_Type_Declarator (Field3)
--
-- Get/Set_Base_Type (Field4)
--
- -- Type staticness is always locally.
+ -- Type staticness is always locally.
-- Get/Set_Type_Staticness (State1)
--
-- Get/Set_Resolved_Flag (Flag1)
@@ -1623,14 +1793,22 @@ package Iirs is
-- Get/Set_Has_Signal_Flag (Flag3)
-- Iir_Kind_Array_Type_Definition (Medium)
- -- This defines an unconstrained array type.
--
- -- Get/Set_Element_Subtype (Field1)
+ -- LRM08 5.3.2 Array types / LRM93 3.2.1
+ --
+ -- unbounded_array_definition ::=
+ -- ARRAY ( index_subtype_definition { , index_subtype_definition } )
+ -- OF element_subtype_indication
+ --
+ -- index_subtype_definition ::= type_mark RANGE <>
+ --
+ -- Get/Set_Element_Subtype_Indication (Field1)
--
-- Get/Set_Type_Declarator (Field3)
--
-- Get/Set_Base_Type (Field4)
--
+ -- This is a list of type marks.
-- Get/Set_Index_Subtype_List (Field6)
--
-- Get/Set_Type_Staticness (State1)
@@ -1647,6 +1825,14 @@ package Iirs is
-- Iir_Kind_Record_Type_Definition (Short)
--
+ -- LRM08 5.3.3 Record types / LRM93 3.2.2 Record types
+ --
+ -- record_type_definition ::=
+ -- RECORD
+ -- element_declaration
+ -- { element_declaration }
+ -- END RECORD [ /record_type/_simple_name ]
+ --
-- Get/Set_Elements_Declaration_List (Field1)
--
-- Get/Set_Type_Declarator (Field3)
@@ -1669,15 +1855,18 @@ package Iirs is
-- Iir_Kind_Access_Type_Definition (Short)
--
- -- Get/Set_Designated_Type (Field2)
+ -- LRM08 5.4 Access types
+ --
+ -- access_type_definition ::= ACCESS subtype_indication
+ --
+ -- Get/Set_Designated_Type (Field1)
+ --
+ -- Get/Set_Designated_Subtype_Indication (Field5)
--
-- Get/Set_Type_Declarator (Field3)
--
-- Get/Set_Base_Type (Field4)
--
- -- FIXME: Only for access_subtype.
- -- FIXME: Get/Set_Resolution_Function (Field5)
- --
-- Get/Set_Resolved_Flag (Flag1)
--
-- Get/Set_Signal_Type_Flag (Flag2)
@@ -1686,7 +1875,7 @@ package Iirs is
-- Iir_Kind_File_Type_Definition (Short)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_File_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
@@ -1696,20 +1885,20 @@ package Iirs is
--
-- Get/Set_Signal_Type_Flag (Flag2)
--
- -- True if this is the std.textio.text file type, which may require special
- -- handling.
+ -- True if this is the std.textio.text file type, which may require special
+ -- handling.
-- Get/Set_Text_File_Flag (Flag4)
--
-- Get/Set_Type_Staticness (State1)
-- Iir_Kind_Incomplete_Type_Definition (Short)
- -- Type definition for an incomplete type. This is created during the
- -- semantisation of the incomplete type declaration.
+ -- Type definition for an incomplete type. This is created during the
+ -- semantisation of the incomplete type declaration.
--
-- Get/Set_Incomplete_Type_List (Field2)
--
- -- Set to the incomplete type declaration when semantized, and set to the
- -- complete type declaration when the latter one is semantized.
+ -- Set to the incomplete type declaration when semantized, and set to the
+ -- complete type declaration when the latter one is semantized.
-- Get/Set_Type_Declarator (Field3)
--
-- Get/Set_Base_Type (Field4)
@@ -1758,9 +1947,80 @@ package Iirs is
--
-- Get/Set_End_Has_Identifier (Flag9)
- -------------------------
- -- subtype definitions --
- -------------------------
+ --------------------------
+ -- subtype definitions --
+ --------------------------
+
+ -- LRM08 6.3 Subtype declarations
+ --
+ -- subtype_indication ::=
+ -- [ resolution_indication ] type_mark [ constraint ]
+ --
+ -- There is no uniq representation for a subtype indication. If there is
+ -- only a type_mark, then a subtype indication is represented by a name
+ -- (a simple name or an expanded name); otherwise it is represented by one
+ -- of the subtype definition node.
+ --
+ -- resolution_indication ::=
+ -- resolution_function_name | ( element_resolution )
+ --
+ -- element_resolution ::= array_element_resolution | record_resolution
+ --
+ -- array_element_resolution ::= resolution_indication
+ --
+ -- record_resolution ::=
+ -- record_element_resolution { , record_element_resolution }
+ --
+ -- record_element_resolution ::=
+ -- record_element_simple_name resolution_indication
+ --
+ -- If there is no constraint but a resolution function name, the subtype
+ -- indication is represented by a subtype_definition (which will be
+ -- replaced by the correct subtype definition). If there is an array
+ -- element resolution the subtype indication is represented by an array
+ -- subtype definition, and if there is a record resolution, it is
+ -- represented by a record subtype definition.
+ --
+ -- constraint ::=
+ -- range_constraint
+ -- | index_constraint
+ -- | array_constraint
+ -- | record_constraint
+ --
+ -- There is no node for constraint, it is directly represented by one of
+ -- the rhs.
+ --
+ -- element_constraint ::=
+ -- array_constraint
+ -- | record_constraint
+ --
+ -- Likewise, there is no node for element_constraint.
+ --
+ -- index_constraint ::= ( discrete_range { , discrete_range } )
+ --
+ -- An index_constraint is represented by an array_subtype_definition.
+ --
+ -- discrete_range ::= /discrete/_subtype_indication | range
+ --
+ -- array_constraint ::=
+ -- index_constraint [ array_element_constraint ]
+ -- | ( OPEN ) [ array_element_constraint ]
+ --
+ -- An array_constraint is also represented by an array_subtype_definition.
+ --
+ -- array_element_constraint ::= element_constraint
+ --
+ -- There is no node for array_element_constraint.
+ --
+ -- record_constraint ::=
+ -- ( record_element_constraint { , record_element_constraint } )
+ --
+ -- A record_constraint is represented by a record_subtype_definition.
+ --
+ -- record_element_constraint ::=
+ -- record_element_simple_name element_constraint
+ --
+ -- Represented by Record_Element_Constraint.
-- Iir_Kind_Enumeration_Subtype_Definition (Short)
-- Iir_Kind_Integer_Subtype_Definition (Short)
@@ -1768,7 +2028,7 @@ package Iirs is
--
-- Get/Set_Range_Constraint (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
@@ -1788,7 +2048,7 @@ package Iirs is
--
-- Get/Set_Range_Constraint (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
@@ -1808,15 +2068,19 @@ package Iirs is
-- Iir_Kind_Access_Subtype_Definition (Short)
--
- -- Get/Set_Type_Staticness (State1)
+ -- Get/Set_Designated_Type (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
-- Get/Set_Base_Type (Field4)
--
- -- Note: no resolution function for access subtype.
+ -- Get/Set_Designated_Subtype_Indication (Field5)
+ --
+ -- Note: no resolution function for access subtype.
+ --
+ -- Get/Set_Type_Staticness (State1)
--
-- Get/Set_Resolved_Flag (Flag1)
--
@@ -1826,7 +2090,7 @@ package Iirs is
--
-- Get/Set_Elements_Declaration_List (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
@@ -1848,9 +2112,9 @@ package Iirs is
-- Iir_Kind_Array_Subtype_Definition (Medium)
--
- -- Get/Set_Element_Subtype (Field1)
+ -- Get/Set_Element_Subtype_Indication (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Type_Declarator (Field3)
--
@@ -1858,6 +2122,7 @@ package Iirs is
--
-- Get/Set_Resolution_Function (Field5)
--
+ -- The index_constraint. This is a list of subtype indication.
-- Get/Set_Index_Subtype_List (Field6)
--
-- Get/Set_Tolerance (Field7)
@@ -1882,45 +2147,47 @@ package Iirs is
--
-- Get/Set_Right_Limit (Field3)
--
+ -- Get/Set_Range_Origin (Field4)
+ --
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Direction (State2)
-- Iir_Kind_Subtype_Definition (Medium)
- -- Such a node is only created by parse and transformed into the correct
- -- kind (enumeration_subtype, integer_subtype...) by sem.
+ -- Such a node is only created by parse and transformed into the correct
+ -- kind (enumeration_subtype, integer_subtype...) by sem.
--
-- Get/Set_Range_Constraint (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Subtype_Type_Mark (Field2)
--
-- Get/Set_Resolution_Function (Field5)
--
-- Get/Set_Tolerance (Field7)
- ------------------------
- -- Nature definitions --
- ------------------------
+ -------------------------
+ -- Nature definitions --
+ -------------------------
-- Iir_Kind_Scalar_Nature_Definition (Medium)
--
-- Get/Set_Reference (Field2)
--
- -- Get/Set the declarator that has created this nature type.
+ -- The declarator that has created this nature type.
-- Get/Set_Nature_Declarator (Field3)
--
- -- C-- Get/Set_Base_Type (Field4)
+ -- C-- Get/Set_Base_Type (Field4)
--
- -- Type staticness is always locally.
- -- C-- Get/Set_Type_Staticness (State1)
+ -- Type staticness is always locally.
+ -- C-- Get/Set_Type_Staticness (State1)
--
-- Get/Set_Across_Type (Field7)
--
-- Get/Set_Through_Type (Field8)
- ---------------------------
- -- concurrent statements --
- ---------------------------
+ ----------------------------
+ -- concurrent statements --
+ ----------------------------
-- Iir_Kind_Concurrent_Conditional_Signal_Assignment (Medium)
-- Iir_Kind_Concurrent_Selected_Signal_Assignment (Medium)
@@ -1947,10 +2214,10 @@ package Iirs is
-- Only for Iir_Kind_Concurrent_Selected_Signal_Assignment:
-- Get/Set_Selected_Waveform_Chain (Field7)
--
- -- If the assignment is guarded, then get_guard must return the
- -- declaration of the signal guard, otherwise, null_iir.
- -- If the guard signal decl is not known, as a kludge and only to mark this
- -- assignment guarded, the guard can be this assignment.
+ -- If the assignment is guarded, then get_guard must return the
+ -- declaration of the signal guard, otherwise, null_iir.
+ -- If the guard signal decl is not known, as a kludge and only to mark this
+ -- assignment guarded, the guard can be this assignment.
-- Get/Set_Guard (Field8)
--
-- Get/Set_Delay_Mechanism (Field12)
@@ -1959,7 +2226,7 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
--
- -- True if the target of the assignment is guarded
+ -- True if the target of the assignment is guarded
-- Get_Guarded_Target_State (State3)
-- Iir_Kind_Sensitized_Process_Statement (Medium)
@@ -1983,8 +2250,8 @@ package Iirs is
--
-- Get/Set_Callees_List (Field7)
--
- -- The concurrent statement at the origin of that process. This is Null_Iir
- -- for a user process.
+ -- The concurrent statement at the origin of that process. This is
+ -- Null_Iir for a user process.
-- Get/Set_Process_Origin (Field8)
--
-- Get/Set_Wait_State (State1)
@@ -1999,9 +2266,13 @@ package Iirs is
--
-- Get/Set_Is_Within_Flag (Flag5)
--
+ -- Get/Set_Has_Is (Flag7)
+ --
-- Get/Set_End_Has_Reserved_Id (Flag8)
--
-- Get/Set_End_Has_Identifier (Flag9)
+ --
+ -- Get/Set_End_Has_Postponed (Flag10)
-- Iir_Kind_Concurrent_Assertion_Statement (Medium)
--
@@ -2061,11 +2332,23 @@ package Iirs is
-- Iir_Kind_Component_Instantiation_Statement (Medium)
--
+ -- LRM08 11.7 Component instantiation statements
+ --
+ -- component_instantiation_statement ::=
+ -- instantiation_label :
+ -- instantiated_unit
+ -- [ generic_map_aspect ]
+ -- [ port_map_aspect ] ;
+ --
+ -- instantiated_unit ::=
+ -- [ COMPONENT ] component_name
+ -- | ENTITY entity_name [ ( architecture_identifier ) ]
+ -- | CONFIGURATION configuration_name
+ --
-- Get/Set_Parent (Field0)
--
- -- Unit instantiated.
- -- Parse: a name, a entity_aspect_entity or a entity_aspect_configuration
- -- Sem: the component declaration or the design unit.
+ -- Unit instantiated. This is a name, an entity_aspect_entity or an
+ -- entity_aspect_configuration.
-- Get/Set_Instantiated_Unit (Field1)
--
-- Get/Set_Chain (Field2)
@@ -2081,17 +2364,17 @@ package Iirs is
--
-- Get/Set_Port_Map_Aspect_Chain (Field9)
--
- -- Configuration:
- -- In case of a configuration specification, the node is put into
- -- default configuration. In the absence of a specification, the
- -- default entity aspect, if any; if none, this field is null_iir.
+ -- Configuration:
+ -- In case of a configuration specification, the node is put into
+ -- default configuration. In the absence of a specification, the
+ -- default entity aspect, if any; if none, this field is null_iir.
-- Get/Set_Configuration_Specification (Field7)
--
- -- During Sem and elaboration, the configuration field can be filled by
- -- a component configuration declaration.
+ -- During Sem and elaboration, the configuration field can be filled by
+ -- a component configuration declaration.
--
- -- Configuration for this component.
- -- FIXME: must be get/set_binding_indication.
+ -- Configuration for this component.
+ -- FIXME: must be get/set_binding_indication.
-- Get/Set_Component_Configuration (Field6)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -2115,8 +2398,8 @@ package Iirs is
--
-- Get/Set_Block_Header (Field7)
--
- -- get/set_guard_decl is used for semantic analysis, in order to add
- -- a signal declaration.
+ -- get/set_guard_decl is used for semantic analysis, in order to add
+ -- a signal declaration.
-- Get/Set_Guard_Decl (Field8)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -2142,12 +2425,12 @@ package Iirs is
--
-- Get/Set_Concurrent_Statement_Chain (Field5)
--
- -- The generation scheme.
- -- A (boolean) expression for a conditionnal elaboration (if).
- -- A (iterator) declaration for an iterative elaboration (for).
+ -- The generation scheme.
+ -- A (boolean) expression for a conditionnal elaboration (if).
+ -- A (iterator) declaration for an iterative elaboration (for).
-- Get/Set_Generation_Scheme (Field6)
--
- -- The block configuration for this statement.
+ -- The block configuration for this statement.
-- Get/Set_Generate_Block_Configuration (Field7)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -2155,6 +2438,8 @@ package Iirs is
-- Get/Set_End_Has_Reserved_Id (Flag8)
--
-- Get/Set_End_Has_Identifier (Flag9)
+ --
+ -- Get/Set_Has_Begin (Flag10)
-- Iir_Kind_Simple_Simultaneous_Statement (Medium)
--
@@ -2175,17 +2460,17 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
- ---------------------------
- -- sequential statements --
- ---------------------------
+ ----------------------------
+ -- sequential statements --
+ ----------------------------
-- Iir_Kind_If_Statement (Medium)
-- Iir_Kind_Elsif (Medium)
--
-- Get/Set_Parent (Field0)
--
- -- May be NULL only for an iir_kind_elsif node, and then means the else
- -- clause.
+ -- May be NULL only for an iir_kind_elsif node, and then means the else
+ -- clause.
-- Get/Set_Condition (Field1)
--
-- Only for Iir_Kind_If_Statement:
@@ -2202,7 +2487,7 @@ package Iirs is
--
-- Get/Set_Sequential_Statement_Chain (Field5)
--
- -- Must be an Iir_kind_elsif node, or NULL for no more elsif clauses.
+ -- Must be an Iir_kind_elsif node, or NULL for no more elsif clauses.
-- Get/Set_Else_Clause (Field6)
--
-- Only for Iir_Kind_If_Statement:
@@ -2210,11 +2495,27 @@ package Iirs is
--
-- Get/Set_End_Has_Identifier (Flag9)
+ -- LRM08 10.10 Loop statement / LRM93 8.9
+ --
+ -- loop_statement ::=
+ -- [ loop_label : ]
+ -- [ iteration_scheme ] LOOP
+ -- sequence_of_statements
+ -- END LOOP [ loop_label ] ;
+ --
+ -- iteration_scheme ::=
+ -- WHILE condition
+ -- | FOR loop_parameter_specification
+ --
+ -- parameter_specification ::=
+ -- identifier IN discrete_range
+
-- Iir_Kind_For_Loop_Statement (Short)
--
-- Get/Set_Parent (Field0)
--
- -- Get/Set_Iterator_Scheme (Field1)
+ -- The parameters specification is represented by an Iterator_Declaration.
+ -- Get/Set_Parameter_Specification (Field1)
--
-- Get/Set_Chain (Field2)
--
@@ -2253,6 +2554,16 @@ package Iirs is
-- Iir_Kind_Exit_Statement (Short)
-- Iir_Kind_Next_Statement (Short)
--
+ -- LRM08 10.11 Next statement
+ --
+ -- next_statement ::=
+ -- [ label : ] NEXT [ loop_label ] [ WHEN condition ] ;
+ --
+ -- LRM08 10.12 Exit statement
+ --
+ -- exit_statement ::=
+ -- [ label : ] exit [ loop_label ] [ when condition ] ;
+ --
-- Get/Set_Parent (Field0)
--
-- Get/Set_Condition (Field1)
@@ -2264,8 +2575,7 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- Label identifier after parse.
- -- Get/Set_Loop (Field5)
+ -- Get/Set_Loop_Label (Field5)
--
-- Get/Set_Visible_Flag (Flag4)
@@ -2282,10 +2592,10 @@ package Iirs is
--
-- Get/Set_Attribute_Value_Chain (Field4)
--
- -- The waveform.
- -- If the waveform_chain is null_iir, then the signal assignment is a
- -- disconnection statement, ie TARGET <= null_iir after disconection_time,
- -- where disconnection_time is specified by a disconnection specification.
+ -- The waveform.
+ -- If the waveform_chain is null_iir, then the signal assignment is a
+ -- disconnection statement, ie TARGET <= null_iir after disconection_time,
+ -- where disconnection_time is specified by a disconnection specification.
-- Get/Set_Waveform_Chain (Field5)
--
-- Get/Set_Reject_Time_Expression (Field6)
@@ -2294,7 +2604,7 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
--
- -- True if the target of the assignment is guarded
+ -- True if the target of the assignment is guarded
-- Get_Guarded_Target_State (State3)
-- Iir_Kind_Variable_Assignment_Statement (Short)
@@ -2373,7 +2683,8 @@ package Iirs is
--
-- Get/Set_Parent (Field0)
--
- -- Type of the return value of the function. This is a copy of return_type.
+ -- Type of the return value of the function. This is a copy of
+ -- return_type.
-- Get/Set_Type (Field1)
--
-- Get/Set_Chain (Field2)
@@ -2391,7 +2702,7 @@ package Iirs is
--
-- Get/Set_Parent (Field0)
--
- -- Chain is compose of Iir_Kind_Choice_By_XXX.
+ -- Chain is compose of Iir_Kind_Choice_By_XXX.
-- Get/Set_Case_Statement_Alternative_Chain (Field1)
--
-- Get/Set_Chain (Field2)
@@ -2428,7 +2739,7 @@ package Iirs is
-- Iir_Kind_Procedure_Call (Short)
--
- -- Get/Set_Parent (Field0)
+ -- Get/Set_Prefix (Field0)
--
-- Get/Set_Parameter_Association_Chain (Field2)
--
@@ -2449,9 +2760,9 @@ package Iirs is
--
-- Get/Set_Visible_Flag (Flag4)
- ---------------
- -- operators --
- ---------------
+ ----------------
+ -- operators --
+ ----------------
-- Iir_Kinds_Monadic_Operator (Short)
--
@@ -2459,20 +2770,20 @@ package Iirs is
--
-- Get/Set_Operand (Field2)
--
- -- Function declaration corresponding to the function to call.
+ -- Function declaration corresponding to the function to call.
-- Get/Set_Implementation (Field3)
--
- -- Expr_staticness is defined by §7.4
+ -- Expr_staticness is defined by §7.4
-- Get/Set_Expr_Staticness (State1)
-- Iir_Kinds_Dyadic_Operator (Short)
--
-- Get/Set_Type (Field1)
--
- -- Left and Right operands.
+ -- Left and Right operands.
-- Get/Set_Left (Field2)
--
- -- Function declaration corresponding to the function to call.
+ -- Function declaration corresponding to the function to call.
-- Get/Set_Implementation (Field3)
--
-- Get/Set_Right (Field4)
@@ -2481,11 +2792,13 @@ package Iirs is
-- Iir_Kind_Function_Call (Short)
--
+ -- Get/Set_Prefix (Field0)
+ --
-- Get/Set_Type (Field1)
--
-- Get/Set_Parameter_Association_Chain (Field2)
--
- -- Function declaration corresponding to the function to call.
+ -- Function declaration corresponding to the function to call.
-- Get/Set_Implementation (Field3)
--
-- Get/Set_Method_Object (Field4)
@@ -2510,35 +2823,35 @@ package Iirs is
-- Iir_Kind_Aggregate_Info (Short)
--
- -- Get info for the next dimension. NULL_IIR terminated.
+ -- Get info for the next dimension. NULL_IIR terminated.
-- Get/Set_Sub_Aggregate_Info (Field1)
--
- -- For array aggregate only:
- -- If TRUE, the choices are not locally static.
- -- This flag is only valid when the array aggregate is constrained, ie
- -- has no 'others' choice.
+ -- For array aggregate only:
+ -- If TRUE, the choices are not locally static.
+ -- This flag is only valid when the array aggregate is constrained, ie
+ -- has no 'others' choice.
-- Get/Set_Aggr_Dynamic_Flag (Flag3)
--
- -- If TRUE, the aggregate is named, else it is positionnal.
+ -- If TRUE, the aggregate is named, else it is positionnal.
-- Get/Set_Aggr_Named_Flag (Flag4)
--
- -- The following three fields are used to check bounds of an array
- -- aggregate.
- -- For named aggregate, low and high bounds are computed, for positionnal
- -- aggregate, the (minimum) number of elements is computed.
- -- Note there may be elements beyond the bounds, due to other choice.
- -- These fields may apply for the aggregate or for the aggregate and its
- -- brothers if the node is for a sub-aggregate.
+ -- The following three fields are used to check bounds of an array
+ -- aggregate.
+ -- For named aggregate, low and high bounds are computed, for positionnal
+ -- aggregate, the (minimum) number of elements is computed.
+ -- Note there may be elements beyond the bounds, due to other choice.
+ -- These fields may apply for the aggregate or for the aggregate and its
+ -- brothers if the node is for a sub-aggregate.
--
- -- The low and high index choice, if any.
+ -- The low and high index choice, if any.
-- Get/Set_Aggr_Low_Limit (Field2)
--
-- Get/Set_Aggr_High_Limit (Field3)
--
- -- The minimum number of elements, if any. This is a minimax.
+ -- The minimum number of elements, if any. This is a minimax.
-- Get/Set_Aggr_Min_Length (Field4)
--
- -- True if the choice list has an 'others' choice.
+ -- True if the choice list has an 'others' choice.
-- Get/Set_Aggr_Others_Flag (Flag2)
-- Iir_Kind_Parenthesis_Expression (Short)
@@ -2551,9 +2864,15 @@ package Iirs is
-- Iir_Kind_Qualified_Expression (Short)
--
+ -- LRM08 9.3.5 Qualified expressions
+ --
+ -- qualified_expression ::=
+ -- type_mark ' ( expression )
+ -- | type_mark ' aggregate
+ --
-- Get/Set_Type (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Type_Mark (Field4)
--
-- Get/Set_Expression (Field5)
--
@@ -2561,9 +2880,13 @@ package Iirs is
-- Iir_Kind_Type_Conversion (Short)
--
+ -- LRM08 9.3.6 Type conversions
+ --
+ -- type_conversion ::= type_mark ( expression )
+ --
-- Get/Set_Type (Field1)
--
- -- Get/Set_Type_Mark (Field2)
+ -- Get/Set_Type_Mark (Field4)
--
-- Get/Set_Expression (Field5)
--
@@ -2572,26 +2895,38 @@ package Iirs is
-- Iir_Kind_Allocator_By_Expression (Short)
-- Iir_Kind_Allocator_By_Subtype (Short)
--
+ -- LRM08 9.3.7 Allocators
+ --
+ -- allocator ::=
+ -- NEW subtype_indication
+ -- | NEW qualified_expression
+ --
-- Get/Set_Type (Field1)
--
- -- To ease analysis: set to the designated type (either the type of the
- -- expression or the subtype)
+ -- To ease analysis: set to the designated type (either the type of the
+ -- expression or the subtype)
-- Get/Set_Allocator_Designated_Type (Field2)
--
- -- Contains the expression for a by expression allocator or the
- -- subtype indication for a by subtype allocator.
+ -- Only for Iir_Kind_Allocator_By_Expression:
+ -- Contains the expression for a by expression allocator.
-- Get/Set_Expression (Field5)
--
+ -- Only for Iir_Kind_Allocator_By_Subtype:
+ -- Contains the subtype indication for a by subtype allocator.
+ -- Get/Set_Subtype_Indication (Field5)
+ --
-- Get/Set_Expr_Staticness (State1)
- -----------
- -- names --
- -----------
+ ------------
+ -- Names --
+ ------------
-- Iir_Kind_Simple_Name (Short)
--
-- Get/Set_Type (Field1)
--
+ -- Get/Set_Alias_Declaration (Field2)
+ --
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Named_Entity (Field4)
@@ -2599,13 +2934,15 @@ package Iirs is
-- Get/Set_Base_Name (Field5)
--
-- Get/Set_Expr_Staticness (State1)
-
- -- Iir_Kind_Selected_Name (Short)
--
- -- Get/Set_Prefix (Field0)
+ -- Get/Set_Name_Staticness (State2)
+
+ -- Iir_Kind_Character_Literal (Short)
--
-- Get/Set_Type (Field1)
--
+ -- Get/Set_Alias_Declaration (Field2)
+ --
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Named_Entity (Field4)
@@ -2613,29 +2950,53 @@ package Iirs is
-- Get/Set_Base_Name (Field5)
--
-- Get/Set_Expr_Staticness (State1)
+ --
+ -- Get/Set_Name_Staticness (State2)
- -- Iir_Kind_Selected_By_All_Name (Short)
+ -- Iir_Kind_Operator_Symbol (Short)
+ --
+ -- Get/Set_Type (Field1)
+ --
+ -- Get/Set_Alias_Declaration (Field2)
+ --
+ -- Get/Set_Identifier (Field3)
+ --
+ -- Get/Set_Named_Entity (Field4)
+ --
+ -- Get/Set_Base_Name (Field5)
+
+ -- Iir_Kind_Selected_Name (Short)
--
-- Get/Set_Prefix (Field0)
--
-- Get/Set_Type (Field1)
--
+ -- Get/Set_Alias_Declaration (Field2)
+ --
+ -- Get/Set_Identifier (Field3)
+ --
-- Get/Set_Named_Entity (Field4)
--
-- Get/Set_Base_Name (Field5)
--
-- Get/Set_Expr_Staticness (State1)
+ --
+ -- Get/Set_Name_Staticness (State2)
- -- Iir_Kind_Operator_Symbol (Short)
+ -- Iir_Kind_Selected_By_All_Name (Short)
--
- -- Get/Set_Identifier (Field3)
+ -- Get/Set_Prefix (Field0)
+ --
+ -- Get/Set_Type (Field1)
--
-- Get/Set_Named_Entity (Field4)
--
-- Get/Set_Base_Name (Field5)
+ --
+ -- Get/Set_Expr_Staticness (State1)
-- Iir_Kind_Indexed_Name (Short)
- -- Select the element designed with the INDEX_LIST from array PREFIX.
+ -- Select the element designed with the INDEX_LIST from array PREFIX.
--
-- Get/Set_Prefix (Field0)
--
@@ -2664,22 +3025,51 @@ package Iirs is
-- Get/Set_Name_Staticness (State2)
-- Iir_Kind_Parenthesis_Name (Short)
- -- Created by the parser, and mutated into the correct iir node: it can be
- -- either a function call, an indexed array, a type conversion or a slice
- -- name.
+ -- Created by the parser, and mutated into the correct iir node: it can be
+ -- either a function call, an indexed array, a type conversion or a slice
+ -- name.
--
-- Get/Set_Prefix (Field0)
--
- -- Always returns null_iir.
+ -- Always returns null_iir.
-- Get/Set_Type (Field1)
--
-- Get/Set_Association_Chain (Field2)
--
-- Get/Set_Named_Entity (Field4)
- ----------------
- -- attributes --
- ----------------
+ -- Iir_Kind_Selected_Element (Short)
+ -- A record element selection.
+ --
+ -- Get/Set_Prefix (Field0)
+ --
+ -- Get/Set_Type (Field1)
+ --
+ -- Get/Set_Selected_Element (Field2)
+ --
+ -- Get/Set_Base_Name (Field5)
+ --
+ -- Get/Set_Expr_Staticness (State1)
+ --
+ -- Get/Set_Name_Staticness (State2)
+
+ -- Iir_Kind_Implicit_Dereference (Short)
+ -- Iir_Kind_Dereference (Short)
+ -- An implicit access dereference.
+ --
+ -- Get/Set_Prefix (Field0)
+ --
+ -- Get/Set_Type (Field1)
+ --
+ -- Get/Set_Base_Name (Field5)
+ --
+ -- Get/Set_Expr_Staticness (State1)
+ --
+ -- Get/Set_Name_Staticness (State2)
+
+ -----------------
+ -- Attributes --
+ -----------------
-- Iir_Kind_Attribute_Name (Short)
--
@@ -2687,13 +3077,17 @@ package Iirs is
--
-- Get/Set_Type (Field1)
--
+ -- Get/Set_Attribute_Signature (Field2)
+ --
-- Get/Set_Identifier (Field3)
--
-- Get/Set_Named_Entity (Field4)
--
- -- Get/Set_Signature (Field5)
+ -- Get/Set_Base_Name (Field5)
--
-- Get/Set_Expr_Staticness (State1)
+ --
+ -- Get/Set_Name_Staticness (State2)
-- Iir_Kind_Base_Attribute (Short)
--
@@ -2744,7 +3138,7 @@ package Iirs is
-- Iir_Kind_Delayed_Attribute (Short)
-- Iir_Kind_Quiet_Attribute (Short)
-- Iir_Kind_Transaction_Attribute (Short)
- -- (Iir_Kinds_Signal_Attribute)
+ -- (Iir_Kinds_Signal_Attribute)
--
-- Get/Set_Prefix (Field0)
--
@@ -2752,16 +3146,16 @@ package Iirs is
--
-- Get/Set_Chain (Field2)
--
- -- Not used by Iir_Kind_Transaction_Attribute
+ -- Not used by Iir_Kind_Transaction_Attribute
-- Get/Set_Parameter (Field4)
--
+ -- Get/Set_Base_Name (Field5)
+ --
-- Get/Set_Has_Active_Flag (Flag2)
--
-- Get/Set_Expr_Staticness (State1)
--
-- Get/Set_Name_Staticness (State2)
- --
- -- Get/Set_Base_Name (Field5)
-- Iir_Kind_Event_Attribute (Short)
-- Iir_Kind_Last_Event_Attribute (Short)
@@ -2832,10 +3226,10 @@ package Iirs is
-- Iir_Kind_Behavior_Attribute (Short)
-- Iir_Kind_Structure_Attribute (Short)
- -- FIXME: to describe (Short)
+ -- FIXME: to describe (Short)
-- Iir_Kind_Error (Short)
- -- Can be used instead of an expression or a type.
+ -- Can be used instead of an expression or a type.
-- Get/Set_Type (Field1)
--
-- Get/Set_Error_Origin (Field2)
@@ -2854,7 +3248,6 @@ package Iirs is
--
-- Get/Set_Has_Signal_Flag (Flag3)
-
-- End of Iir_Kind.
@@ -2869,7 +3262,6 @@ package Iirs is
Iir_Kind_Use_Clause,
-- Literals.
- Iir_Kind_Character_Literal,
Iir_Kind_Integer_Literal,
Iir_Kind_Floating_Point_Literal,
Iir_Kind_Null_Literal,
@@ -2881,7 +3273,6 @@ package Iirs is
Iir_Kind_Overflow_Literal,
-- Tuple,
- Iir_Kind_Proxy,
Iir_Kind_Waveform_Element,
Iir_Kind_Conditional_Waveform,
Iir_Kind_Association_Element_By_Expression,
@@ -2904,7 +3295,6 @@ package Iirs is
Iir_Kind_Signature,
Iir_Kind_Aggregate_Info,
Iir_Kind_Procedure_Call,
- Iir_Kind_Operator_Symbol,
Iir_Kind_Record_Element_Constraint,
Iir_Kind_Attribute_Specification,
@@ -3043,6 +3433,8 @@ package Iirs is
Iir_Kind_Selected_Element,
Iir_Kind_Dereference,
Iir_Kind_Implicit_Dereference,
+ Iir_Kind_Slice_Name,
+ Iir_Kind_Indexed_Name,
Iir_Kind_Psl_Expression,
-- Concurrent statements.
@@ -3079,10 +3471,11 @@ package Iirs is
Iir_Kind_Elsif,
-- Names
- Iir_Kind_Simple_Name,
- Iir_Kind_Slice_Name,
- Iir_Kind_Indexed_Name,
- Iir_Kind_Selected_Name,
+ Iir_Kind_Character_Literal, -- denoting_name
+ Iir_Kind_Simple_Name, -- denoting_name
+ Iir_Kind_Selected_Name, -- denoting_name
+ Iir_Kind_Operator_Symbol, -- denoting_name
+
Iir_Kind_Selected_By_All_Name,
Iir_Kind_Parenthesis_Name,
@@ -3166,22 +3559,24 @@ package Iirs is
-- has_class: set if class (constant, signal, variable or file) is explicit
--
-- Exemple:
- -- procedure P (A,B: integer;
- -- C: in constant bit;
- -- D: inout bit;
- -- E: variable bit;
- -- F, G: in bit;
- -- H, I: constant bit;
- -- J, K: in constant bit);
+ -- procedure P ( A, B: integer;
+ -- constant C: in bit;
+ -- D: inout bit;
+ -- variable E: bit;
+ -- F, G: in bit;
+ -- constant H, I: bit;
+ -- constant J, K: in bit);
-- A:
- -- B: has_type
- -- C, K: has_mode, has_class, has_type
- -- D: has_mode, has_type
- -- E, I: has_class, has_type
- -- F: has_mode
- -- G: has_mode, has_type
- -- H: has_class
- -- J: has_mode, has_class
+ -- B: has_type
+ -- C, has_class, has_mode, has_type
+ -- D: has_mode, has_type
+ -- E, has_class, has_type
+ -- F: has_mode
+ -- G: has_mode, has_type
+ -- H: has_class
+ -- I: has_class, has_type
+ -- J: has_class, has_mode
+ -- K: has_class, has_mode, has_type
type Iir_Lexical_Layout_Type is mod 2 ** 3;
Iir_Lexical_Has_Mode : constant Iir_Lexical_Layout_Type := 2 ** 0;
Iir_Lexical_Has_Class : constant Iir_Lexical_Layout_Type := 2 ** 1;
@@ -3480,10 +3875,10 @@ package Iirs is
--Iir_Predefined_Std_Ulogic_Match_Greater
Iir_Predefined_Std_Ulogic_Match_Greater_Equal;
- -- Staticness as defined by LRM93 §6.1 and §7.4
+ -- Staticness as defined by LRM93 §6.1 and §7.4
type Iir_Staticness is (Unknown, None, Globally, Locally);
- -- Staticness as defined by LRM93 §6.1 and §7.4
+ -- Staticness as defined by LRM93 §6.1 and §7.4
function Min (L,R: Iir_Staticness) return Iir_Staticness renames
Iir_Staticness'Min;
@@ -3555,8 +3950,7 @@ package Iirs is
-- Note: does not include iir_kind_enumeration_literal since it is
-- considered as a declaration.
subtype Iir_Kinds_Literal is Iir_Kind range
- Iir_Kind_Character_Literal ..
- --Iir_Kind_Integer_Literal
+ Iir_Kind_Integer_Literal ..
--Iir_Kind_Floating_Point_Literal
--Iir_Kind_Null_Literal
--Iir_Kind_String_Literal
@@ -3619,7 +4013,6 @@ package Iirs is
--Iir_Kind_Enumeration_Type_Definition
Iir_Kind_Integer_Type_Definition;
-
-- subtype Iir_Kinds_Discrete_Subtype_Definition is Iir_Kind range
-- Iir_Kind_Integer_Subtype_Definition ..
-- Iir_Kind_Enumeration_Subtype_Definition;
@@ -3765,11 +4158,17 @@ package Iirs is
--Iir_Kind_Choice_By_None
Iir_Kind_Choice_By_Name;
+ subtype Iir_Kinds_Denoting_Name is Iir_Kind range
+ Iir_Kind_Character_Literal ..
+ --Iir_Kind_Simple_Name
+ --Iir_Kind_Selected_Name
+ Iir_Kind_Operator_Symbol;
+
subtype Iir_Kinds_Name is Iir_Kind range
- Iir_Kind_Simple_Name ..
- --Iir_Kind_Slice_Name
- --Iir_Kind_Indexed_Name
+ Iir_Kind_Character_Literal ..
+ --Iir_Kind_Simple_Name
--Iir_Kind_Selected_Name
+ --Iir_Kind_Operator_Symbol
--Iir_Kind_Selected_By_All_Name
Iir_Kind_Parenthesis_Name;
@@ -3815,10 +4214,10 @@ package Iirs is
--Iir_Kind_Length_Array_Attribute
Iir_Kind_Ascending_Array_Attribute;
-
+ -- All the attributes.
subtype Iir_Kinds_Attribute is Iir_Kind range
Iir_Kind_Base_Attribute ..
- Iir_Kind_Path_Name_Attribute;
+ Iir_Kind_Reverse_Range_Array_Attribute;
subtype Iir_Kinds_Type_Attribute is Iir_Kind range
Iir_Kind_Left_Type_Attribute ..
@@ -4130,9 +4529,6 @@ package Iirs is
subtype Iir_File_Type_Definition is Iir;
- -- Tuples.
- subtype Iir_Proxy is Iir;
-
subtype Iir_Waveform_Element is Iir;
subtype Iir_Conditional_Waveform is Iir;
@@ -4547,13 +4943,9 @@ package Iirs is
function Get_Literal_Origin (Lit : Iir) return Iir;
procedure Set_Literal_Origin (Lit : Iir; Orig : Iir);
- -- tuples.
-
- function Create_Proxy (Proxy: Iir) return Iir_Proxy;
-
- -- Field: Field1
- function Get_Proxy (Target : Iir_Proxy) return Iir;
- procedure Set_Proxy (Target : Iir_Proxy; Proxy : Iir);
+ -- Field: Field4
+ function Get_Range_Origin (Lit : Iir) return Iir;
+ procedure Set_Range_Origin (Lit : Iir; Orig : Iir);
-- Field: Field3 (uc)
function Get_Entity_Class (Target : Iir) return Token_Type;
@@ -4578,7 +4970,7 @@ package Iirs is
function Get_Attribute_Specification (Val : Iir) return Iir;
procedure Set_Attribute_Specification (Val : Iir; Attr : Iir);
- -- Field: Field4 (uc)
+ -- Field: Field3 (uc)
function Get_Signal_List (Target : Iir) return Iir_List;
procedure Set_Signal_List (Target : Iir; List : Iir_List);
@@ -4694,13 +5086,8 @@ package Iirs is
function Get_Attribute_Value_Spec_Chain (Target : Iir) return Iir;
procedure Set_Attribute_Value_Spec_Chain (Target : Iir; Chain : Iir);
- -- The entity declaration for an architecture or a configuration.
- -- Field: Field2
- function Get_Entity (Decl : Iir) return Iir;
- procedure Set_Entity (Decl : Iir; Entity : Iir);
-
-- The entity name for an architecture or a configuration.
- -- Field: Field7
+ -- Field: Field2
function Get_Entity_Name (Arch : Iir) return Iir;
procedure Set_Entity_Name (Arch : Iir; Entity : Iir);
@@ -4745,6 +5132,14 @@ package Iirs is
procedure Set_Type (Target : Iir; Atype : Iir);
pragma Inline (Get_Type);
+ -- Field: Field5
+ function Get_Subtype_Indication (Target : Iir) return Iir;
+ procedure Set_Subtype_Indication (Target : Iir; Atype : Iir);
+
+ -- Field: Field5
+ function Get_Discrete_Range (Target : Iir) return Iir;
+ procedure Set_Discrete_Range (Target : Iir; Rng : Iir);
+
-- Field: Field1
function Get_Type_Definition (Decl : Iir) return Iir;
procedure Set_Type_Definition (Decl : Iir; Atype : Iir);
@@ -4917,10 +5312,10 @@ package Iirs is
function Get_Selected_Name (Target : Iir_Use_Clause) return Iir;
procedure Set_Selected_Name (Target : Iir_Use_Clause; Name : Iir);
- -- The type declarator which declares the type definition TARGET.
+ -- The type declarator which declares the type definition DEF.
-- Field: Field3
- function Get_Type_Declarator (Target : Iir) return Iir;
- procedure Set_Type_Declarator (Target : Iir; Decl : Iir);
+ function Get_Type_Declarator (Def : Iir) return Iir;
+ procedure Set_Type_Declarator (Def : Iir; Decl : Iir);
-- Field: Field2 (uc)
function Get_Enumeration_Literal_List (Target : Iir) return Iir_List;
@@ -5037,18 +5432,22 @@ package Iirs is
procedure Set_Index_List (Decl : Iir; List : Iir_List);
-- Field: Field1
- function Get_Element_Subtype (Decl : Iir) return Iir;
- procedure Set_Element_Subtype (Decl : Iir; Sub_Type : Iir);
+ function Get_Element_Subtype_Indication (Decl : Iir) return Iir;
+ procedure Set_Element_Subtype_Indication (Decl : Iir; Sub_Type : Iir);
-- Chains of elements of a record.
-- Field: Field1 (uc)
function Get_Elements_Declaration_List (Decl : Iir) return Iir_List;
procedure Set_Elements_Declaration_List (Decl : Iir; List : Iir_List);
- -- Field: Field2
+ -- Field: Field1
function Get_Designated_Type (Target : Iir) return Iir;
procedure Set_Designated_Type (Target : Iir; Dtype : Iir);
+ -- Field: Field5
+ function Get_Designated_Subtype_Indication (Target : Iir) return Iir;
+ procedure Set_Designated_Subtype_Indication (Target : Iir; Dtype : Iir);
+
-- The terminal declaration for the reference (ground) of a nature
-- Field: Field2
function Get_Reference (Def : Iir) return Iir;
@@ -5240,8 +5639,8 @@ package Iirs is
-- Configuration of an entity_aspect_configuration.
-- Field: Field1
- function Get_Configuration (Target : Iir) return Iir;
- procedure Set_Configuration (Target : Iir; Conf : Iir);
+ function Get_Configuration_Name (Target : Iir) return Iir;
+ procedure Set_Configuration_Name (Target : Iir; Conf : Iir);
-- Component configuration for a component_instantiation_statement.
-- Field: Field6
@@ -5339,8 +5738,8 @@ package Iirs is
-- Iterator of a for_loop_statement.
-- Field: Field1
- function Get_Iterator_Scheme (Target : Iir) return Iir;
- procedure Set_Iterator_Scheme (Target : Iir; Iterator : Iir);
+ function Get_Parameter_Specification (Target : Iir) return Iir;
+ procedure Set_Parameter_Specification (Target : Iir; Param : Iir);
-- Get/Set the statement in which TARGET appears. This is used to check
-- if next/exit is in a loop.
@@ -5350,8 +5749,8 @@ package Iirs is
-- Loop label for an exit_statement or next_statement.
-- Field: Field5
- function Get_Loop (Target : Iir) return Iir;
- procedure Set_Loop (Target : Iir; Stmt : Iir);
+ function Get_Loop_Label (Target : Iir) return Iir;
+ procedure Set_Loop_Label (Target : Iir; Stmt : Iir);
-- Component name for a component_configuration or
-- a configuration_specification.
@@ -5385,8 +5784,14 @@ package Iirs is
-- The named entity designated by a name.
-- Field: Field4
- function Get_Named_Entity (Target : Iir) return Iir;
- procedure Set_Named_Entity (Target : Iir; Val : Iir);
+ function Get_Named_Entity (Name : Iir) return Iir;
+ procedure Set_Named_Entity (Name : Iir; Val : Iir);
+
+ -- If a name designate a non-object alias, the designated alias.
+ -- Named_Entity will designate the aliased entity.
+ -- Field: Field2
+ function Get_Alias_Declaration (Name : Iir) return Iir;
+ procedure Set_Alias_Declaration (Name : Iir; Val : Iir);
-- Expression staticness, defined by rules of LRM 7.4
-- Field: State1 (pos)
@@ -5553,13 +5958,27 @@ package Iirs is
function Get_Method_Object (Target : Iir) return Iir;
procedure Set_Method_Object (Target : Iir; Object : Iir);
- -- The type_mark that appeared in the subtype indication.
+ -- The type_mark that appeared in the subtype indication. This is a name.
-- May be null_iir if there is no type mark (as in an iterator).
- -- May differ from base_type, if the type_mark is a subtype_name.
-- Field: Field2
+ function Get_Subtype_Type_Mark (Target : Iir) return Iir;
+ procedure Set_Subtype_Type_Mark (Target : Iir; Mark : Iir);
+
+ -- The type_mark that appeared in qualified expressions or type
+ -- conversions.
+ -- Field: Field4
function Get_Type_Mark (Target : Iir) return Iir;
procedure Set_Type_Mark (Target : Iir; Mark : Iir);
+ -- The type of values for a type file.
+ -- Field: Field2
+ function Get_File_Type_Mark (Target : Iir) return Iir;
+ procedure Set_File_Type_Mark (Target : Iir; Mark : Iir);
+
+ -- Field: Field8
+ function Get_Return_Type_Mark (Target : Iir) return Iir;
+ procedure Set_Return_Type_Mark (Target : Iir; Mark : Iir);
+
-- Get/set the lexical layout of an interface.
-- Field: Odigit2 (pos)
function Get_Lexical_Layout (Decl : Iir) return Iir_Lexical_Layout_Type;
@@ -5601,8 +6020,12 @@ package Iirs is
procedure Set_Implicit_Alias_Flag (Decl : Iir; Flag : Boolean);
-- Field: Field5
- function Get_Signature (Target : Iir) return Iir;
- procedure Set_Signature (Target : Iir; Value : Iir);
+ function Get_Alias_Signature (Alias : Iir) return Iir;
+ procedure Set_Alias_Signature (Alias : Iir; Signature : Iir);
+
+ -- Field: Field2
+ function Get_Attribute_Signature (Attr : Iir) return Iir;
+ procedure Set_Attribute_Signature (Attr : Iir; Signature : Iir);
-- Field: Field1 (uc)
function Get_Overload_List (Target : Iir) return Iir_List;
@@ -5653,11 +6076,44 @@ package Iirs is
function Get_End_Has_Identifier (Decl : Iir) return Boolean;
procedure Set_End_Has_Identifier (Decl : Iir; Flag : Boolean);
+ -- Layout flag: true if 'end' is followed by 'postponed'.
+ -- Field: Flag10
+ function Get_End_Has_Postponed (Decl : Iir) return Boolean;
+ procedure Set_End_Has_Postponed (Decl : Iir; Flag : Boolean);
+
-- Layout flag: true if 'begin' is present.
-- Field: Flag10
function Get_Has_Begin (Decl : Iir) return Boolean;
procedure Set_Has_Begin (Decl : Iir; Flag : Boolean);
+ -- Layout flag: true if 'is' is present.
+ -- Field: Flag7
+ function Get_Has_Is (Decl : Iir) return Boolean;
+ procedure Set_Has_Is (Decl : Iir; Flag : Boolean);
+
+ -- Layout flag: true if 'pure' or 'impure' is present.
+ -- Field: Flag8
+ function Get_Has_Pure (Decl : Iir) return Boolean;
+ procedure Set_Has_Pure (Decl : Iir; Flag : Boolean);
+
+ -- Layout flag: true if body appears just after the specification.
+ -- Field: Flag9
+ function Get_Has_Body (Decl : Iir) return Boolean;
+ procedure Set_Has_Body (Decl : Iir; Flag : Boolean);
+
+ -- Layout flag for object declaration. If True, the identifier of this
+ -- declaration is followed by an identifier (and separated by a comma).
+ -- This flag is set on all but the last declarations.
+ -- Eg: on 'signal A, B, C : Bit', the flag is set on A and B (but not C).
+ -- Field: Flag7
+ function Get_Has_Identifier_List (Decl : Iir) return Boolean;
+ procedure Set_Has_Identifier_List (Decl : Iir; Flag : Boolean);
+
+ -- Layout flag for object declaration. If True, the mode is present.
+ -- Field: Flag8
+ function Get_Has_Mode (Decl : Iir) return Boolean;
+ procedure Set_Has_Mode (Decl : Iir; Flag : Boolean);
+
-- Field: Field1 (uc)
function Get_Psl_Property (Decl : Iir) return PSL_Node;
procedure Set_Psl_Property (Decl : Iir; Prop : PSL_Node);