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 Fields page.

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] }

Iir_Kind_Range_Expression

Format: Short

Accessor

Field

Type

Access

Description

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.

Right_Limit_Expr

Field3

Iir

owned

Range_Origin

Field0

Iir

owned

Type

Field1

Iir

ref

Left_Limit

Field4

Iir

ref

Right_Limit

Field5

Iir

ref

Expr_Staticness

State1

Iir_Staticness

owned

Expression staticness, defined by rules of LRM 7.4

Direction

Flag1

Direction_Type

owned

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> Left_Limit_Expr|<Right_Limit_Expr> Right_Limit_Expr|<Range_Origin> Range_Origin|<Type> Type|<Left_Limit> Left_Limit|<Right_Limit> Right_Limit|<Expr_Staticness> Expr_Staticness|<Direction> 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] }

Iir_Kind_Protected_Type_Body

Format: Short

Accessor

Field

Type

Access

Description

Parent

Field0

Iir

ref

Get/Set the statement in which TARGET appears. This is used to check if next/exit is in a loop.

Declaration_Chain

Field1

Iir

chain

Chain

Field2

Iir

chain next

Identifier

Field3

Name_Id

owned

Get/Set the identifier of a declaration. Can also be used instead of get/set_label.

Protected_Type_Declaration

Field4

Iir

ref

Corresponding protected type declaration of a protected type body.

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.

End_Has_Reserved_Id

Flag8

Boolean

owned

Layout flag: true if ‘end’ is followed by the reserved identifier.

End_Has_Identifier

Flag9

Boolean

owned

Layout flag: true if ‘end’ is followed by the identifier.

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> Parent|<Declaration_Chain> Declaration_Chain|<Chain> Chain|<Identifier> Identifier|<Protected_Type_Declaration> Protected_Type_Declaration|<Attribute_Value_Chain> Attribute_Value_Chain|<End_Has_Reserved_Id> End_Has_Reserved_Id|<End_Has_Identifier> 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] }

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

Accessor

Field

Type

Access

Description

Type_Declarator

Field3

Iir

ref

The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition.

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.

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.

Type_Staticness

State1

Iir_Staticness

owned

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> Type_Declarator|<Resolved_Flag> Resolved_Flag|<Signal_Type_Flag> Signal_Type_Flag|<Type_Staticness> 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] }

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

Accessor

Field

Type

Access

Description

Type_Declarator

Field3

Iir

ref

The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition.

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> 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] }

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

Accessor

Field

Type

Access

Description

Range_Constraint

Field1

Iir

maybe 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).

Type_Declarator

Field3

Iir

ref

The type declarator which declares the type definition DEF. Can also be a nature declarator for composite nature definition.

Parent_Type

Field4

Iir

ref

Resolution_Indication

Field5

Iir

owned

Either a resolution function name, an array_element_resolution or a record_resolution

Tolerance

Field7

Iir

owned

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.

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> Range_Constraint|<Subtype_Type_Mark> Subtype_Type_Mark|<Type_Declarator> Type_Declarator|<Parent_Type> Parent_Type|<Resolution_Indication> Resolution_Indication|<Tolerance> Tolerance|<Is_Ref> 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"] }