.. # This page is generated by doc/ASTReference.py when Sphinx starts. Do not edit it. Other nodes (Range_Expression ... Subtype_Definition) ##################################################### The diagrams below draw one box per node kind, with one port per field. The edge colours say how a link is held; they are listed in full on the :ref:`INT:AST:Fields` page. .. graphviz:: digraph { rankdir="LR" nodesep=0.1 node [shape=point width=0.06 color="#888a85"] edge [fontname="monospace" fontsize=10 minlen=3] l0a -> l0b [label="owned" color="#000000"] l1a -> l1b [label="ref" color="#3465a4" style=dashed] l2a -> l2b [label="maybe ref" color="#3465a4" style=dotted] l3a -> l3b [label="of ref" color="#3465a4" style=dashed] l4a -> l4b [label="of maybe ref" color="#3465a4" style=dotted] l5a -> l5b [label="forward ref" color="#f57900" style=dashed] l6a -> l6b [label="maybe forward ref" color="#f57900" style=dotted] l7a -> l7b [label="chain" color="#4e9a06"] l8a -> l8b [label="chain next" color="#4e9a06" style=bold] } .. _INT:AST:Range_Expression: Iir_Kind_Range_Expression ========================= Format: ``Short`` .. list-table:: :header-rows: 1 :widths: 30 12 18 12 28 * - Accessor - Field - Type - Access - Description * - :ref:`Left_Limit_Expr ` - ``Field2`` - ``Iir`` - owned - There are two fields for both limits: those that own the node (Left_Limit_Expr and Right_Limit_Expr) and those that reference the node (Left_Limit and Right_Limit). Always use the reference (they cannot be Null_Iir, while the owner nodes can be Null_Iir. Set the owner nodes only for owning purpose. * - :ref:`Right_Limit_Expr ` - ``Field3`` - ``Iir`` - owned - — * - :ref:`Range_Origin ` - ``Field0`` - ``Iir`` - owned - — * - :ref:`Type ` - ``Field1`` - ``Iir`` - ref - — * - :ref:`Left_Limit ` - ``Field4`` - ``Iir`` - ref - — * - :ref:`Right_Limit ` - ``Field5`` - ``Iir`` - ref - — * - :ref:`Expr_Staticness ` - ``State1`` - ``Iir_Staticness`` - owned - Expression staticness, defined by rules of LRM 7.4 * - :ref:`Direction ` - ``Flag1`` - ``Direction_Type`` - owned - — .. graphviz:: digraph { rankdir="LR" node [shape=record fontname="monospace" fontsize=10] edge [fontname="monospace" fontsize=9] "Range_Expression" [style=filled fillcolor="#eeeeec" label="{Range_Expression|{ Left_Limit_Expr| Right_Limit_Expr| Range_Origin| Type| Left_Limit| Right_Limit| Expr_Staticness| Direction}}"] "Range_Expression__Left_Limit_Expr" [shape=box label="Iir"] "Range_Expression":Left_Limit_Expr -> "Range_Expression__Left_Limit_Expr" [color="#000000"] "Range_Expression__Right_Limit_Expr" [shape=box label="Iir"] "Range_Expression":Right_Limit_Expr -> "Range_Expression__Right_Limit_Expr" [color="#000000"] "Range_Expression__Range_Origin" [shape=box label="Iir"] "Range_Expression":Range_Origin -> "Range_Expression__Range_Origin" [color="#000000"] "Range_Expression__Type" [shape=box label="Iir"] "Range_Expression":Type -> "Range_Expression__Type" [color="#3465a4" style=dashed] "Range_Expression__Left_Limit" [shape=box label="Iir"] "Range_Expression":Left_Limit -> "Range_Expression__Left_Limit" [color="#3465a4" style=dashed] "Range_Expression__Right_Limit" [shape=box label="Iir"] "Range_Expression":Right_Limit -> "Range_Expression__Right_Limit" [color="#3465a4" style=dashed] } .. _INT:AST:Protected_Type_Body: Iir_Kind_Protected_Type_Body ============================ Format: ``Short`` .. list-table:: :header-rows: 1 :widths: 30 12 18 12 28 * - Accessor - Field - Type - Access - Description * - :ref:`Parent ` - ``Field0`` - ``Iir`` - ref - Get/Set the statement in which TARGET appears. This is used to check if next/exit is in a loop. * - :ref:`Declaration_Chain ` - ``Field1`` - ``Iir`` - chain - — * - :ref:`Chain ` - ``Field2`` - ``Iir`` - chain next - — * - :ref:`Identifier ` - ``Field3`` - ``Name_Id`` - owned - Get/Set the identifier of a declaration. Can also be used instead of get/set_label. * - :ref:`Protected_Type_Declaration ` - ``Field4`` - ``Iir`` - ref - Corresponding protected type declaration of a protected type body. * - :ref:`Attribute_Value_Chain ` - ``Field5`` - ``Iir`` - ref - Chain of attribute values for declared items. To be used with Get/Set_Value_Chain. There is no order, therefore, a new attribute value may be always prepended. * - :ref:`End_Has_Reserved_Id ` - ``Flag8`` - ``Boolean`` - owned - Layout flag: true if 'end' is followed by the reserved identifier. * - :ref:`End_Has_Identifier ` - ``Flag9`` - ``Boolean`` - owned - Layout flag: true if 'end' is followed by the identifier. .. graphviz:: digraph { rankdir="LR" node [shape=record fontname="monospace" fontsize=10] edge [fontname="monospace" fontsize=9] "Protected_Type_Body" [style=filled fillcolor="#eeeeec" label="{Protected_Type_Body|{ Parent| Declaration_Chain| Chain| Identifier| Protected_Type_Declaration| Attribute_Value_Chain| End_Has_Reserved_Id| End_Has_Identifier}}"] "Protected_Type_Body__Parent" [shape=box label="Iir"] "Protected_Type_Body":Parent -> "Protected_Type_Body__Parent" [color="#3465a4" style=dashed] "Protected_Type_Body__Declaration_Chain" [shape=box label="Iir"] "Protected_Type_Body":Declaration_Chain -> "Protected_Type_Body__Declaration_Chain" [color="#4e9a06"] "Protected_Type_Body__Chain" [shape=box label="Iir"] "Protected_Type_Body":Chain -> "Protected_Type_Body__Chain" [color="#4e9a06" style=bold] "Protected_Type_Body__Protected_Type_Declaration" [shape=box label="Iir"] "Protected_Type_Body":Protected_Type_Declaration -> "Protected_Type_Body__Protected_Type_Declaration" [color="#3465a4" style=dashed] "Protected_Type_Body__Attribute_Value_Chain" [shape=box label="Iir"] "Protected_Type_Body":Attribute_Value_Chain -> "Protected_Type_Body__Attribute_Value_Chain" [color="#3465a4" style=dashed] } .. _INT:AST:Wildcard_Type_Definition: Iir_Kind_Wildcard_Type_Definition ================================= A wildcard type doesn't correspond to a type defined by VHDL. It is used only during analysis to temporary set the type of an entity when the type is not precisely known but restricted to some class of types. Eg: the type of an aggregate is not known before being determined by the context, but can only be an array or a record. Wildcard types are statically created by std_package and the set of restrictions depends on the node. See std_package.ads Format: ``Short`` .. list-table:: :header-rows: 1 :widths: 30 12 18 12 28 * - Accessor - Field - Type - Access - Description * - :ref:`Type_Declarator ` - ``Field3`` - ``Iir`` - ref - The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition. * - :ref:`Resolved_Flag ` - ``Flag1`` - ``Boolean`` - owned - Get/Set the resolved flag of a subtype definition. A subtype definition may be resolved either because a resolution_indication is present in the subtype_indication, or because all elements type are resolved. * - :ref:`Signal_Type_Flag ` - ``Flag2`` - ``Boolean`` - owned - Get/Set the signal_type flag of a type/subtype definition. This flags indicates whether the type can be used as a signal type. Access types, file types and composite types whose a sub-element is an access type cannot be used as a signal type. * - :ref:`Type_Staticness ` - ``State1`` - ``Iir_Staticness`` - owned - — .. graphviz:: digraph { rankdir="LR" node [shape=record fontname="monospace" fontsize=10] edge [fontname="monospace" fontsize=9] "Wildcard_Type_Definition" [style=filled fillcolor="#eeeeec" label="{Wildcard_Type_Definition|{ Type_Declarator| Resolved_Flag| Signal_Type_Flag| Type_Staticness}}"] "Wildcard_Type_Definition__Type_Declarator" [shape=box label="Iir"] "Wildcard_Type_Definition":Type_Declarator -> "Wildcard_Type_Definition__Type_Declarator" [color="#3465a4" style=dashed] } .. _INT:AST:Foreign_Vector_Type_Definition: Iir_Kind_Foreign_Vector_Type_Definition ======================================= A one dimensional array representing a vector defined in a foreign language. FIXME: add constraint state, add length Format: ``Medium`` .. list-table:: :header-rows: 1 :widths: 30 12 18 12 28 * - Accessor - Field - Type - Access - Description * - :ref:`Type_Declarator ` - ``Field3`` - ``Iir`` - ref - The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition. .. graphviz:: digraph { rankdir="LR" node [shape=record fontname="monospace" fontsize=10] edge [fontname="monospace" fontsize=9] "Foreign_Vector_Type_Definition" [style=filled fillcolor="#eeeeec" label="{Foreign_Vector_Type_Definition|{ Type_Declarator}}"] "Foreign_Vector_Type_Definition__Type_Declarator" [shape=box label="Iir"] "Foreign_Vector_Type_Definition":Type_Declarator -> "Foreign_Vector_Type_Definition__Type_Declarator" [color="#3465a4" style=dashed] } .. _INT:AST:Subtype_Definition: Iir_Kind_Subtype_Definition =========================== Such a node is only created by parse and transformed into the correct kind (enumeration_subtype, integer_subtype...) by sem. Format: ``Medium`` .. list-table:: :header-rows: 1 :widths: 30 12 18 12 28 * - Accessor - Field - Type - Access - Description * - :ref:`Range_Constraint ` - ``Field1`` - ``Iir`` - maybe ref - — * - :ref:`Subtype_Type_Mark ` - ``Field2`` - ``Iir`` - owned - 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). * - :ref:`Type_Declarator ` - ``Field3`` - ``Iir`` - ref - The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition. * - :ref:`Parent_Type ` - ``Field4`` - ``Iir`` - ref - — * - :ref:`Resolution_Indication ` - ``Field5`` - ``Iir`` - owned - Either a resolution function name, an array_element_resolution or a record_resolution * - :ref:`Tolerance ` - ``Field7`` - ``Iir`` - owned - — * - :ref:`Is_Ref ` - ``Flag12`` - ``Boolean`` - owned - Set to True if Maybe_Ref fields are references. This cannot be shared with Has_Identifier_List as: Is_Ref is set to True on all items but the first, while Has_Identifier_List is set to True on all items but the last. Furthermore Is_Ref appears in nodes where Has_Identifier_List is not present. .. graphviz:: digraph { rankdir="LR" node [shape=record fontname="monospace" fontsize=10] edge [fontname="monospace" fontsize=9] "Subtype_Definition" [style=filled fillcolor="#eeeeec" label="{Subtype_Definition|{ Range_Constraint| Subtype_Type_Mark| Type_Declarator| Parent_Type| Resolution_Indication| Tolerance| Is_Ref}}"] "Subtype_Definition__Range_Constraint" [shape=box label="Iir"] "Subtype_Definition":Range_Constraint -> "Subtype_Definition__Range_Constraint" [color="#3465a4" style=dotted] "Subtype_Definition__Subtype_Type_Mark" [shape=box label="Iir"] "Subtype_Definition":Subtype_Type_Mark -> "Subtype_Definition__Subtype_Type_Mark" [color="#000000"] "Subtype_Definition__Type_Declarator" [shape=box label="Iir"] "Subtype_Definition":Type_Declarator -> "Subtype_Definition__Type_Declarator" [color="#3465a4" style=dashed] "Subtype_Definition__Parent_Type" [shape=box label="Iir"] "Subtype_Definition":Parent_Type -> "Subtype_Definition__Parent_Type" [color="#3465a4" style=dashed] "Subtype_Definition__Resolution_Indication" [shape=box label="Iir"] "Subtype_Definition":Resolution_Indication -> "Subtype_Definition__Resolution_Indication" [color="#000000"] "Subtype_Definition__Tolerance" [shape=box label="Iir"] "Subtype_Definition":Tolerance -> "Subtype_Definition__Tolerance" [color="#000000"] }