// generated by gen-nodes from `fire-chunk.t'.  Do not edit.

#ifndef FIRE_H
#define FIRE_H

#include <freehdl/tree-supp.h>
#include <freehdl/fire-types.h>
#include <iostream>

extern tree_chunk_info fire_chunk_info;
extern tree_ctype_info fire_string_ctype_info;
extern tree_ctype_info bool_ctype_info;
extern tree_ctype_info int_ctype_info;
extern tree_ctype_info IR_Kind_ctype_info;
extern tree_ctype_info IR_Character_ctype_info;
extern tree_ctype_info IR_String_ctype_info;
extern tree_ctype_info IR_SignalKind_ctype_info;
extern tree_ctype_info IR_Mode_ctype_info;
extern tree_ctype_info IR_Pure_ctype_info;
extern tree_ctype_info IR_Direction_ctype_info;
extern tree_ctype_info IR_DelayMechanism_ctype_info;
extern tree_ctype_info IR_StaticLevel_ctype_info;
struct IIR_PosInfo;
typedef IIR_PosInfo *pIIR_PosInfo;
extern tree_kind_info IR_POS_INFO_kind_info;
#define IR_POS_INFO (&IR_POS_INFO_kind_info)
struct IIR_PosInfo_TextFile;
typedef IIR_PosInfo_TextFile *pIIR_PosInfo_TextFile;
extern tree_kind_info IR_POS_INFO_TEXT_FILE_kind_info;
#define IR_POS_INFO_TEXT_FILE (&IR_POS_INFO_TEXT_FILE_kind_info)
struct IIR_PosInfo_Sheet;
typedef IIR_PosInfo_Sheet *pIIR_PosInfo_Sheet;
extern tree_kind_info IR_POS_INFO_SHEET_kind_info;
#define IR_POS_INFO_SHEET (&IR_POS_INFO_SHEET_kind_info)
struct IIR_Root;
typedef IIR_Root *pIIR_Root;
extern tree_kind_info IR_ROOT_kind_info;
#define IR_ROOT (&IR_ROOT_kind_info)
struct IIR_Dummy;
typedef IIR_Dummy *pIIR_Dummy;
extern tree_kind_info IR_DUMMY_kind_info;
#define IR_DUMMY (&IR_DUMMY_kind_info)
struct IIR_Signature;
typedef IIR_Signature *pIIR_Signature;
extern tree_kind_info IR_SIGNATURE_kind_info;
#define IR_SIGNATURE (&IR_SIGNATURE_kind_info)
struct IIR_Literal;
typedef IIR_Literal *pIIR_Literal;
extern tree_kind_info IR_LITERAL_kind_info;
#define IR_LITERAL (&IR_LITERAL_kind_info)
struct IIR_TextLiteral;
typedef IIR_TextLiteral *pIIR_TextLiteral;
extern tree_kind_info IR_TEXT_LITERAL_kind_info;
#define IR_TEXT_LITERAL (&IR_TEXT_LITERAL_kind_info)
struct IIR_Identifier;
typedef IIR_Identifier *pIIR_Identifier;
extern tree_kind_info IR_IDENTIFIER_kind_info;
#define IR_IDENTIFIER (&IR_IDENTIFIER_kind_info)
struct IIR_CharacterLiteral;
typedef IIR_CharacterLiteral *pIIR_CharacterLiteral;
extern tree_kind_info IR_CHARACTER_LITERAL_kind_info;
#define IR_CHARACTER_LITERAL (&IR_CHARACTER_LITERAL_kind_info)
struct IIR_StringLiteral;
typedef IIR_StringLiteral *pIIR_StringLiteral;
extern tree_kind_info IR_STRING_LITERAL_kind_info;
#define IR_STRING_LITERAL (&IR_STRING_LITERAL_kind_info)
struct IIR_AbstractLiteral;
typedef IIR_AbstractLiteral *pIIR_AbstractLiteral;
extern tree_kind_info IR_ABSTRACT_LITERAL_kind_info;
#define IR_ABSTRACT_LITERAL (&IR_ABSTRACT_LITERAL_kind_info)
struct IIR_IntegerLiteral;
typedef IIR_IntegerLiteral *pIIR_IntegerLiteral;
extern tree_kind_info IR_INTEGER_LITERAL_kind_info;
#define IR_INTEGER_LITERAL (&IR_INTEGER_LITERAL_kind_info)
struct IIR_FloatingPointLiteral;
typedef IIR_FloatingPointLiteral *pIIR_FloatingPointLiteral;
extern tree_kind_info IR_FLOATING_POINT_LITERAL_kind_info;
#define IR_FLOATING_POINT_LITERAL (&IR_FLOATING_POINT_LITERAL_kind_info)
struct IIR_Tuple;
typedef IIR_Tuple *pIIR_Tuple;
extern tree_kind_info IR_TUPLE_kind_info;
#define IR_TUPLE (&IR_TUPLE_kind_info)
struct IIR_AssociationElement;
typedef IIR_AssociationElement *pIIR_AssociationElement;
extern tree_kind_info IR_ASSOCIATION_ELEMENT_kind_info;
#define IR_ASSOCIATION_ELEMENT (&IR_ASSOCIATION_ELEMENT_kind_info)
struct IIR_AssociationElementByExpression;
typedef IIR_AssociationElementByExpression *pIIR_AssociationElementByExpression;
extern tree_kind_info IR_ASSOCIATION_ELEMENT_BY_EXPRESSION_kind_info;
#define IR_ASSOCIATION_ELEMENT_BY_EXPRESSION (&IR_ASSOCIATION_ELEMENT_BY_EXPRESSION_kind_info)
struct IIR_AssociationElementOpen;
typedef IIR_AssociationElementOpen *pIIR_AssociationElementOpen;
extern tree_kind_info IR_ASSOCIATION_ELEMENT_OPEN_kind_info;
#define IR_ASSOCIATION_ELEMENT_OPEN (&IR_ASSOCIATION_ELEMENT_OPEN_kind_info)
struct IIR_CaseStatementAlternative;
typedef IIR_CaseStatementAlternative *pIIR_CaseStatementAlternative;
extern tree_kind_info IR_CASE_STATEMENT_ALTERNATIVE_kind_info;
#define IR_CASE_STATEMENT_ALTERNATIVE (&IR_CASE_STATEMENT_ALTERNATIVE_kind_info)
struct IIR_Choice;
typedef IIR_Choice *pIIR_Choice;
extern tree_kind_info IR_CHOICE_kind_info;
#define IR_CHOICE (&IR_CHOICE_kind_info)
struct IIR_ChoiceByExpression;
typedef IIR_ChoiceByExpression *pIIR_ChoiceByExpression;
extern tree_kind_info IR_CHOICE_BY_EXPRESSION_kind_info;
#define IR_CHOICE_BY_EXPRESSION (&IR_CHOICE_BY_EXPRESSION_kind_info)
struct IIR_ChoiceByRange;
typedef IIR_ChoiceByRange *pIIR_ChoiceByRange;
extern tree_kind_info IR_CHOICE_BY_RANGE_kind_info;
#define IR_CHOICE_BY_RANGE (&IR_CHOICE_BY_RANGE_kind_info)
struct IIR_ChoiceByOthers;
typedef IIR_ChoiceByOthers *pIIR_ChoiceByOthers;
extern tree_kind_info IR_CHOICE_BY_OTHERS_kind_info;
#define IR_CHOICE_BY_OTHERS (&IR_CHOICE_BY_OTHERS_kind_info)
struct IIR_EntityClassEntry;
typedef IIR_EntityClassEntry *pIIR_EntityClassEntry;
extern tree_kind_info IR_ENTITY_CLASS_ENTRY_kind_info;
#define IR_ENTITY_CLASS_ENTRY (&IR_ENTITY_CLASS_ENTRY_kind_info)
struct IIR_WaveformElement;
typedef IIR_WaveformElement *pIIR_WaveformElement;
extern tree_kind_info IR_WAVEFORM_ELEMENT_kind_info;
#define IR_WAVEFORM_ELEMENT (&IR_WAVEFORM_ELEMENT_kind_info)
struct IIR_ElementAssociation;
typedef IIR_ElementAssociation *pIIR_ElementAssociation;
extern tree_kind_info IR_ELEMENT_ASSOCIATION_kind_info;
#define IR_ELEMENT_ASSOCIATION (&IR_ELEMENT_ASSOCIATION_kind_info)
struct IIR_IndexedAssociation;
typedef IIR_IndexedAssociation *pIIR_IndexedAssociation;
extern tree_kind_info IR_INDEXED_ASSOCIATION_kind_info;
#define IR_INDEXED_ASSOCIATION (&IR_INDEXED_ASSOCIATION_kind_info)
struct IIR_SingleIndexedAssociation;
typedef IIR_SingleIndexedAssociation *pIIR_SingleIndexedAssociation;
extern tree_kind_info IR_SINGLE_INDEXED_ASSOCIATION_kind_info;
#define IR_SINGLE_INDEXED_ASSOCIATION (&IR_SINGLE_INDEXED_ASSOCIATION_kind_info)
struct IIR_RangeIndexedAssociation;
typedef IIR_RangeIndexedAssociation *pIIR_RangeIndexedAssociation;
extern tree_kind_info IR_RANGE_INDEXED_ASSOCIATION_kind_info;
#define IR_RANGE_INDEXED_ASSOCIATION (&IR_RANGE_INDEXED_ASSOCIATION_kind_info)
struct IIR_SliceIndexedAssociation;
typedef IIR_SliceIndexedAssociation *pIIR_SliceIndexedAssociation;
extern tree_kind_info IR_SLICE_INDEXED_ASSOCIATION_kind_info;
#define IR_SLICE_INDEXED_ASSOCIATION (&IR_SLICE_INDEXED_ASSOCIATION_kind_info)
struct IIR_OthersIndexedAssociation;
typedef IIR_OthersIndexedAssociation *pIIR_OthersIndexedAssociation;
extern tree_kind_info IR_OTHERS_INDEXED_ASSOCIATION_kind_info;
#define IR_OTHERS_INDEXED_ASSOCIATION (&IR_OTHERS_INDEXED_ASSOCIATION_kind_info)
struct IIR_AttributeValue;
typedef IIR_AttributeValue *pIIR_AttributeValue;
extern tree_kind_info IR_ATTRIBUTE_VALUE_kind_info;
#define IR_ATTRIBUTE_VALUE (&IR_ATTRIBUTE_VALUE_kind_info)
struct IIR_List;
typedef IIR_List *pIIR_List;
extern tree_kind_info IR_LIST_kind_info;
#define IR_LIST (&IR_LIST_kind_info)
struct IIR_AssociationList;
typedef IIR_AssociationList *pIIR_AssociationList;
extern tree_kind_info IR_ASSOCIATION_LIST_kind_info;
#define IR_ASSOCIATION_LIST (&IR_ASSOCIATION_LIST_kind_info)
pIIR_AssociationList reverse (pIIR_AssociationList);
struct IIR_AttributeValueList;
typedef IIR_AttributeValueList *pIIR_AttributeValueList;
extern tree_kind_info IR_ATTRIBUTE_VALUE_LIST_kind_info;
#define IR_ATTRIBUTE_VALUE_LIST (&IR_ATTRIBUTE_VALUE_LIST_kind_info)
pIIR_AttributeValueList reverse (pIIR_AttributeValueList);
struct IIR_CaseStatementAlternativeList;
typedef IIR_CaseStatementAlternativeList *pIIR_CaseStatementAlternativeList;
extern tree_kind_info IR_CASE_STATEMENT_ALTERNATIVE_LIST_kind_info;
#define IR_CASE_STATEMENT_ALTERNATIVE_LIST (&IR_CASE_STATEMENT_ALTERNATIVE_LIST_kind_info)
pIIR_CaseStatementAlternativeList reverse (pIIR_CaseStatementAlternativeList);
struct IIR_ChoiceList;
typedef IIR_ChoiceList *pIIR_ChoiceList;
extern tree_kind_info IR_CHOICE_LIST_kind_info;
#define IR_CHOICE_LIST (&IR_CHOICE_LIST_kind_info)
pIIR_ChoiceList reverse (pIIR_ChoiceList);
struct IIR_ConcurrentStatementList;
typedef IIR_ConcurrentStatementList *pIIR_ConcurrentStatementList;
extern tree_kind_info IR_CONCURRENT_STATEMENT_LIST_kind_info;
#define IR_CONCURRENT_STATEMENT_LIST (&IR_CONCURRENT_STATEMENT_LIST_kind_info)
pIIR_ConcurrentStatementList reverse (pIIR_ConcurrentStatementList);
struct IIR_ConfigurationItemList;
typedef IIR_ConfigurationItemList *pIIR_ConfigurationItemList;
extern tree_kind_info IR_CONFIGURATION_ITEM_LIST_kind_info;
#define IR_CONFIGURATION_ITEM_LIST (&IR_CONFIGURATION_ITEM_LIST_kind_info)
pIIR_ConfigurationItemList reverse (pIIR_ConfigurationItemList);
struct IIR_DeclarationList;
typedef IIR_DeclarationList *pIIR_DeclarationList;
extern tree_kind_info IR_DECLARATION_LIST_kind_info;
#define IR_DECLARATION_LIST (&IR_DECLARATION_LIST_kind_info)
pIIR_DeclarationList reverse (pIIR_DeclarationList);
struct IIR_ElementDeclarationList;
typedef IIR_ElementDeclarationList *pIIR_ElementDeclarationList;
extern tree_kind_info IR_ELEMENT_DECLARATION_LIST_kind_info;
#define IR_ELEMENT_DECLARATION_LIST (&IR_ELEMENT_DECLARATION_LIST_kind_info)
pIIR_ElementDeclarationList reverse (pIIR_ElementDeclarationList);
struct IIR_EntityClassEntryList;
typedef IIR_EntityClassEntryList *pIIR_EntityClassEntryList;
extern tree_kind_info IR_ENTITY_CLASS_ENTRY_LIST_kind_info;
#define IR_ENTITY_CLASS_ENTRY_LIST (&IR_ENTITY_CLASS_ENTRY_LIST_kind_info)
pIIR_EntityClassEntryList reverse (pIIR_EntityClassEntryList);
struct IIR_EnumerationLiteralList;
typedef IIR_EnumerationLiteralList *pIIR_EnumerationLiteralList;
extern tree_kind_info IR_ENUMERATION_LITERAL_LIST_kind_info;
#define IR_ENUMERATION_LITERAL_LIST (&IR_ENUMERATION_LITERAL_LIST_kind_info)
pIIR_EnumerationLiteralList reverse (pIIR_EnumerationLiteralList);
struct IIR_InterfaceList;
typedef IIR_InterfaceList *pIIR_InterfaceList;
extern tree_kind_info IR_INTERFACE_LIST_kind_info;
#define IR_INTERFACE_LIST (&IR_INTERFACE_LIST_kind_info)
pIIR_InterfaceList reverse (pIIR_InterfaceList);
struct IIR_LibraryUnitList;
typedef IIR_LibraryUnitList *pIIR_LibraryUnitList;
extern tree_kind_info IR_LIBRARY_UNIT_LIST_kind_info;
#define IR_LIBRARY_UNIT_LIST (&IR_LIBRARY_UNIT_LIST_kind_info)
pIIR_LibraryUnitList reverse (pIIR_LibraryUnitList);
struct IIR_SequentialStatementList;
typedef IIR_SequentialStatementList *pIIR_SequentialStatementList;
extern tree_kind_info IR_SEQUENTIAL_STATEMENT_LIST_kind_info;
#define IR_SEQUENTIAL_STATEMENT_LIST (&IR_SEQUENTIAL_STATEMENT_LIST_kind_info)
pIIR_SequentialStatementList reverse (pIIR_SequentialStatementList);
struct IIR_UnitList;
typedef IIR_UnitList *pIIR_UnitList;
extern tree_kind_info IR_UNIT_LIST_kind_info;
#define IR_UNIT_LIST (&IR_UNIT_LIST_kind_info)
pIIR_UnitList reverse (pIIR_UnitList);
struct IIR_WaveformList;
typedef IIR_WaveformList *pIIR_WaveformList;
extern tree_kind_info IR_WAVEFORM_LIST_kind_info;
#define IR_WAVEFORM_LIST (&IR_WAVEFORM_LIST_kind_info)
pIIR_WaveformList reverse (pIIR_WaveformList);
struct IIR_TypeList;
typedef IIR_TypeList *pIIR_TypeList;
extern tree_kind_info IR_TYPE_LIST_kind_info;
#define IR_TYPE_LIST (&IR_TYPE_LIST_kind_info)
pIIR_TypeList reverse (pIIR_TypeList);
struct IIR_ExpressionList;
typedef IIR_ExpressionList *pIIR_ExpressionList;
extern tree_kind_info IR_EXPRESSION_LIST_kind_info;
#define IR_EXPRESSION_LIST (&IR_EXPRESSION_LIST_kind_info)
pIIR_ExpressionList reverse (pIIR_ExpressionList);
struct IIR_IndexedAssociationList;
typedef IIR_IndexedAssociationList *pIIR_IndexedAssociationList;
extern tree_kind_info IR_INDEXED_ASSOCIATION_LIST_kind_info;
#define IR_INDEXED_ASSOCIATION_LIST (&IR_INDEXED_ASSOCIATION_LIST_kind_info)
pIIR_IndexedAssociationList reverse (pIIR_IndexedAssociationList);
struct IIR_ElementAssociationList;
typedef IIR_ElementAssociationList *pIIR_ElementAssociationList;
extern tree_kind_info IR_ELEMENT_ASSOCIATION_LIST_kind_info;
#define IR_ELEMENT_ASSOCIATION_LIST (&IR_ELEMENT_ASSOCIATION_LIST_kind_info)
pIIR_ElementAssociationList reverse (pIIR_ElementAssociationList);
struct IIR_ComponentInstantiationList;
typedef IIR_ComponentInstantiationList *pIIR_ComponentInstantiationList;
extern tree_kind_info IR_COMPONENT_INSTANTIATION_LIST_kind_info;
#define IR_COMPONENT_INSTANTIATION_LIST (&IR_COMPONENT_INSTANTIATION_LIST_kind_info)
pIIR_ComponentInstantiationList reverse (pIIR_ComponentInstantiationList);
struct IIR_ConfigurationSpecificationList;
typedef IIR_ConfigurationSpecificationList *pIIR_ConfigurationSpecificationList;
extern tree_kind_info IR_CONFIGURATION_SPECIFICATION_LIST_kind_info;
#define IR_CONFIGURATION_SPECIFICATION_LIST (&IR_CONFIGURATION_SPECIFICATION_LIST_kind_info)
pIIR_ConfigurationSpecificationList reverse (pIIR_ConfigurationSpecificationList);
struct IIR_IdentifierList;
typedef IIR_IdentifierList *pIIR_IdentifierList;
extern tree_kind_info IR_IDENTIFIER_LIST_kind_info;
#define IR_IDENTIFIER_LIST (&IR_IDENTIFIER_LIST_kind_info)
pIIR_IdentifierList reverse (pIIR_IdentifierList);
struct IIR_Range;
typedef IIR_Range *pIIR_Range;
extern tree_kind_info IR_RANGE_kind_info;
#define IR_RANGE (&IR_RANGE_kind_info)
struct IIR_ExplicitRange;
typedef IIR_ExplicitRange *pIIR_ExplicitRange;
extern tree_kind_info IR_EXPLICIT_RANGE_kind_info;
#define IR_EXPLICIT_RANGE (&IR_EXPLICIT_RANGE_kind_info)
struct IIR_ArrayRange;
typedef IIR_ArrayRange *pIIR_ArrayRange;
extern tree_kind_info IR_ARRAY_RANGE_kind_info;
#define IR_ARRAY_RANGE (&IR_ARRAY_RANGE_kind_info)
struct IIR_Attr_ArrayRANGE;
typedef IIR_Attr_ArrayRANGE *pIIR_Attr_ArrayRANGE;
extern tree_kind_info IR_ATTR_ARRAY_RANGE_kind_info;
#define IR_ATTR_ARRAY_RANGE (&IR_ATTR_ARRAY_RANGE_kind_info)
struct IIR_Attr_ArrayREVERSE_RANGE;
typedef IIR_Attr_ArrayREVERSE_RANGE *pIIR_Attr_ArrayREVERSE_RANGE;
extern tree_kind_info IR_ATTR_ARRAY_REVERSE_RANGE_kind_info;
#define IR_ATTR_ARRAY_REVERSE_RANGE (&IR_ATTR_ARRAY_REVERSE_RANGE_kind_info)
struct IIR_Type;
typedef IIR_Type *pIIR_Type;
extern tree_kind_info IR_TYPE_kind_info;
#define IR_TYPE (&IR_TYPE_kind_info)
struct IIR_Subtype;
typedef IIR_Subtype *pIIR_Subtype;
extern tree_kind_info IR_SUBTYPE_kind_info;
#define IR_SUBTYPE (&IR_SUBTYPE_kind_info)
struct IIR_ScalarType;
typedef IIR_ScalarType *pIIR_ScalarType;
extern tree_kind_info IR_SCALAR_TYPE_kind_info;
#define IR_SCALAR_TYPE (&IR_SCALAR_TYPE_kind_info)
struct IIR_ScalarSubtype;
typedef IIR_ScalarSubtype *pIIR_ScalarSubtype;
extern tree_kind_info IR_SCALAR_SUBTYPE_kind_info;
#define IR_SCALAR_SUBTYPE (&IR_SCALAR_SUBTYPE_kind_info)
struct IIR_EnumerationType;
typedef IIR_EnumerationType *pIIR_EnumerationType;
extern tree_kind_info IR_ENUMERATION_TYPE_kind_info;
#define IR_ENUMERATION_TYPE (&IR_ENUMERATION_TYPE_kind_info)
struct IIR_IntegerType;
typedef IIR_IntegerType *pIIR_IntegerType;
extern tree_kind_info IR_INTEGER_TYPE_kind_info;
#define IR_INTEGER_TYPE (&IR_INTEGER_TYPE_kind_info)
struct IIR_FloatingType;
typedef IIR_FloatingType *pIIR_FloatingType;
extern tree_kind_info IR_FLOATING_TYPE_kind_info;
#define IR_FLOATING_TYPE (&IR_FLOATING_TYPE_kind_info)
struct IIR_PhysicalType;
typedef IIR_PhysicalType *pIIR_PhysicalType;
extern tree_kind_info IR_PHYSICAL_TYPE_kind_info;
#define IR_PHYSICAL_TYPE (&IR_PHYSICAL_TYPE_kind_info)
struct IIR_CompositeType;
typedef IIR_CompositeType *pIIR_CompositeType;
extern tree_kind_info IR_COMPOSITE_TYPE_kind_info;
#define IR_COMPOSITE_TYPE (&IR_COMPOSITE_TYPE_kind_info)
struct IIR_RecordType;
typedef IIR_RecordType *pIIR_RecordType;
extern tree_kind_info IR_RECORD_TYPE_kind_info;
#define IR_RECORD_TYPE (&IR_RECORD_TYPE_kind_info)
struct IIR_RecordSubtype;
typedef IIR_RecordSubtype *pIIR_RecordSubtype;
extern tree_kind_info IR_RECORD_SUBTYPE_kind_info;
#define IR_RECORD_SUBTYPE (&IR_RECORD_SUBTYPE_kind_info)
struct IIR_AccessType;
typedef IIR_AccessType *pIIR_AccessType;
extern tree_kind_info IR_ACCESS_TYPE_kind_info;
#define IR_ACCESS_TYPE (&IR_ACCESS_TYPE_kind_info)
struct IIR_FileType;
typedef IIR_FileType *pIIR_FileType;
extern tree_kind_info IR_FILE_TYPE_kind_info;
#define IR_FILE_TYPE (&IR_FILE_TYPE_kind_info)
struct IIR_ArrayType;
typedef IIR_ArrayType *pIIR_ArrayType;
extern tree_kind_info IR_ARRAY_TYPE_kind_info;
#define IR_ARRAY_TYPE (&IR_ARRAY_TYPE_kind_info)
struct IIR_ArraySubtype;
typedef IIR_ArraySubtype *pIIR_ArraySubtype;
extern tree_kind_info IR_ARRAY_SUBTYPE_kind_info;
#define IR_ARRAY_SUBTYPE (&IR_ARRAY_SUBTYPE_kind_info)
struct IIR_Declaration;
typedef IIR_Declaration *pIIR_Declaration;
extern tree_kind_info IR_DECLARATION_kind_info;
#define IR_DECLARATION (&IR_DECLARATION_kind_info)
struct IIR_DeclarativeRegion;
typedef IIR_DeclarativeRegion *pIIR_DeclarativeRegion;
extern tree_kind_info IR_DECLARATIVE_REGION_kind_info;
#define IR_DECLARATIVE_REGION (&IR_DECLARATIVE_REGION_kind_info)
struct IIR_LoopDeclarativeRegion;
typedef IIR_LoopDeclarativeRegion *pIIR_LoopDeclarativeRegion;
extern tree_kind_info IR_LOOP_DECLARATIVE_REGION_kind_info;
#define IR_LOOP_DECLARATIVE_REGION (&IR_LOOP_DECLARATIVE_REGION_kind_info)
struct IIR_SubprogramDeclaration;
typedef IIR_SubprogramDeclaration *pIIR_SubprogramDeclaration;
extern tree_kind_info IR_SUBPROGRAM_DECLARATION_kind_info;
#define IR_SUBPROGRAM_DECLARATION (&IR_SUBPROGRAM_DECLARATION_kind_info)
struct IIR_ProcedureDeclaration;
typedef IIR_ProcedureDeclaration *pIIR_ProcedureDeclaration;
extern tree_kind_info IR_PROCEDURE_DECLARATION_kind_info;
#define IR_PROCEDURE_DECLARATION (&IR_PROCEDURE_DECLARATION_kind_info)
struct IIR_PredefinedProcedureDeclaration;
typedef IIR_PredefinedProcedureDeclaration *pIIR_PredefinedProcedureDeclaration;
extern tree_kind_info IR_PREDEFINED_PROCEDURE_DECLARATION_kind_info;
#define IR_PREDEFINED_PROCEDURE_DECLARATION (&IR_PREDEFINED_PROCEDURE_DECLARATION_kind_info)
struct IIR_FunctionDeclaration;
typedef IIR_FunctionDeclaration *pIIR_FunctionDeclaration;
extern tree_kind_info IR_FUNCTION_DECLARATION_kind_info;
#define IR_FUNCTION_DECLARATION (&IR_FUNCTION_DECLARATION_kind_info)
struct IIR_PredefinedFunctionDeclaration;
typedef IIR_PredefinedFunctionDeclaration *pIIR_PredefinedFunctionDeclaration;
extern tree_kind_info IR_PREDEFINED_FUNCTION_DECLARATION_kind_info;
#define IR_PREDEFINED_FUNCTION_DECLARATION (&IR_PREDEFINED_FUNCTION_DECLARATION_kind_info)
struct IIR_EnumerationLiteral;
typedef IIR_EnumerationLiteral *pIIR_EnumerationLiteral;
extern tree_kind_info IR_ENUMERATION_LITERAL_kind_info;
#define IR_ENUMERATION_LITERAL (&IR_ENUMERATION_LITERAL_kind_info)
struct IIR_ElementDeclaration;
typedef IIR_ElementDeclaration *pIIR_ElementDeclaration;
extern tree_kind_info IR_ELEMENT_DECLARATION_kind_info;
#define IR_ELEMENT_DECLARATION (&IR_ELEMENT_DECLARATION_kind_info)
struct IIR_TypeDeclaration;
typedef IIR_TypeDeclaration *pIIR_TypeDeclaration;
extern tree_kind_info IR_TYPE_DECLARATION_kind_info;
#define IR_TYPE_DECLARATION (&IR_TYPE_DECLARATION_kind_info)
struct IIR_SubtypeDeclaration;
typedef IIR_SubtypeDeclaration *pIIR_SubtypeDeclaration;
extern tree_kind_info IR_SUBTYPE_DECLARATION_kind_info;
#define IR_SUBTYPE_DECLARATION (&IR_SUBTYPE_DECLARATION_kind_info)
struct IIR_ObjectDeclaration;
typedef IIR_ObjectDeclaration *pIIR_ObjectDeclaration;
extern tree_kind_info IR_OBJECT_DECLARATION_kind_info;
#define IR_OBJECT_DECLARATION (&IR_OBJECT_DECLARATION_kind_info)
struct IIR_ConstantDeclaration;
typedef IIR_ConstantDeclaration *pIIR_ConstantDeclaration;
extern tree_kind_info IR_CONSTANT_DECLARATION_kind_info;
#define IR_CONSTANT_DECLARATION (&IR_CONSTANT_DECLARATION_kind_info)
struct IIR_VariableDeclaration;
typedef IIR_VariableDeclaration *pIIR_VariableDeclaration;
extern tree_kind_info IR_VARIABLE_DECLARATION_kind_info;
#define IR_VARIABLE_DECLARATION (&IR_VARIABLE_DECLARATION_kind_info)
struct IIR_SharedVariableDeclaration;
typedef IIR_SharedVariableDeclaration *pIIR_SharedVariableDeclaration;
extern tree_kind_info IR_SHARED_VARIABLE_DECLARATION_kind_info;
#define IR_SHARED_VARIABLE_DECLARATION (&IR_SHARED_VARIABLE_DECLARATION_kind_info)
struct IIR_SignalDeclaration;
typedef IIR_SignalDeclaration *pIIR_SignalDeclaration;
extern tree_kind_info IR_SIGNAL_DECLARATION_kind_info;
#define IR_SIGNAL_DECLARATION (&IR_SIGNAL_DECLARATION_kind_info)
struct IIR_FileDeclaration;
typedef IIR_FileDeclaration *pIIR_FileDeclaration;
extern tree_kind_info IR_FILE_DECLARATION_kind_info;
#define IR_FILE_DECLARATION (&IR_FILE_DECLARATION_kind_info)
struct IIR_InterfaceDeclaration;
typedef IIR_InterfaceDeclaration *pIIR_InterfaceDeclaration;
extern tree_kind_info IR_INTERFACE_DECLARATION_kind_info;
#define IR_INTERFACE_DECLARATION (&IR_INTERFACE_DECLARATION_kind_info)
struct IIR_ConstantInterfaceDeclaration;
typedef IIR_ConstantInterfaceDeclaration *pIIR_ConstantInterfaceDeclaration;
extern tree_kind_info IR_CONSTANT_INTERFACE_DECLARATION_kind_info;
#define IR_CONSTANT_INTERFACE_DECLARATION (&IR_CONSTANT_INTERFACE_DECLARATION_kind_info)
struct IIR_VariableInterfaceDeclaration;
typedef IIR_VariableInterfaceDeclaration *pIIR_VariableInterfaceDeclaration;
extern tree_kind_info IR_VARIABLE_INTERFACE_DECLARATION_kind_info;
#define IR_VARIABLE_INTERFACE_DECLARATION (&IR_VARIABLE_INTERFACE_DECLARATION_kind_info)
struct IIR_SignalInterfaceDeclaration;
typedef IIR_SignalInterfaceDeclaration *pIIR_SignalInterfaceDeclaration;
extern tree_kind_info IR_SIGNAL_INTERFACE_DECLARATION_kind_info;
#define IR_SIGNAL_INTERFACE_DECLARATION (&IR_SIGNAL_INTERFACE_DECLARATION_kind_info)
struct IIR_FileInterfaceDeclaration;
typedef IIR_FileInterfaceDeclaration *pIIR_FileInterfaceDeclaration;
extern tree_kind_info IR_FILE_INTERFACE_DECLARATION_kind_info;
#define IR_FILE_INTERFACE_DECLARATION (&IR_FILE_INTERFACE_DECLARATION_kind_info)
struct IIR_AttributeDeclaration;
typedef IIR_AttributeDeclaration *pIIR_AttributeDeclaration;
extern tree_kind_info IR_ATTRIBUTE_DECLARATION_kind_info;
#define IR_ATTRIBUTE_DECLARATION (&IR_ATTRIBUTE_DECLARATION_kind_info)
struct IIR_ComponentDeclaration;
typedef IIR_ComponentDeclaration *pIIR_ComponentDeclaration;
extern tree_kind_info IR_COMPONENT_DECLARATION_kind_info;
#define IR_COMPONENT_DECLARATION (&IR_COMPONENT_DECLARATION_kind_info)
struct IIR_LibraryDeclaration;
typedef IIR_LibraryDeclaration *pIIR_LibraryDeclaration;
extern tree_kind_info IR_LIBRARY_DECLARATION_kind_info;
#define IR_LIBRARY_DECLARATION (&IR_LIBRARY_DECLARATION_kind_info)
struct IIR_LibraryUnit;
typedef IIR_LibraryUnit *pIIR_LibraryUnit;
extern tree_kind_info IR_LIBRARY_UNIT_kind_info;
#define IR_LIBRARY_UNIT (&IR_LIBRARY_UNIT_kind_info)
struct IIR_EntityDeclaration;
typedef IIR_EntityDeclaration *pIIR_EntityDeclaration;
extern tree_kind_info IR_ENTITY_DECLARATION_kind_info;
#define IR_ENTITY_DECLARATION (&IR_ENTITY_DECLARATION_kind_info)
struct IIR_ArchitectureDeclaration;
typedef IIR_ArchitectureDeclaration *pIIR_ArchitectureDeclaration;
extern tree_kind_info IR_ARCHITECTURE_DECLARATION_kind_info;
#define IR_ARCHITECTURE_DECLARATION (&IR_ARCHITECTURE_DECLARATION_kind_info)
struct IIR_ArchitectureRef;
typedef IIR_ArchitectureRef *pIIR_ArchitectureRef;
extern tree_kind_info IR_ARCHITECTURE_REF_kind_info;
#define IR_ARCHITECTURE_REF (&IR_ARCHITECTURE_REF_kind_info)
struct IIR_PackageDeclaration;
typedef IIR_PackageDeclaration *pIIR_PackageDeclaration;
extern tree_kind_info IR_PACKAGE_DECLARATION_kind_info;
#define IR_PACKAGE_DECLARATION (&IR_PACKAGE_DECLARATION_kind_info)
struct IIR_PackageBodyDeclaration;
typedef IIR_PackageBodyDeclaration *pIIR_PackageBodyDeclaration;
extern tree_kind_info IR_PACKAGE_BODY_DECLARATION_kind_info;
#define IR_PACKAGE_BODY_DECLARATION (&IR_PACKAGE_BODY_DECLARATION_kind_info)
struct IIR_ConfigurationDeclaration;
typedef IIR_ConfigurationDeclaration *pIIR_ConfigurationDeclaration;
extern tree_kind_info IR_CONFIGURATION_DECLARATION_kind_info;
#define IR_CONFIGURATION_DECLARATION (&IR_CONFIGURATION_DECLARATION_kind_info)
struct IIR_ConfigurationItem;
typedef IIR_ConfigurationItem *pIIR_ConfigurationItem;
extern tree_kind_info IR_CONFIGURATION_ITEM_kind_info;
#define IR_CONFIGURATION_ITEM (&IR_CONFIGURATION_ITEM_kind_info)
struct IIR_BlockConfiguration;
typedef IIR_BlockConfiguration *pIIR_BlockConfiguration;
extern tree_kind_info IR_BLOCK_CONFIGURATION_kind_info;
#define IR_BLOCK_CONFIGURATION (&IR_BLOCK_CONFIGURATION_kind_info)
struct IIR_ComponentConfiguration;
typedef IIR_ComponentConfiguration *pIIR_ComponentConfiguration;
extern tree_kind_info IR_COMPONENT_CONFIGURATION_kind_info;
#define IR_COMPONENT_CONFIGURATION (&IR_COMPONENT_CONFIGURATION_kind_info)
struct IIR_PhysicalUnit;
typedef IIR_PhysicalUnit *pIIR_PhysicalUnit;
extern tree_kind_info IR_PHYSICAL_UNIT_kind_info;
#define IR_PHYSICAL_UNIT (&IR_PHYSICAL_UNIT_kind_info)
struct IIR_BindingIndication;
typedef IIR_BindingIndication *pIIR_BindingIndication;
extern tree_kind_info IR_BINDING_INDICATION_kind_info;
#define IR_BINDING_INDICATION (&IR_BINDING_INDICATION_kind_info)
struct IIR_ConfigurationSpecification;
typedef IIR_ConfigurationSpecification *pIIR_ConfigurationSpecification;
extern tree_kind_info IR_CONFIGURATION_SPECIFICATION_kind_info;
#define IR_CONFIGURATION_SPECIFICATION (&IR_CONFIGURATION_SPECIFICATION_kind_info)
struct IIR_DisconnectSpecification;
typedef IIR_DisconnectSpecification *pIIR_DisconnectSpecification;
extern tree_kind_info IR_DISCONNECT_SPECIFICATION_kind_info;
#define IR_DISCONNECT_SPECIFICATION (&IR_DISCONNECT_SPECIFICATION_kind_info)
struct IIR_Label;
typedef IIR_Label *pIIR_Label;
extern tree_kind_info IR_LABEL_kind_info;
#define IR_LABEL (&IR_LABEL_kind_info)
struct IIR_LibraryClause;
typedef IIR_LibraryClause *pIIR_LibraryClause;
extern tree_kind_info IR_LIBRARY_CLAUSE_kind_info;
#define IR_LIBRARY_CLAUSE (&IR_LIBRARY_CLAUSE_kind_info)
struct IIR_UseClause;
typedef IIR_UseClause *pIIR_UseClause;
extern tree_kind_info IR_USE_CLAUSE_kind_info;
#define IR_USE_CLAUSE (&IR_USE_CLAUSE_kind_info)
struct IIR_Expression;
typedef IIR_Expression *pIIR_Expression;
extern tree_kind_info IR_EXPRESSION_kind_info;
#define IR_EXPRESSION (&IR_EXPRESSION_kind_info)
struct IIR_AbstractLiteralExpression;
typedef IIR_AbstractLiteralExpression *pIIR_AbstractLiteralExpression;
extern tree_kind_info IR_ABSTRACT_LITERAL_EXPRESSION_kind_info;
#define IR_ABSTRACT_LITERAL_EXPRESSION (&IR_ABSTRACT_LITERAL_EXPRESSION_kind_info)
struct IIR_PhysicalLiteral;
typedef IIR_PhysicalLiteral *pIIR_PhysicalLiteral;
extern tree_kind_info IR_PHYSICAL_LITERAL_kind_info;
#define IR_PHYSICAL_LITERAL (&IR_PHYSICAL_LITERAL_kind_info)
struct IIR_ArrayLiteralExpression;
typedef IIR_ArrayLiteralExpression *pIIR_ArrayLiteralExpression;
extern tree_kind_info IR_ARRAY_LITERAL_EXPRESSION_kind_info;
#define IR_ARRAY_LITERAL_EXPRESSION (&IR_ARRAY_LITERAL_EXPRESSION_kind_info)
struct IIR_EnumLiteralReference;
typedef IIR_EnumLiteralReference *pIIR_EnumLiteralReference;
extern tree_kind_info IR_ENUM_LITERAL_REFERENCE_kind_info;
#define IR_ENUM_LITERAL_REFERENCE (&IR_ENUM_LITERAL_REFERENCE_kind_info)
struct IIR_NullExpression;
typedef IIR_NullExpression *pIIR_NullExpression;
extern tree_kind_info IR_NULL_EXPRESSION_kind_info;
#define IR_NULL_EXPRESSION (&IR_NULL_EXPRESSION_kind_info)
struct IIR_Aggregate;
typedef IIR_Aggregate *pIIR_Aggregate;
extern tree_kind_info IR_AGGREGATE_kind_info;
#define IR_AGGREGATE (&IR_AGGREGATE_kind_info)
struct IIR_RecordAggregate;
typedef IIR_RecordAggregate *pIIR_RecordAggregate;
extern tree_kind_info IR_RECORD_AGGREGATE_kind_info;
#define IR_RECORD_AGGREGATE (&IR_RECORD_AGGREGATE_kind_info)
struct IIR_ArtificialRecordAggregate;
typedef IIR_ArtificialRecordAggregate *pIIR_ArtificialRecordAggregate;
extern tree_kind_info IR_ARTIFICIAL_RECORD_AGGREGATE_kind_info;
#define IR_ARTIFICIAL_RECORD_AGGREGATE (&IR_ARTIFICIAL_RECORD_AGGREGATE_kind_info)
struct IIR_ArrayAggregate;
typedef IIR_ArrayAggregate *pIIR_ArrayAggregate;
extern tree_kind_info IR_ARRAY_AGGREGATE_kind_info;
#define IR_ARRAY_AGGREGATE (&IR_ARRAY_AGGREGATE_kind_info)
struct IIR_ArtificialArrayAggregate;
typedef IIR_ArtificialArrayAggregate *pIIR_ArtificialArrayAggregate;
extern tree_kind_info IR_ARTIFICIAL_ARRAY_AGGREGATE_kind_info;
#define IR_ARTIFICIAL_ARRAY_AGGREGATE (&IR_ARTIFICIAL_ARRAY_AGGREGATE_kind_info)
struct IIR_FunctionCall;
typedef IIR_FunctionCall *pIIR_FunctionCall;
extern tree_kind_info IR_FUNCTION_CALL_kind_info;
#define IR_FUNCTION_CALL (&IR_FUNCTION_CALL_kind_info)
struct IIR_QualifiedExpression;
typedef IIR_QualifiedExpression *pIIR_QualifiedExpression;
extern tree_kind_info IR_QUALIFIED_EXPRESSION_kind_info;
#define IR_QUALIFIED_EXPRESSION (&IR_QUALIFIED_EXPRESSION_kind_info)
struct IIR_TypeConversion;
typedef IIR_TypeConversion *pIIR_TypeConversion;
extern tree_kind_info IR_TYPE_CONVERSION_kind_info;
#define IR_TYPE_CONVERSION (&IR_TYPE_CONVERSION_kind_info)
struct IIR_Allocator;
typedef IIR_Allocator *pIIR_Allocator;
extern tree_kind_info IR_ALLOCATOR_kind_info;
#define IR_ALLOCATOR (&IR_ALLOCATOR_kind_info)
struct IIR_OpenExpression;
typedef IIR_OpenExpression *pIIR_OpenExpression;
extern tree_kind_info IR_OPEN_EXPRESSION_kind_info;
#define IR_OPEN_EXPRESSION (&IR_OPEN_EXPRESSION_kind_info)
struct IIR_ObjectReference;
typedef IIR_ObjectReference *pIIR_ObjectReference;
extern tree_kind_info IR_OBJECT_REFERENCE_kind_info;
#define IR_OBJECT_REFERENCE (&IR_OBJECT_REFERENCE_kind_info)
struct IIR_SimpleReference;
typedef IIR_SimpleReference *pIIR_SimpleReference;
extern tree_kind_info IR_SIMPLE_REFERENCE_kind_info;
#define IR_SIMPLE_REFERENCE (&IR_SIMPLE_REFERENCE_kind_info)
struct IIR_AccessReference;
typedef IIR_AccessReference *pIIR_AccessReference;
extern tree_kind_info IR_ACCESS_REFERENCE_kind_info;
#define IR_ACCESS_REFERENCE (&IR_ACCESS_REFERENCE_kind_info)
struct IIR_RecordReference;
typedef IIR_RecordReference *pIIR_RecordReference;
extern tree_kind_info IR_RECORD_REFERENCE_kind_info;
#define IR_RECORD_REFERENCE (&IR_RECORD_REFERENCE_kind_info)
struct IIR_GenericArrayReference;
typedef IIR_GenericArrayReference *pIIR_GenericArrayReference;
extern tree_kind_info IR_GENERIC_ARRAY_REFERENCE_kind_info;
#define IR_GENERIC_ARRAY_REFERENCE (&IR_GENERIC_ARRAY_REFERENCE_kind_info)
struct IIR_ArrayReference;
typedef IIR_ArrayReference *pIIR_ArrayReference;
extern tree_kind_info IR_ARRAY_REFERENCE_kind_info;
#define IR_ARRAY_REFERENCE (&IR_ARRAY_REFERENCE_kind_info)
struct IIR_SliceReference;
typedef IIR_SliceReference *pIIR_SliceReference;
extern tree_kind_info IR_SLICE_REFERENCE_kind_info;
#define IR_SLICE_REFERENCE (&IR_SLICE_REFERENCE_kind_info)
struct IIR_SignalAttr;
typedef IIR_SignalAttr *pIIR_SignalAttr;
extern tree_kind_info IR_SIGNAL_ATTR_kind_info;
#define IR_SIGNAL_ATTR (&IR_SIGNAL_ATTR_kind_info)
struct IIR_Attr_DELAYED;
typedef IIR_Attr_DELAYED *pIIR_Attr_DELAYED;
extern tree_kind_info IR_ATTR_DELAYED_kind_info;
#define IR_ATTR_DELAYED (&IR_ATTR_DELAYED_kind_info)
struct IIR_Attr_STABLE;
typedef IIR_Attr_STABLE *pIIR_Attr_STABLE;
extern tree_kind_info IR_ATTR_STABLE_kind_info;
#define IR_ATTR_STABLE (&IR_ATTR_STABLE_kind_info)
struct IIR_Attr_QUIET;
typedef IIR_Attr_QUIET *pIIR_Attr_QUIET;
extern tree_kind_info IR_ATTR_QUIET_kind_info;
#define IR_ATTR_QUIET (&IR_ATTR_QUIET_kind_info)
struct IIR_Attr_TRANSACTION;
typedef IIR_Attr_TRANSACTION *pIIR_Attr_TRANSACTION;
extern tree_kind_info IR_ATTR_TRANSACTION_kind_info;
#define IR_ATTR_TRANSACTION (&IR_ATTR_TRANSACTION_kind_info)
struct IIR_FunctionAttr;
typedef IIR_FunctionAttr *pIIR_FunctionAttr;
extern tree_kind_info IR_FUNCTION_ATTR_kind_info;
#define IR_FUNCTION_ATTR (&IR_FUNCTION_ATTR_kind_info)
struct IIR_AttrSigFunc;
typedef IIR_AttrSigFunc *pIIR_AttrSigFunc;
extern tree_kind_info IR_ATTR_SIG_FUNC_kind_info;
#define IR_ATTR_SIG_FUNC (&IR_ATTR_SIG_FUNC_kind_info)
struct IIR_Attr_EVENT;
typedef IIR_Attr_EVENT *pIIR_Attr_EVENT;
extern tree_kind_info IR_ATTR_EVENT_kind_info;
#define IR_ATTR_EVENT (&IR_ATTR_EVENT_kind_info)
struct IIR_Attr_ACTIVE;
typedef IIR_Attr_ACTIVE *pIIR_Attr_ACTIVE;
extern tree_kind_info IR_ATTR_ACTIVE_kind_info;
#define IR_ATTR_ACTIVE (&IR_ATTR_ACTIVE_kind_info)
struct IIR_Attr_LAST_EVENT;
typedef IIR_Attr_LAST_EVENT *pIIR_Attr_LAST_EVENT;
extern tree_kind_info IR_ATTR_LAST_EVENT_kind_info;
#define IR_ATTR_LAST_EVENT (&IR_ATTR_LAST_EVENT_kind_info)
struct IIR_Attr_LAST_ACTIVE;
typedef IIR_Attr_LAST_ACTIVE *pIIR_Attr_LAST_ACTIVE;
extern tree_kind_info IR_ATTR_LAST_ACTIVE_kind_info;
#define IR_ATTR_LAST_ACTIVE (&IR_ATTR_LAST_ACTIVE_kind_info)
struct IIR_Attr_LAST_VALUE;
typedef IIR_Attr_LAST_VALUE *pIIR_Attr_LAST_VALUE;
extern tree_kind_info IR_ATTR_LAST_VALUE_kind_info;
#define IR_ATTR_LAST_VALUE (&IR_ATTR_LAST_VALUE_kind_info)
struct IIR_Attr_DRIVING;
typedef IIR_Attr_DRIVING *pIIR_Attr_DRIVING;
extern tree_kind_info IR_ATTR_DRIVING_kind_info;
#define IR_ATTR_DRIVING (&IR_ATTR_DRIVING_kind_info)
struct IIR_Attr_DRIVING_VALUE;
typedef IIR_Attr_DRIVING_VALUE *pIIR_Attr_DRIVING_VALUE;
extern tree_kind_info IR_ATTR_DRIVING_VALUE_kind_info;
#define IR_ATTR_DRIVING_VALUE (&IR_ATTR_DRIVING_VALUE_kind_info)
struct IIR_ValueAttr;
typedef IIR_ValueAttr *pIIR_ValueAttr;
extern tree_kind_info IR_VALUE_ATTR_kind_info;
#define IR_VALUE_ATTR (&IR_VALUE_ATTR_kind_info)
struct IIR_AttrTypeValue;
typedef IIR_AttrTypeValue *pIIR_AttrTypeValue;
extern tree_kind_info IR_ATTR_TYPE_VALUE_kind_info;
#define IR_ATTR_TYPE_VALUE (&IR_ATTR_TYPE_VALUE_kind_info)
struct IIR_Attr_LEFT;
typedef IIR_Attr_LEFT *pIIR_Attr_LEFT;
extern tree_kind_info IR_ATTR_LEFT_kind_info;
#define IR_ATTR_LEFT (&IR_ATTR_LEFT_kind_info)
struct IIR_Attr_RIGHT;
typedef IIR_Attr_RIGHT *pIIR_Attr_RIGHT;
extern tree_kind_info IR_ATTR_RIGHT_kind_info;
#define IR_ATTR_RIGHT (&IR_ATTR_RIGHT_kind_info)
struct IIR_Attr_LOW;
typedef IIR_Attr_LOW *pIIR_Attr_LOW;
extern tree_kind_info IR_ATTR_LOW_kind_info;
#define IR_ATTR_LOW (&IR_ATTR_LOW_kind_info)
struct IIR_Attr_HIGH;
typedef IIR_Attr_HIGH *pIIR_Attr_HIGH;
extern tree_kind_info IR_ATTR_HIGH_kind_info;
#define IR_ATTR_HIGH (&IR_ATTR_HIGH_kind_info)
struct IIR_Attr_ASCENDING;
typedef IIR_Attr_ASCENDING *pIIR_Attr_ASCENDING;
extern tree_kind_info IR_ATTR_ASCENDING_kind_info;
#define IR_ATTR_ASCENDING (&IR_ATTR_ASCENDING_kind_info)
struct IIR_Attr_LENGTH;
typedef IIR_Attr_LENGTH *pIIR_Attr_LENGTH;
extern tree_kind_info IR_ATTR_LENGTH_kind_info;
#define IR_ATTR_LENGTH (&IR_ATTR_LENGTH_kind_info)
struct IIR_AttrTypeFunc;
typedef IIR_AttrTypeFunc *pIIR_AttrTypeFunc;
extern tree_kind_info IR_ATTR_TYPE_FUNC_kind_info;
#define IR_ATTR_TYPE_FUNC (&IR_ATTR_TYPE_FUNC_kind_info)
struct IIR_Attr_IMAGE;
typedef IIR_Attr_IMAGE *pIIR_Attr_IMAGE;
extern tree_kind_info IR_ATTR_IMAGE_kind_info;
#define IR_ATTR_IMAGE (&IR_ATTR_IMAGE_kind_info)
struct IIR_Attr_VALUE;
typedef IIR_Attr_VALUE *pIIR_Attr_VALUE;
extern tree_kind_info IR_ATTR_VALUE_kind_info;
#define IR_ATTR_VALUE (&IR_ATTR_VALUE_kind_info)
struct IIR_Attr_POS;
typedef IIR_Attr_POS *pIIR_Attr_POS;
extern tree_kind_info IR_ATTR_POS_kind_info;
#define IR_ATTR_POS (&IR_ATTR_POS_kind_info)
struct IIR_Attr_VAL;
typedef IIR_Attr_VAL *pIIR_Attr_VAL;
extern tree_kind_info IR_ATTR_VAL_kind_info;
#define IR_ATTR_VAL (&IR_ATTR_VAL_kind_info)
struct IIR_Attr_SUCC;
typedef IIR_Attr_SUCC *pIIR_Attr_SUCC;
extern tree_kind_info IR_ATTR_SUCC_kind_info;
#define IR_ATTR_SUCC (&IR_ATTR_SUCC_kind_info)
struct IIR_Attr_PRED;
typedef IIR_Attr_PRED *pIIR_Attr_PRED;
extern tree_kind_info IR_ATTR_PRED_kind_info;
#define IR_ATTR_PRED (&IR_ATTR_PRED_kind_info)
struct IIR_Attr_LEFTOF;
typedef IIR_Attr_LEFTOF *pIIR_Attr_LEFTOF;
extern tree_kind_info IR_ATTR_LEFTOF_kind_info;
#define IR_ATTR_LEFTOF (&IR_ATTR_LEFTOF_kind_info)
struct IIR_Attr_RIGHTOF;
typedef IIR_Attr_RIGHTOF *pIIR_Attr_RIGHTOF;
extern tree_kind_info IR_ATTR_RIGHTOF_kind_info;
#define IR_ATTR_RIGHTOF (&IR_ATTR_RIGHTOF_kind_info)
struct IIR_AttrArrayFunc;
typedef IIR_AttrArrayFunc *pIIR_AttrArrayFunc;
extern tree_kind_info IR_ATTR_ARRAY_FUNC_kind_info;
#define IR_ATTR_ARRAY_FUNC (&IR_ATTR_ARRAY_FUNC_kind_info)
struct IIR_Attr_ArrayLEFT;
typedef IIR_Attr_ArrayLEFT *pIIR_Attr_ArrayLEFT;
extern tree_kind_info IR_ATTR_ARRAY_LEFT_kind_info;
#define IR_ATTR_ARRAY_LEFT (&IR_ATTR_ARRAY_LEFT_kind_info)
struct IIR_Attr_ArrayRIGHT;
typedef IIR_Attr_ArrayRIGHT *pIIR_Attr_ArrayRIGHT;
extern tree_kind_info IR_ATTR_ARRAY_RIGHT_kind_info;
#define IR_ATTR_ARRAY_RIGHT (&IR_ATTR_ARRAY_RIGHT_kind_info)
struct IIR_Attr_ArrayHIGH;
typedef IIR_Attr_ArrayHIGH *pIIR_Attr_ArrayHIGH;
extern tree_kind_info IR_ATTR_ARRAY_HIGH_kind_info;
#define IR_ATTR_ARRAY_HIGH (&IR_ATTR_ARRAY_HIGH_kind_info)
struct IIR_Attr_ArrayLOW;
typedef IIR_Attr_ArrayLOW *pIIR_Attr_ArrayLOW;
extern tree_kind_info IR_ATTR_ARRAY_LOW_kind_info;
#define IR_ATTR_ARRAY_LOW (&IR_ATTR_ARRAY_LOW_kind_info)
struct IIR_Attr_ArrayASCENDING;
typedef IIR_Attr_ArrayASCENDING *pIIR_Attr_ArrayASCENDING;
extern tree_kind_info IR_ATTR_ARRAY_ASCENDING_kind_info;
#define IR_ATTR_ARRAY_ASCENDING (&IR_ATTR_ARRAY_ASCENDING_kind_info)
struct IIR_Attr_ArrayLENGTH;
typedef IIR_Attr_ArrayLENGTH *pIIR_Attr_ArrayLENGTH;
extern tree_kind_info IR_ATTR_ARRAY_LENGTH_kind_info;
#define IR_ATTR_ARRAY_LENGTH (&IR_ATTR_ARRAY_LENGTH_kind_info)
struct IIR_SequentialStatement;
typedef IIR_SequentialStatement *pIIR_SequentialStatement;
extern tree_kind_info IR_SEQUENTIAL_STATEMENT_kind_info;
#define IR_SEQUENTIAL_STATEMENT (&IR_SEQUENTIAL_STATEMENT_kind_info)
struct IIR_WaitStatement;
typedef IIR_WaitStatement *pIIR_WaitStatement;
extern tree_kind_info IR_WAIT_STATEMENT_kind_info;
#define IR_WAIT_STATEMENT (&IR_WAIT_STATEMENT_kind_info)
struct IIR_AssertionStatement;
typedef IIR_AssertionStatement *pIIR_AssertionStatement;
extern tree_kind_info IR_ASSERTION_STATEMENT_kind_info;
#define IR_ASSERTION_STATEMENT (&IR_ASSERTION_STATEMENT_kind_info)
struct IIR_ReportStatement;
typedef IIR_ReportStatement *pIIR_ReportStatement;
extern tree_kind_info IR_REPORT_STATEMENT_kind_info;
#define IR_REPORT_STATEMENT (&IR_REPORT_STATEMENT_kind_info)
struct IIR_SignalAssignmentStatement;
typedef IIR_SignalAssignmentStatement *pIIR_SignalAssignmentStatement;
extern tree_kind_info IR_SIGNAL_ASSIGNMENT_STATEMENT_kind_info;
#define IR_SIGNAL_ASSIGNMENT_STATEMENT (&IR_SIGNAL_ASSIGNMENT_STATEMENT_kind_info)
struct IIR_VariableAssignmentStatement;
typedef IIR_VariableAssignmentStatement *pIIR_VariableAssignmentStatement;
extern tree_kind_info IR_VARIABLE_ASSIGNMENT_STATEMENT_kind_info;
#define IR_VARIABLE_ASSIGNMENT_STATEMENT (&IR_VARIABLE_ASSIGNMENT_STATEMENT_kind_info)
struct IIR_ProcedureCallStatement;
typedef IIR_ProcedureCallStatement *pIIR_ProcedureCallStatement;
extern tree_kind_info IR_PROCEDURE_CALL_STATEMENT_kind_info;
#define IR_PROCEDURE_CALL_STATEMENT (&IR_PROCEDURE_CALL_STATEMENT_kind_info)
struct IIR_IfStatement;
typedef IIR_IfStatement *pIIR_IfStatement;
extern tree_kind_info IR_IF_STATEMENT_kind_info;
#define IR_IF_STATEMENT (&IR_IF_STATEMENT_kind_info)
struct IIR_CaseStatement;
typedef IIR_CaseStatement *pIIR_CaseStatement;
extern tree_kind_info IR_CASE_STATEMENT_kind_info;
#define IR_CASE_STATEMENT (&IR_CASE_STATEMENT_kind_info)
struct IIR_LoopStatement;
typedef IIR_LoopStatement *pIIR_LoopStatement;
extern tree_kind_info IR_LOOP_STATEMENT_kind_info;
#define IR_LOOP_STATEMENT (&IR_LOOP_STATEMENT_kind_info)
struct IIR_ForLoopStatement;
typedef IIR_ForLoopStatement *pIIR_ForLoopStatement;
extern tree_kind_info IR_FOR_LOOP_STATEMENT_kind_info;
#define IR_FOR_LOOP_STATEMENT (&IR_FOR_LOOP_STATEMENT_kind_info)
struct IIR_WhileLoopStatement;
typedef IIR_WhileLoopStatement *pIIR_WhileLoopStatement;
extern tree_kind_info IR_WHILE_LOOP_STATEMENT_kind_info;
#define IR_WHILE_LOOP_STATEMENT (&IR_WHILE_LOOP_STATEMENT_kind_info)
struct IIR_LoopControlStatement;
typedef IIR_LoopControlStatement *pIIR_LoopControlStatement;
extern tree_kind_info IR_LOOP_CONTROL_STATEMENT_kind_info;
#define IR_LOOP_CONTROL_STATEMENT (&IR_LOOP_CONTROL_STATEMENT_kind_info)
struct IIR_NextStatement;
typedef IIR_NextStatement *pIIR_NextStatement;
extern tree_kind_info IR_NEXT_STATEMENT_kind_info;
#define IR_NEXT_STATEMENT (&IR_NEXT_STATEMENT_kind_info)
struct IIR_ExitStatement;
typedef IIR_ExitStatement *pIIR_ExitStatement;
extern tree_kind_info IR_EXIT_STATEMENT_kind_info;
#define IR_EXIT_STATEMENT (&IR_EXIT_STATEMENT_kind_info)
struct IIR_ReturnStatement;
typedef IIR_ReturnStatement *pIIR_ReturnStatement;
extern tree_kind_info IR_RETURN_STATEMENT_kind_info;
#define IR_RETURN_STATEMENT (&IR_RETURN_STATEMENT_kind_info)
struct IIR_NullStatement;
typedef IIR_NullStatement *pIIR_NullStatement;
extern tree_kind_info IR_NULL_STATEMENT_kind_info;
#define IR_NULL_STATEMENT (&IR_NULL_STATEMENT_kind_info)
struct IIR_ConcurrentStatement;
typedef IIR_ConcurrentStatement *pIIR_ConcurrentStatement;
extern tree_kind_info IR_CONCURRENT_STATEMENT_kind_info;
#define IR_CONCURRENT_STATEMENT (&IR_CONCURRENT_STATEMENT_kind_info)
struct IIR_BlockStatement;
typedef IIR_BlockStatement *pIIR_BlockStatement;
extern tree_kind_info IR_BLOCK_STATEMENT_kind_info;
#define IR_BLOCK_STATEMENT (&IR_BLOCK_STATEMENT_kind_info)
struct IIR_ProcessStatement;
typedef IIR_ProcessStatement *pIIR_ProcessStatement;
extern tree_kind_info IR_PROCESS_STATEMENT_kind_info;
#define IR_PROCESS_STATEMENT (&IR_PROCESS_STATEMENT_kind_info)
struct IIR_ImplicitProcessStatement;
typedef IIR_ImplicitProcessStatement *pIIR_ImplicitProcessStatement;
extern tree_kind_info IR_IMPLICIT_PROCESS_STATEMENT_kind_info;
#define IR_IMPLICIT_PROCESS_STATEMENT (&IR_IMPLICIT_PROCESS_STATEMENT_kind_info)
struct IIR_SensitizedProcessStatement;
typedef IIR_SensitizedProcessStatement *pIIR_SensitizedProcessStatement;
extern tree_kind_info IR_SENSITIZED_PROCESS_STATEMENT_kind_info;
#define IR_SENSITIZED_PROCESS_STATEMENT (&IR_SENSITIZED_PROCESS_STATEMENT_kind_info)
struct IIR_ComponentInstantiationStatement;
typedef IIR_ComponentInstantiationStatement *pIIR_ComponentInstantiationStatement;
extern tree_kind_info IR_COMPONENT_INSTANTIATION_STATEMENT_kind_info;
#define IR_COMPONENT_INSTANTIATION_STATEMENT (&IR_COMPONENT_INSTANTIATION_STATEMENT_kind_info)
struct IIR_ConcurrentGenerateStatement;
typedef IIR_ConcurrentGenerateStatement *pIIR_ConcurrentGenerateStatement;
extern tree_kind_info IR_CONCURRENT_GENERATE_STATEMENT_kind_info;
#define IR_CONCURRENT_GENERATE_STATEMENT (&IR_CONCURRENT_GENERATE_STATEMENT_kind_info)
struct IIR_ConcurrentGenerateForStatement;
typedef IIR_ConcurrentGenerateForStatement *pIIR_ConcurrentGenerateForStatement;
extern tree_kind_info IR_CONCURRENT_GENERATE_FOR_STATEMENT_kind_info;
#define IR_CONCURRENT_GENERATE_FOR_STATEMENT (&IR_CONCURRENT_GENERATE_FOR_STATEMENT_kind_info)
struct IIR_ConcurrentGenerateIfStatement;
typedef IIR_ConcurrentGenerateIfStatement *pIIR_ConcurrentGenerateIfStatement;
extern tree_kind_info IR_CONCURRENT_GENERATE_IF_STATEMENT_kind_info;
#define IR_CONCURRENT_GENERATE_IF_STATEMENT (&IR_CONCURRENT_GENERATE_IF_STATEMENT_kind_info)

struct IIR_PosInfo : tree_base_node {

  IIR_PosInfo () 
    { }

  tree_kind kind ();
};

struct IIR_PosInfo_TextFile : IIR_PosInfo {
  const char* file_name;
  int line_number;

  IIR_PosInfo_TextFile (const char* file_name, int line_number) 
  : IIR_PosInfo (),
    file_name (file_name),
    line_number (line_number)
    { }

  tree_kind kind ();
};

struct IIR_PosInfo_Sheet : IIR_PosInfo {
  const char* sheet_name;
  int x_coordinate;
  int y_coordinate;

  IIR_PosInfo_Sheet (const char* sheet_name, int x_coordinate, int y_coordinate) 
  : IIR_PosInfo (),
    sheet_name (sheet_name),
    x_coordinate (x_coordinate),
    y_coordinate (y_coordinate)
    { }

  tree_kind kind ();
};

struct IIR_Root : tree_base_node {
  pIIR_PosInfo pos;

  IIR_Root (pIIR_PosInfo pos) 
  : pos (pos)
    { }

  tree_kind kind ();
};

struct IIR_Dummy : IIR_Root {

  IIR_Dummy (pIIR_PosInfo pos) 
  : IIR_Root (pos)
    { }

  tree_kind kind ();
};

struct IIR_Signature : IIR_Dummy {

  IIR_Signature (pIIR_PosInfo pos) 
  : IIR_Dummy (pos)
    { }

  tree_kind kind ();
};

struct IIR_Literal : IIR_Root {

  IIR_Literal (pIIR_PosInfo pos) 
  : IIR_Root (pos)
    { }

  tree_kind kind ();
};

struct IIR_TextLiteral : IIR_Literal {
  IR_String text;

  IIR_TextLiteral (pIIR_PosInfo pos, IR_String text) 
  : IIR_Literal (pos),
    text (text)
    { }

  tree_kind kind ();
};

struct IIR_Identifier : IIR_TextLiteral {

  IIR_Identifier (pIIR_PosInfo pos, IR_String text) 
  : IIR_TextLiteral (pos, text)
    { }

  tree_kind kind ();
};

struct IIR_CharacterLiteral : IIR_TextLiteral {

  IIR_CharacterLiteral (pIIR_PosInfo pos, IR_String text) 
  : IIR_TextLiteral (pos, text)
    { }

  tree_kind kind ();
};

struct IIR_StringLiteral : IIR_TextLiteral {

  IIR_StringLiteral (pIIR_PosInfo pos, IR_String text) 
  : IIR_TextLiteral (pos, text)
    { }

  tree_kind kind ();
};

struct IIR_AbstractLiteral : IIR_Literal {

  IIR_AbstractLiteral (pIIR_PosInfo pos) 
  : IIR_Literal (pos)
    { }

  tree_kind kind ();
};

struct IIR_IntegerLiteral : IIR_AbstractLiteral {
  IR_String text;

  IIR_IntegerLiteral (pIIR_PosInfo pos, IR_String text) 
  : IIR_AbstractLiteral (pos),
    text (text)
    { }

  tree_kind kind ();
};

struct IIR_FloatingPointLiteral : IIR_AbstractLiteral {
  IR_String text;

  IIR_FloatingPointLiteral (pIIR_PosInfo pos, IR_String text) 
  : IIR_AbstractLiteral (pos),
    text (text)
    { }

  tree_kind kind ();
};

struct IIR_Tuple : IIR_Root {

  IIR_Tuple (pIIR_PosInfo pos) 
  : IIR_Root (pos)
    { }

  tree_kind kind ();
};

struct IIR_AssociationElement : IIR_Tuple {
  pIIR_ObjectReference formal;
  pIIR_InterfaceDeclaration formal_declaration;
  pIIR_Declaration formal_conversion;
  pIIR_Expression actual;
  pIIR_Declaration actual_conversion;

  IIR_AssociationElement (pIIR_PosInfo pos, pIIR_ObjectReference formal, pIIR_InterfaceDeclaration formal_declaration, pIIR_Declaration formal_conversion, pIIR_Expression actual, pIIR_Declaration actual_conversion) 
  : IIR_Tuple (pos),
    formal (formal),
    formal_declaration (formal_declaration),
    formal_conversion (formal_conversion),
    actual (actual),
    actual_conversion (actual_conversion)
    { }

  tree_kind kind ();
};

struct IIR_AssociationElementByExpression : IIR_AssociationElement {

  IIR_AssociationElementByExpression (pIIR_PosInfo pos, pIIR_ObjectReference formal, pIIR_InterfaceDeclaration formal_declaration, pIIR_Declaration formal_conversion, pIIR_Expression actual, pIIR_Declaration actual_conversion) 
  : IIR_AssociationElement (pos, formal, formal_declaration, formal_conversion, actual, actual_conversion)
    { }

  tree_kind kind ();
};

struct IIR_AssociationElementOpen : IIR_AssociationElement {

  IIR_AssociationElementOpen (pIIR_PosInfo pos, pIIR_ObjectReference formal, pIIR_InterfaceDeclaration formal_declaration, pIIR_Declaration formal_conversion, pIIR_Expression actual, pIIR_Declaration actual_conversion) 
  : IIR_AssociationElement (pos, formal, formal_declaration, formal_conversion, actual, actual_conversion)
    { }

  tree_kind kind ();
};

struct IIR_CaseStatementAlternative : IIR_Tuple {
  pIIR_SequentialStatementList sequence_of_statements;
  pIIR_ChoiceList choices;

  IIR_CaseStatementAlternative (pIIR_PosInfo pos, pIIR_SequentialStatementList sequence_of_statements, pIIR_ChoiceList choices) 
  : IIR_Tuple (pos),
    sequence_of_statements (sequence_of_statements),
    choices (choices)
    { }

  tree_kind kind ();
};

struct IIR_Choice : IIR_Tuple {

  IIR_Choice (pIIR_PosInfo pos) 
  : IIR_Tuple (pos)
    { }

  tree_kind kind ();
};

struct IIR_ChoiceByExpression : IIR_Choice {
  pIIR_Expression value;

  IIR_ChoiceByExpression (pIIR_PosInfo pos, pIIR_Expression value) 
  : IIR_Choice (pos),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_ChoiceByRange : IIR_Choice {
  pIIR_Range range;

  IIR_ChoiceByRange (pIIR_PosInfo pos, pIIR_Range range) 
  : IIR_Choice (pos),
    range (range)
    { }

  tree_kind kind ();
};

struct IIR_ChoiceByOthers : IIR_Choice {

  IIR_ChoiceByOthers (pIIR_PosInfo pos) 
  : IIR_Choice (pos)
    { }

  tree_kind kind ();
};

struct IIR_EntityClassEntry : IIR_Tuple {
  IR_Kind entity_kind;
  bool is_boxed;

  IIR_EntityClassEntry (pIIR_PosInfo pos, IR_Kind entity_kind, bool is_boxed) 
  : IIR_Tuple (pos),
    entity_kind (entity_kind),
    is_boxed (is_boxed)
    { }

  tree_kind kind ();
};

struct IIR_WaveformElement : IIR_Tuple {
  pIIR_Expression value;
  pIIR_Expression time;

  IIR_WaveformElement (pIIR_PosInfo pos, pIIR_Expression value, pIIR_Expression time) 
  : IIR_Tuple (pos),
    value (value),
    time (time)
    { }

  tree_kind kind ();
};

struct IIR_ElementAssociation : IIR_Tuple {
  pIIR_ElementDeclaration element;
  pIIR_Expression value;

  IIR_ElementAssociation (pIIR_PosInfo pos, pIIR_ElementDeclaration element, pIIR_Expression value) 
  : IIR_Tuple (pos),
    element (element),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_IndexedAssociation : IIR_Tuple {
  pIIR_Expression value;

  IIR_IndexedAssociation (pIIR_PosInfo pos, pIIR_Expression value) 
  : IIR_Tuple (pos),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_SingleIndexedAssociation : IIR_IndexedAssociation {
  pIIR_Expression index;

  IIR_SingleIndexedAssociation (pIIR_PosInfo pos, pIIR_Expression value, pIIR_Expression index) 
  : IIR_IndexedAssociation (pos, value),
    index (index)
    { }

  tree_kind kind ();
};

struct IIR_RangeIndexedAssociation : IIR_IndexedAssociation {
  pIIR_Range index_range;

  IIR_RangeIndexedAssociation (pIIR_PosInfo pos, pIIR_Expression value, pIIR_Range index_range) 
  : IIR_IndexedAssociation (pos, value),
    index_range (index_range)
    { }

  tree_kind kind ();
};

struct IIR_SliceIndexedAssociation : IIR_RangeIndexedAssociation {

  IIR_SliceIndexedAssociation (pIIR_PosInfo pos, pIIR_Expression value, pIIR_Range index_range) 
  : IIR_RangeIndexedAssociation (pos, value, index_range)
    { }

  tree_kind kind ();
};

struct IIR_OthersIndexedAssociation : IIR_IndexedAssociation {

  IIR_OthersIndexedAssociation (pIIR_PosInfo pos, pIIR_Expression value) 
  : IIR_IndexedAssociation (pos, value)
    { }

  tree_kind kind ();
};

struct IIR_AttributeValue : IIR_Tuple {
  pIIR_Expression value;
  pIIR_AttributeDeclaration attribute;

  IIR_AttributeValue (pIIR_PosInfo pos, pIIR_Expression value, pIIR_AttributeDeclaration attribute) 
  : IIR_Tuple (pos),
    value (value),
    attribute (attribute)
    { }

  tree_kind kind ();
};

struct IIR_List : IIR_Root {

  IIR_List (pIIR_PosInfo pos) 
  : IIR_Root (pos)
    { }

  tree_kind kind ();
};

struct IIR_AssociationList : IIR_List {
  pIIR_AssociationElement first;
  pIIR_AssociationList rest;

  IIR_AssociationList (pIIR_PosInfo pos, pIIR_AssociationElement first, pIIR_AssociationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_AttributeValueList : IIR_List {
  pIIR_AttributeValue first;
  pIIR_AttributeValueList rest;

  IIR_AttributeValueList (pIIR_PosInfo pos, pIIR_AttributeValue first, pIIR_AttributeValueList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_CaseStatementAlternativeList : IIR_List {
  pIIR_CaseStatementAlternative first;
  pIIR_CaseStatementAlternativeList rest;

  IIR_CaseStatementAlternativeList (pIIR_PosInfo pos, pIIR_CaseStatementAlternative first, pIIR_CaseStatementAlternativeList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ChoiceList : IIR_List {
  pIIR_Choice first;
  pIIR_ChoiceList rest;

  IIR_ChoiceList (pIIR_PosInfo pos, pIIR_Choice first, pIIR_ChoiceList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ConcurrentStatementList : IIR_List {
  pIIR_ConcurrentStatement first;
  pIIR_ConcurrentStatementList rest;

  IIR_ConcurrentStatementList (pIIR_PosInfo pos, pIIR_ConcurrentStatement first, pIIR_ConcurrentStatementList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ConfigurationItemList : IIR_List {
  pIIR_ConfigurationItem first;
  pIIR_ConfigurationItemList rest;

  IIR_ConfigurationItemList (pIIR_PosInfo pos, pIIR_ConfigurationItem first, pIIR_ConfigurationItemList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_DeclarationList : IIR_List {
  pIIR_Declaration first;
  pIIR_DeclarationList rest;

  IIR_DeclarationList (pIIR_PosInfo pos, pIIR_Declaration first, pIIR_DeclarationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ElementDeclarationList : IIR_List {
  pIIR_ElementDeclaration first;
  pIIR_ElementDeclarationList rest;

  IIR_ElementDeclarationList (pIIR_PosInfo pos, pIIR_ElementDeclaration first, pIIR_ElementDeclarationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_EntityClassEntryList : IIR_List {
  pIIR_EntityClassEntry first;
  pIIR_EntityClassEntryList rest;

  IIR_EntityClassEntryList (pIIR_PosInfo pos, pIIR_EntityClassEntry first, pIIR_EntityClassEntryList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_EnumerationLiteralList : IIR_List {
  pIIR_EnumerationLiteral first;
  pIIR_EnumerationLiteralList rest;

  IIR_EnumerationLiteralList (pIIR_PosInfo pos, pIIR_EnumerationLiteral first, pIIR_EnumerationLiteralList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_InterfaceList : IIR_List {
  pIIR_InterfaceDeclaration first;
  pIIR_InterfaceList rest;

  IIR_InterfaceList (pIIR_PosInfo pos, pIIR_InterfaceDeclaration first, pIIR_InterfaceList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_LibraryUnitList : IIR_List {
  pIIR_LibraryUnit first;
  pIIR_LibraryUnitList rest;

  IIR_LibraryUnitList (pIIR_PosInfo pos, pIIR_LibraryUnit first, pIIR_LibraryUnitList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_SequentialStatementList : IIR_List {
  pIIR_SequentialStatement first;
  pIIR_SequentialStatementList rest;

  IIR_SequentialStatementList (pIIR_PosInfo pos, pIIR_SequentialStatement first, pIIR_SequentialStatementList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_UnitList : IIR_List {
  pIIR_PhysicalUnit first;
  pIIR_UnitList rest;

  IIR_UnitList (pIIR_PosInfo pos, pIIR_PhysicalUnit first, pIIR_UnitList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_WaveformList : IIR_List {
  pIIR_WaveformElement first;
  pIIR_WaveformList rest;

  IIR_WaveformList (pIIR_PosInfo pos, pIIR_WaveformElement first, pIIR_WaveformList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_TypeList : IIR_List {
  pIIR_Type first;
  pIIR_TypeList rest;

  IIR_TypeList (pIIR_PosInfo pos, pIIR_Type first, pIIR_TypeList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ExpressionList : IIR_List {
  pIIR_Expression first;
  pIIR_ExpressionList rest;

  IIR_ExpressionList (pIIR_PosInfo pos, pIIR_Expression first, pIIR_ExpressionList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_IndexedAssociationList : IIR_List {
  pIIR_IndexedAssociation first;
  pIIR_IndexedAssociationList rest;

  IIR_IndexedAssociationList (pIIR_PosInfo pos, pIIR_IndexedAssociation first, pIIR_IndexedAssociationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ElementAssociationList : IIR_List {
  pIIR_ElementAssociation first;
  pIIR_ElementAssociationList rest;

  IIR_ElementAssociationList (pIIR_PosInfo pos, pIIR_ElementAssociation first, pIIR_ElementAssociationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ComponentInstantiationList : IIR_List {
  pIIR_ComponentInstantiationStatement first;
  pIIR_ComponentInstantiationList rest;

  IIR_ComponentInstantiationList (pIIR_PosInfo pos, pIIR_ComponentInstantiationStatement first, pIIR_ComponentInstantiationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_ConfigurationSpecificationList : IIR_List {
  pIIR_ConfigurationSpecification first;
  pIIR_ConfigurationSpecificationList rest;

  IIR_ConfigurationSpecificationList (pIIR_PosInfo pos, pIIR_ConfigurationSpecification first, pIIR_ConfigurationSpecificationList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_IdentifierList : IIR_List {
  pIIR_Identifier first;
  pIIR_IdentifierList rest;

  IIR_IdentifierList (pIIR_PosInfo pos, pIIR_Identifier first, pIIR_IdentifierList rest) 
  : IIR_List (pos),
    first (first),
    rest (rest)
    { }

  tree_kind kind ();
};

struct IIR_Range : IIR_Root {

  IIR_Range (pIIR_PosInfo pos) 
  : IIR_Root (pos)
    { }

  tree_kind kind ();
};

struct IIR_ExplicitRange : IIR_Range {
  pIIR_Expression left;
  pIIR_Expression right;
  IR_Direction direction;

  IIR_ExplicitRange (pIIR_PosInfo pos, pIIR_Expression left, pIIR_Expression right, IR_Direction direction) 
  : IIR_Range (pos),
    left (left),
    right (right),
    direction (direction)
    { }

  tree_kind kind ();
};

struct IIR_ArrayRange : IIR_Range {
  pIIR_Type type;
  pIIR_Expression array;
  pIIR_Type array_type;
  pIIR_Expression index;

  IIR_ArrayRange (pIIR_PosInfo pos, pIIR_Type type, pIIR_Expression array, pIIR_Type array_type, pIIR_Expression index) 
  : IIR_Range (pos),
    type (type),
    array (array),
    array_type (array_type),
    index (index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayRANGE : IIR_ArrayRange {

  IIR_Attr_ArrayRANGE (pIIR_PosInfo pos, pIIR_Type type, pIIR_Expression array, pIIR_Type array_type, pIIR_Expression index) 
  : IIR_ArrayRange (pos, type, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayREVERSE_RANGE : IIR_ArrayRange {

  IIR_Attr_ArrayREVERSE_RANGE (pIIR_PosInfo pos, pIIR_Type type, pIIR_Expression array, pIIR_Type array_type, pIIR_Expression index) 
  : IIR_ArrayRange (pos, type, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Type : IIR_Root {
  pIIR_TypeDeclaration declaration;
  pIIR_Type base;
  IR_StaticLevel static_level;

  IIR_Type (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level) 
  : IIR_Root (pos),
    declaration (declaration),
    base ((base == NULL)? this:base),
    static_level (static_level)
    { }

  tree_kind kind ();
};

struct IIR_Subtype : IIR_Type {
  pIIR_Type immediate_base;
  pIIR_FunctionDeclaration resolution_function;

  IIR_Subtype (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type immediate_base, pIIR_FunctionDeclaration resolution_function) 
  : IIR_Type (pos, declaration, base, static_level),
    immediate_base (immediate_base),
    resolution_function (resolution_function)
    { }

  tree_kind kind ();
};

struct IIR_ScalarType : IIR_Type {

  IIR_ScalarType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level) 
  : IIR_Type (pos, declaration, base, static_level)
    { }

  tree_kind kind ();
};

struct IIR_ScalarSubtype : IIR_Subtype {
  pIIR_Range range;

  IIR_ScalarSubtype (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type immediate_base, pIIR_FunctionDeclaration resolution_function, pIIR_Range range) 
  : IIR_Subtype (pos, declaration, base, static_level, immediate_base, resolution_function),
    range (range)
    { }

  tree_kind kind ();
};

struct IIR_EnumerationType : IIR_ScalarType {
  pIIR_EnumerationLiteralList enumeration_literals;

  IIR_EnumerationType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_EnumerationLiteralList enumeration_literals) 
  : IIR_ScalarType (pos, declaration, base, static_level),
    enumeration_literals (enumeration_literals)
    { }

  tree_kind kind ();
};

struct IIR_IntegerType : IIR_ScalarType {

  IIR_IntegerType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level) 
  : IIR_ScalarType (pos, declaration, base, static_level)
    { }

  tree_kind kind ();
};

struct IIR_FloatingType : IIR_ScalarType {

  IIR_FloatingType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level) 
  : IIR_ScalarType (pos, declaration, base, static_level)
    { }

  tree_kind kind ();
};

struct IIR_PhysicalType : IIR_ScalarType {
  pIIR_PhysicalUnit primary_unit;
  pIIR_UnitList units;

  IIR_PhysicalType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_PhysicalUnit primary_unit, pIIR_UnitList units) 
  : IIR_ScalarType (pos, declaration, base, static_level),
    primary_unit (primary_unit),
    units (units)
    { }

  tree_kind kind ();
};

struct IIR_CompositeType : IIR_Type {

  IIR_CompositeType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level) 
  : IIR_Type (pos, declaration, base, static_level)
    { }

  tree_kind kind ();
};

struct IIR_RecordType : IIR_CompositeType {
  pIIR_ElementDeclarationList element_declarations;

  IIR_RecordType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_ElementDeclarationList element_declarations) 
  : IIR_CompositeType (pos, declaration, base, static_level),
    element_declarations (element_declarations)
    { }

  tree_kind kind ();
};

struct IIR_RecordSubtype : IIR_Subtype {

  IIR_RecordSubtype (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type immediate_base, pIIR_FunctionDeclaration resolution_function) 
  : IIR_Subtype (pos, declaration, base, static_level, immediate_base, resolution_function)
    { }

  tree_kind kind ();
};

struct IIR_AccessType : IIR_Type {
  pIIR_Type designated_type;

  IIR_AccessType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type designated_type) 
  : IIR_Type (pos, declaration, base, static_level),
    designated_type (designated_type)
    { }

  tree_kind kind ();
};

struct IIR_FileType : IIR_Type {
  pIIR_Type type_mark;

  IIR_FileType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type type_mark) 
  : IIR_Type (pos, declaration, base, static_level),
    type_mark (type_mark)
    { }

  tree_kind kind ();
};

struct IIR_ArrayType : IIR_CompositeType {
  pIIR_TypeList index_types;
  pIIR_Type element_type;

  IIR_ArrayType (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_TypeList index_types, pIIR_Type element_type) 
  : IIR_CompositeType (pos, declaration, base, static_level),
    index_types (index_types),
    element_type (element_type)
    { }

  tree_kind kind ();
};

struct IIR_ArraySubtype : IIR_Subtype {
  pIIR_TypeList constraint;

  IIR_ArraySubtype (pIIR_PosInfo pos, pIIR_TypeDeclaration declaration, pIIR_Type base, IR_StaticLevel static_level, pIIR_Type immediate_base, pIIR_FunctionDeclaration resolution_function, pIIR_TypeList constraint) 
  : IIR_Subtype (pos, declaration, base, static_level, immediate_base, resolution_function),
    constraint (constraint)
    { }

  tree_kind kind ();
};

struct IIR_Declaration : IIR_Root {
  pIIR_TextLiteral declarator;
  pIIR_DeclarativeRegion declarative_region;
  pIIR_AttributeValueList attributes;
  int seqno;

  IIR_Declaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno) 
  : IIR_Root (pos),
    declarator (declarator),
    declarative_region (declarative_region),
    attributes (attributes),
    seqno (seqno)
    { }

  tree_kind kind ();
};

struct IIR_DeclarativeRegion : IIR_Declaration {
  pIIR_DeclarativeRegion continued;
  pIIR_DeclarationList declarations;

  IIR_DeclarativeRegion (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    continued (continued),
    declarations (declarations)
    { }

  tree_kind kind ();
};

struct IIR_LoopDeclarativeRegion : IIR_DeclarativeRegion {
  pIIR_LoopStatement loop_statement;

  IIR_LoopDeclarativeRegion (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_LoopStatement loop_statement) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    loop_statement (loop_statement)
    { }

  tree_kind kind ();
};

struct IIR_SubprogramDeclaration : IIR_DeclarativeRegion {
  pIIR_InterfaceList interface_declarations;
  pIIR_SequentialStatementList subprogram_body;
  pIIR_SubprogramDeclaration prototype;

  IIR_SubprogramDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList interface_declarations, pIIR_SequentialStatementList subprogram_body, pIIR_SubprogramDeclaration prototype) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    interface_declarations (interface_declarations),
    subprogram_body (subprogram_body),
    prototype (prototype)
    { }

  tree_kind kind ();
};

struct IIR_ProcedureDeclaration : IIR_SubprogramDeclaration {

  IIR_ProcedureDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList interface_declarations, pIIR_SequentialStatementList subprogram_body, pIIR_SubprogramDeclaration prototype) 
  : IIR_SubprogramDeclaration (pos, declarator, declarative_region, attributes, seqno, continued, declarations, interface_declarations, subprogram_body, prototype)
    { }

  tree_kind kind ();
};

struct IIR_PredefinedProcedureDeclaration : IIR_ProcedureDeclaration {

  IIR_PredefinedProcedureDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList interface_declarations, pIIR_SequentialStatementList subprogram_body, pIIR_SubprogramDeclaration prototype) 
  : IIR_ProcedureDeclaration (pos, declarator, declarative_region, attributes, seqno, continued, declarations, interface_declarations, subprogram_body, prototype)
    { }

  tree_kind kind ();
};

struct IIR_FunctionDeclaration : IIR_SubprogramDeclaration {
  bool pure;
  pIIR_Type return_type;

  IIR_FunctionDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList interface_declarations, pIIR_SequentialStatementList subprogram_body, pIIR_SubprogramDeclaration prototype, bool pure, pIIR_Type return_type) 
  : IIR_SubprogramDeclaration (pos, declarator, declarative_region, attributes, seqno, continued, declarations, interface_declarations, subprogram_body, prototype),
    pure (pure),
    return_type (return_type)
    { }

  tree_kind kind ();
};

struct IIR_PredefinedFunctionDeclaration : IIR_FunctionDeclaration {

  IIR_PredefinedFunctionDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList interface_declarations, pIIR_SequentialStatementList subprogram_body, pIIR_SubprogramDeclaration prototype, bool pure, pIIR_Type return_type) 
  : IIR_FunctionDeclaration (pos, declarator, declarative_region, attributes, seqno, continued, declarations, interface_declarations, subprogram_body, prototype, pure, return_type)
    { }

  tree_kind kind ();
};

struct IIR_EnumerationLiteral : IIR_Declaration {
  pIIR_EnumerationType subtype;
  int enum_pos;

  IIR_EnumerationLiteral (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_EnumerationType subtype, int enum_pos) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    subtype (subtype),
    enum_pos (enum_pos)
    { }

  tree_kind kind ();
};

struct IIR_ElementDeclaration : IIR_Declaration {
  pIIR_Type subtype;
  int declaration_pos;

  IIR_ElementDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, int declaration_pos) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    subtype (subtype),
    declaration_pos (declaration_pos)
    { }

  tree_kind kind ();
};

struct IIR_TypeDeclaration : IIR_Declaration {
  pIIR_Type type;

  IIR_TypeDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type type) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    type (type)
    { }

  tree_kind kind ();
};

struct IIR_SubtypeDeclaration : IIR_TypeDeclaration {

  IIR_SubtypeDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type type) 
  : IIR_TypeDeclaration (pos, declarator, declarative_region, attributes, seqno, type)
    { }

  tree_kind kind ();
};

struct IIR_ObjectDeclaration : IIR_Declaration {
  pIIR_Type subtype;
  pIIR_Expression initial_value;
  pIIR_ObjectReference alias_base;

  IIR_ObjectDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    subtype (subtype),
    initial_value (initial_value),
    alias_base (alias_base)
    { }

  tree_kind kind ();
};

struct IIR_ConstantDeclaration : IIR_ObjectDeclaration {

  IIR_ConstantDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base) 
  : IIR_ObjectDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base)
    { }

  tree_kind kind ();
};

struct IIR_VariableDeclaration : IIR_ObjectDeclaration {

  IIR_VariableDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base) 
  : IIR_ObjectDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base)
    { }

  tree_kind kind ();
};

struct IIR_SharedVariableDeclaration : IIR_VariableDeclaration {

  IIR_SharedVariableDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base) 
  : IIR_VariableDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base)
    { }

  tree_kind kind ();
};

struct IIR_SignalDeclaration : IIR_ObjectDeclaration {
  IR_SignalKind signal_kind;

  IIR_SignalDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_SignalKind signal_kind) 
  : IIR_ObjectDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base),
    signal_kind (signal_kind)
    { }

  tree_kind kind ();
};

struct IIR_FileDeclaration : IIR_ObjectDeclaration {
  pIIR_Expression file_open_expression;
  pIIR_Expression file_logical_name;

  IIR_FileDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, pIIR_Expression file_open_expression, pIIR_Expression file_logical_name) 
  : IIR_ObjectDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base),
    file_open_expression (file_open_expression),
    file_logical_name (file_logical_name)
    { }

  tree_kind kind ();
};

struct IIR_InterfaceDeclaration : IIR_ObjectDeclaration {
  IR_Mode mode;
  bool bus;

  IIR_InterfaceDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_Mode mode, bool bus) 
  : IIR_ObjectDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base),
    mode (mode),
    bus (bus)
    { }

  tree_kind kind ();
};

struct IIR_ConstantInterfaceDeclaration : IIR_InterfaceDeclaration {

  IIR_ConstantInterfaceDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_Mode mode, bool bus) 
  : IIR_InterfaceDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base, mode, bus)
    { }

  tree_kind kind ();
};

struct IIR_VariableInterfaceDeclaration : IIR_InterfaceDeclaration {

  IIR_VariableInterfaceDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_Mode mode, bool bus) 
  : IIR_InterfaceDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base, mode, bus)
    { }

  tree_kind kind ();
};

struct IIR_SignalInterfaceDeclaration : IIR_InterfaceDeclaration {
  IR_SignalKind signal_kind;

  IIR_SignalInterfaceDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_Mode mode, bool bus, IR_SignalKind signal_kind) 
  : IIR_InterfaceDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base, mode, bus),
    signal_kind (signal_kind)
    { }

  tree_kind kind ();
};

struct IIR_FileInterfaceDeclaration : IIR_InterfaceDeclaration {

  IIR_FileInterfaceDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype, pIIR_Expression initial_value, pIIR_ObjectReference alias_base, IR_Mode mode, bool bus) 
  : IIR_InterfaceDeclaration (pos, declarator, declarative_region, attributes, seqno, subtype, initial_value, alias_base, mode, bus)
    { }

  tree_kind kind ();
};

struct IIR_AttributeDeclaration : IIR_Declaration {
  pIIR_Type subtype;

  IIR_AttributeDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type subtype) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    subtype (subtype)
    { }

  tree_kind kind ();
};

struct IIR_ComponentDeclaration : IIR_DeclarativeRegion {
  pIIR_InterfaceList local_generic_clause;
  pIIR_InterfaceList local_port_clause;

  IIR_ComponentDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_InterfaceList local_generic_clause, pIIR_InterfaceList local_port_clause) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    local_generic_clause (local_generic_clause),
    local_port_clause (local_port_clause)
    { }

  tree_kind kind ();
};

struct IIR_LibraryDeclaration : IIR_Declaration {
  pIIR_LibraryUnitList primary_units;

  IIR_LibraryDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_LibraryUnitList primary_units) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    primary_units (primary_units)
    { }

  tree_kind kind ();
};

struct IIR_LibraryUnit : IIR_DeclarativeRegion {
  pIIR_DeclarationList context_items;
  pIIR_DeclarationList external_decls;
  pIIR_TextLiteral library_name;
  pIIR_LibraryUnitList used_units;

  IIR_LibraryUnit (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    context_items (context_items),
    external_decls (external_decls),
    library_name (library_name),
    used_units (used_units)
    { }

  tree_kind kind ();
};

struct IIR_EntityDeclaration : IIR_LibraryUnit {
  pIIR_InterfaceList generic_clause;
  pIIR_InterfaceList port_clause;
  pIIR_ConcurrentStatementList entity_statement_part;

  IIR_EntityDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units, pIIR_InterfaceList generic_clause, pIIR_InterfaceList port_clause, pIIR_ConcurrentStatementList entity_statement_part) 
  : IIR_LibraryUnit (pos, declarator, declarative_region, attributes, seqno, continued, declarations, context_items, external_decls, library_name, used_units),
    generic_clause (generic_clause),
    port_clause (port_clause),
    entity_statement_part (entity_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_ArchitectureDeclaration : IIR_LibraryUnit {
  pIIR_EntityDeclaration entity;
  pIIR_ConfigurationSpecificationList configuration_specifications;
  pIIR_ConcurrentStatementList architecture_statement_part;

  IIR_ArchitectureDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units, pIIR_EntityDeclaration entity, pIIR_ConfigurationSpecificationList configuration_specifications, pIIR_ConcurrentStatementList architecture_statement_part) 
  : IIR_LibraryUnit (pos, declarator, declarative_region, attributes, seqno, continued, declarations, context_items, external_decls, library_name, used_units),
    entity (entity),
    configuration_specifications (configuration_specifications),
    architecture_statement_part (architecture_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_ArchitectureRef : IIR_DeclarativeRegion {
  pIIR_EntityDeclaration entity;
  pIIR_TextLiteral architecture_name;

  IIR_ArchitectureRef (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_EntityDeclaration entity, pIIR_TextLiteral architecture_name) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    entity (entity),
    architecture_name (architecture_name)
    { }

  tree_kind kind ();
};

struct IIR_PackageDeclaration : IIR_LibraryUnit {

  IIR_PackageDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units) 
  : IIR_LibraryUnit (pos, declarator, declarative_region, attributes, seqno, continued, declarations, context_items, external_decls, library_name, used_units)
    { }

  tree_kind kind ();
};

struct IIR_PackageBodyDeclaration : IIR_LibraryUnit {
  pIIR_PackageDeclaration package;

  IIR_PackageBodyDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units, pIIR_PackageDeclaration package) 
  : IIR_LibraryUnit (pos, declarator, declarative_region, attributes, seqno, continued, declarations, context_items, external_decls, library_name, used_units),
    package (package)
    { }

  tree_kind kind ();
};

struct IIR_ConfigurationDeclaration : IIR_LibraryUnit {
  pIIR_BlockConfiguration block_configuration;
  pIIR_EntityDeclaration entity;

  IIR_ConfigurationDeclaration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarationList context_items, pIIR_DeclarationList external_decls, pIIR_TextLiteral library_name, pIIR_LibraryUnitList used_units, pIIR_BlockConfiguration block_configuration, pIIR_EntityDeclaration entity) 
  : IIR_LibraryUnit (pos, declarator, declarative_region, attributes, seqno, continued, declarations, context_items, external_decls, library_name, used_units),
    block_configuration (block_configuration),
    entity (entity)
    { }

  tree_kind kind ();
};

struct IIR_ConfigurationItem : IIR_DeclarativeRegion {

  IIR_ConfigurationItem (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations)
    { }

  tree_kind kind ();
};

struct IIR_BlockConfiguration : IIR_ConfigurationItem {
  pIIR_DeclarativeRegion block_specification;
  pIIR_DeclarationList use_clause_list;
  pIIR_ConfigurationItemList configuration_item_list;

  IIR_BlockConfiguration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_DeclarativeRegion block_specification, pIIR_DeclarationList use_clause_list, pIIR_ConfigurationItemList configuration_item_list) 
  : IIR_ConfigurationItem (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    block_specification (block_specification),
    use_clause_list (use_clause_list),
    configuration_item_list (configuration_item_list)
    { }

  tree_kind kind ();
};

struct IIR_ComponentConfiguration : IIR_ConfigurationItem {
  pIIR_LibraryUnit entity_aspect;
  pIIR_ComponentInstantiationList instantiation_list;
  pIIR_AssociationList generic_map_aspect;
  pIIR_AssociationList port_map_aspect;
  pIIR_BlockConfiguration block_config;

  IIR_ComponentConfiguration (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_LibraryUnit entity_aspect, pIIR_ComponentInstantiationList instantiation_list, pIIR_AssociationList generic_map_aspect, pIIR_AssociationList port_map_aspect, pIIR_BlockConfiguration block_config) 
  : IIR_ConfigurationItem (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    entity_aspect (entity_aspect),
    instantiation_list (instantiation_list),
    generic_map_aspect (generic_map_aspect),
    port_map_aspect (port_map_aspect),
    block_config (block_config)
    { }

  tree_kind kind ();
};

struct IIR_PhysicalUnit : IIR_Declaration {
  pIIR_Expression multiplier;
  pIIR_PhysicalUnit unit_name;
  pIIR_PhysicalType type;
  int unit_pos;

  IIR_PhysicalUnit (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Expression multiplier, pIIR_PhysicalUnit unit_name, pIIR_PhysicalType type, int unit_pos) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    multiplier (multiplier),
    unit_name (unit_name),
    type (type),
    unit_pos (unit_pos)
    { }

  tree_kind kind ();
};

struct IIR_BindingIndication : IIR_Tuple {
  pIIR_DeclarativeRegion unit;
  pIIR_AssociationList generic_map_list;
  pIIR_AssociationList port_map_list;

  IIR_BindingIndication (pIIR_PosInfo pos, pIIR_DeclarativeRegion unit, pIIR_AssociationList generic_map_list, pIIR_AssociationList port_map_list) 
  : IIR_Tuple (pos),
    unit (unit),
    generic_map_list (generic_map_list),
    port_map_list (port_map_list)
    { }

  tree_kind kind ();
};

struct IIR_ConfigurationSpecification : IIR_Tuple {
  pIIR_Identifier label;
  pIIR_ComponentDeclaration component;
  pIIR_BindingIndication binding;

  IIR_ConfigurationSpecification (pIIR_PosInfo pos, pIIR_Identifier label, pIIR_ComponentDeclaration component, pIIR_BindingIndication binding) 
  : IIR_Tuple (pos),
    label (label),
    component (component),
    binding (binding)
    { }

  tree_kind kind ();
};

struct IIR_DisconnectSpecification : IIR_Declaration {
  pIIR_Type type_mark;
  pIIR_Expression time_expression;
  pIIR_ObjectReference guarded_signal;

  IIR_DisconnectSpecification (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Type type_mark, pIIR_Expression time_expression, pIIR_ObjectReference guarded_signal) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    type_mark (type_mark),
    time_expression (time_expression),
    guarded_signal (guarded_signal)
    { }

  tree_kind kind ();
};

struct IIR_Label : IIR_Declaration {
  pIIR_SequentialStatement statement;

  IIR_Label (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_SequentialStatement statement) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    statement (statement)
    { }

  tree_kind kind ();
};

struct IIR_LibraryClause : IIR_Declaration {

  IIR_LibraryClause (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno)
    { }

  tree_kind kind ();
};

struct IIR_UseClause : IIR_Declaration {
  pIIR_Declaration used_unit;

  IIR_UseClause (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_Declaration used_unit) 
  : IIR_Declaration (pos, declarator, declarative_region, attributes, seqno),
    used_unit (used_unit)
    { }

  tree_kind kind ();
};

struct IIR_Expression : IIR_Root {
  pIIR_Type subtype;
  IR_StaticLevel static_level;

  IIR_Expression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Root (pos),
    subtype (subtype),
    static_level (static_level)
    { }

  tree_kind kind ();
};

struct IIR_AbstractLiteralExpression : IIR_Expression {
  pIIR_AbstractLiteral value;

  IIR_AbstractLiteralExpression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_AbstractLiteral value) 
  : IIR_Expression (pos, subtype, static_level),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_PhysicalLiteral : IIR_AbstractLiteralExpression {
  pIIR_PhysicalUnit unit;

  IIR_PhysicalLiteral (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_AbstractLiteral value, pIIR_PhysicalUnit unit) 
  : IIR_AbstractLiteralExpression (pos, subtype, static_level, value),
    unit (unit)
    { }

  tree_kind kind ();
};

struct IIR_ArrayLiteralExpression : IIR_Expression {
  pIIR_StringLiteral value;

  IIR_ArrayLiteralExpression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_StringLiteral value) 
  : IIR_Expression (pos, subtype, static_level),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_EnumLiteralReference : IIR_Expression {
  pIIR_EnumerationLiteral value;

  IIR_EnumLiteralReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_EnumerationLiteral value) 
  : IIR_Expression (pos, subtype, static_level),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_NullExpression : IIR_Expression {

  IIR_NullExpression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_Aggregate : IIR_Expression {

  IIR_Aggregate (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_RecordAggregate : IIR_Aggregate {
  pIIR_ElementAssociationList element_association_list;

  IIR_RecordAggregate (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ElementAssociationList element_association_list) 
  : IIR_Aggregate (pos, subtype, static_level),
    element_association_list (element_association_list)
    { }

  tree_kind kind ();
};

struct IIR_ArtificialRecordAggregate : IIR_RecordAggregate {

  IIR_ArtificialRecordAggregate (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ElementAssociationList element_association_list) 
  : IIR_RecordAggregate (pos, subtype, static_level, element_association_list)
    { }

  tree_kind kind ();
};

struct IIR_ArrayAggregate : IIR_Aggregate {
  pIIR_IndexedAssociationList indexed_association_list;

  IIR_ArrayAggregate (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_IndexedAssociationList indexed_association_list) 
  : IIR_Aggregate (pos, subtype, static_level),
    indexed_association_list (indexed_association_list)
    { }

  tree_kind kind ();
};

struct IIR_ArtificialArrayAggregate : IIR_ArrayAggregate {

  IIR_ArtificialArrayAggregate (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_IndexedAssociationList indexed_association_list) 
  : IIR_ArrayAggregate (pos, subtype, static_level, indexed_association_list)
    { }

  tree_kind kind ();
};

struct IIR_FunctionCall : IIR_Expression {
  pIIR_FunctionDeclaration function;
  pIIR_AssociationList parameter_association_list;

  IIR_FunctionCall (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_FunctionDeclaration function, pIIR_AssociationList parameter_association_list) 
  : IIR_Expression (pos, subtype, static_level),
    function (function),
    parameter_association_list (parameter_association_list)
    { }

  tree_kind kind ();
};

struct IIR_QualifiedExpression : IIR_Expression {
  pIIR_Type type_mark;
  pIIR_Expression expression;

  IIR_QualifiedExpression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type type_mark, pIIR_Expression expression) 
  : IIR_Expression (pos, subtype, static_level),
    type_mark (type_mark),
    expression (expression)
    { }

  tree_kind kind ();
};

struct IIR_TypeConversion : IIR_Expression {
  pIIR_Type type_mark;
  pIIR_Expression expression;

  IIR_TypeConversion (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type type_mark, pIIR_Expression expression) 
  : IIR_Expression (pos, subtype, static_level),
    type_mark (type_mark),
    expression (expression)
    { }

  tree_kind kind ();
};

struct IIR_Allocator : IIR_Expression {
  pIIR_Type type_mark;
  pIIR_Expression value;

  IIR_Allocator (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type type_mark, pIIR_Expression value) 
  : IIR_Expression (pos, subtype, static_level),
    type_mark (type_mark),
    value (value)
    { }

  tree_kind kind ();
};

struct IIR_OpenExpression : IIR_Expression {

  IIR_OpenExpression (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_ObjectReference : IIR_Expression {

  IIR_ObjectReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_SimpleReference : IIR_ObjectReference {
  pIIR_ObjectDeclaration object;

  IIR_SimpleReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectDeclaration object) 
  : IIR_ObjectReference (pos, subtype, static_level),
    object (object)
    { }

  tree_kind kind ();
};

struct IIR_AccessReference : IIR_ObjectReference {
  pIIR_Expression access;

  IIR_AccessReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression access) 
  : IIR_ObjectReference (pos, subtype, static_level),
    access (access)
    { }

  tree_kind kind ();
};

struct IIR_RecordReference : IIR_ObjectReference {
  pIIR_Expression record;
  pIIR_ElementDeclaration element;

  IIR_RecordReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression record, pIIR_ElementDeclaration element) 
  : IIR_ObjectReference (pos, subtype, static_level),
    record (record),
    element (element)
    { }

  tree_kind kind ();
};

struct IIR_GenericArrayReference : IIR_ObjectReference {
  pIIR_Expression array;

  IIR_GenericArrayReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array) 
  : IIR_ObjectReference (pos, subtype, static_level),
    array (array)
    { }

  tree_kind kind ();
};

struct IIR_ArrayReference : IIR_GenericArrayReference {
  pIIR_ExpressionList indices;

  IIR_ArrayReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_ExpressionList indices) 
  : IIR_GenericArrayReference (pos, subtype, static_level, array),
    indices (indices)
    { }

  tree_kind kind ();
};

struct IIR_SliceReference : IIR_GenericArrayReference {
  pIIR_Range range;

  IIR_SliceReference (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Range range) 
  : IIR_GenericArrayReference (pos, subtype, static_level, array),
    range (range)
    { }

  tree_kind kind ();
};

struct IIR_SignalAttr : IIR_ObjectReference {
  pIIR_ObjectReference signal;

  IIR_SignalAttr (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_ObjectReference (pos, subtype, static_level),
    signal (signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_DELAYED : IIR_SignalAttr {
  pIIR_Expression delay;

  IIR_Attr_DELAYED (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal, pIIR_Expression delay) 
  : IIR_SignalAttr (pos, subtype, static_level, signal),
    delay (delay)
    { }

  tree_kind kind ();
};

struct IIR_Attr_STABLE : IIR_SignalAttr {
  pIIR_Expression duration;

  IIR_Attr_STABLE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal, pIIR_Expression duration) 
  : IIR_SignalAttr (pos, subtype, static_level, signal),
    duration (duration)
    { }

  tree_kind kind ();
};

struct IIR_Attr_QUIET : IIR_SignalAttr {
  pIIR_Expression duration;

  IIR_Attr_QUIET (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal, pIIR_Expression duration) 
  : IIR_SignalAttr (pos, subtype, static_level, signal),
    duration (duration)
    { }

  tree_kind kind ();
};

struct IIR_Attr_TRANSACTION : IIR_SignalAttr {

  IIR_Attr_TRANSACTION (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_SignalAttr (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_FunctionAttr : IIR_Expression {

  IIR_FunctionAttr (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_AttrSigFunc : IIR_FunctionAttr {
  pIIR_ObjectReference signal;

  IIR_AttrSigFunc (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_FunctionAttr (pos, subtype, static_level),
    signal (signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_EVENT : IIR_AttrSigFunc {

  IIR_Attr_EVENT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ACTIVE : IIR_AttrSigFunc {

  IIR_Attr_ACTIVE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LAST_EVENT : IIR_AttrSigFunc {

  IIR_Attr_LAST_EVENT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LAST_ACTIVE : IIR_AttrSigFunc {

  IIR_Attr_LAST_ACTIVE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LAST_VALUE : IIR_AttrSigFunc {

  IIR_Attr_LAST_VALUE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_DRIVING : IIR_AttrSigFunc {

  IIR_Attr_DRIVING (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_Attr_DRIVING_VALUE : IIR_AttrSigFunc {

  IIR_Attr_DRIVING_VALUE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_ObjectReference signal) 
  : IIR_AttrSigFunc (pos, subtype, static_level, signal)
    { }

  tree_kind kind ();
};

struct IIR_ValueAttr : IIR_Expression {

  IIR_ValueAttr (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level) 
  : IIR_Expression (pos, subtype, static_level)
    { }

  tree_kind kind ();
};

struct IIR_AttrTypeValue : IIR_ValueAttr {
  pIIR_Type prefix;
  pIIR_Expression argument;

  IIR_AttrTypeValue (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_ValueAttr (pos, subtype, static_level),
    prefix (prefix),
    argument (argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LEFT : IIR_AttrTypeValue {

  IIR_Attr_LEFT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_RIGHT : IIR_AttrTypeValue {

  IIR_Attr_RIGHT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LOW : IIR_AttrTypeValue {

  IIR_Attr_LOW (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_HIGH : IIR_AttrTypeValue {

  IIR_Attr_HIGH (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ASCENDING : IIR_AttrTypeValue {

  IIR_Attr_ASCENDING (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LENGTH : IIR_AttrTypeValue {

  IIR_Attr_LENGTH (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeValue (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_AttrTypeFunc : IIR_FunctionAttr {
  pIIR_Type prefix;
  pIIR_Expression argument;

  IIR_AttrTypeFunc (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_FunctionAttr (pos, subtype, static_level),
    prefix (prefix),
    argument (argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_IMAGE : IIR_AttrTypeFunc {

  IIR_Attr_IMAGE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_VALUE : IIR_AttrTypeFunc {

  IIR_Attr_VALUE (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_POS : IIR_AttrTypeFunc {

  IIR_Attr_POS (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_VAL : IIR_AttrTypeFunc {

  IIR_Attr_VAL (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_SUCC : IIR_AttrTypeFunc {

  IIR_Attr_SUCC (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_PRED : IIR_AttrTypeFunc {

  IIR_Attr_PRED (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_LEFTOF : IIR_AttrTypeFunc {

  IIR_Attr_LEFTOF (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_Attr_RIGHTOF : IIR_AttrTypeFunc {

  IIR_Attr_RIGHTOF (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Type prefix, pIIR_Expression argument) 
  : IIR_AttrTypeFunc (pos, subtype, static_level, prefix, argument)
    { }

  tree_kind kind ();
};

struct IIR_AttrArrayFunc : IIR_FunctionAttr {
  pIIR_Expression array;
  pIIR_Type array_type;
  int index;

  IIR_AttrArrayFunc (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_FunctionAttr (pos, subtype, static_level),
    array (array),
    array_type (array_type),
    index (index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayLEFT : IIR_AttrArrayFunc {

  IIR_Attr_ArrayLEFT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayRIGHT : IIR_AttrArrayFunc {

  IIR_Attr_ArrayRIGHT (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayHIGH : IIR_AttrArrayFunc {

  IIR_Attr_ArrayHIGH (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayLOW : IIR_AttrArrayFunc {

  IIR_Attr_ArrayLOW (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayASCENDING : IIR_AttrArrayFunc {

  IIR_Attr_ArrayASCENDING (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_Attr_ArrayLENGTH : IIR_AttrArrayFunc {

  IIR_Attr_ArrayLENGTH (pIIR_PosInfo pos, pIIR_Type subtype, IR_StaticLevel static_level, pIIR_Expression array, pIIR_Type array_type, int index) 
  : IIR_AttrArrayFunc (pos, subtype, static_level, array, array_type, index)
    { }

  tree_kind kind ();
};

struct IIR_SequentialStatement : IIR_Root {
  pIIR_Label label;

  IIR_SequentialStatement (pIIR_PosInfo pos, pIIR_Label label) 
  : IIR_Root (pos),
    label (label)
    { }

  tree_kind kind ();
};

struct IIR_WaitStatement : IIR_SequentialStatement {
  pIIR_Expression condition_clause;
  pIIR_Expression timeout_clause;
  pIIR_ExpressionList sensitivity_list;

  IIR_WaitStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression condition_clause, pIIR_Expression timeout_clause, pIIR_ExpressionList sensitivity_list) 
  : IIR_SequentialStatement (pos, label),
    condition_clause (condition_clause),
    timeout_clause (timeout_clause),
    sensitivity_list (sensitivity_list)
    { }

  tree_kind kind ();
};

struct IIR_AssertionStatement : IIR_SequentialStatement {
  pIIR_Expression assertion_condition;
  pIIR_Expression report_expression;
  pIIR_Expression severity_expression;

  IIR_AssertionStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression assertion_condition, pIIR_Expression report_expression, pIIR_Expression severity_expression) 
  : IIR_SequentialStatement (pos, label),
    assertion_condition (assertion_condition),
    report_expression (report_expression),
    severity_expression (severity_expression)
    { }

  tree_kind kind ();
};

struct IIR_ReportStatement : IIR_SequentialStatement {
  pIIR_Expression report_expression;
  pIIR_Expression severity_expression;

  IIR_ReportStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression report_expression, pIIR_Expression severity_expression) 
  : IIR_SequentialStatement (pos, label),
    report_expression (report_expression),
    severity_expression (severity_expression)
    { }

  tree_kind kind ();
};

struct IIR_SignalAssignmentStatement : IIR_SequentialStatement {
  pIIR_Expression target;
  IR_DelayMechanism delay_mechanism;
  pIIR_Expression reject_time_expression;
  pIIR_WaveformList waveform;

  IIR_SignalAssignmentStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression target, IR_DelayMechanism delay_mechanism, pIIR_Expression reject_time_expression, pIIR_WaveformList waveform) 
  : IIR_SequentialStatement (pos, label),
    target (target),
    delay_mechanism (delay_mechanism),
    reject_time_expression (reject_time_expression),
    waveform (waveform)
    { }

  tree_kind kind ();
};

struct IIR_VariableAssignmentStatement : IIR_SequentialStatement {
  pIIR_Expression target;
  pIIR_Expression expression;

  IIR_VariableAssignmentStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression target, pIIR_Expression expression) 
  : IIR_SequentialStatement (pos, label),
    target (target),
    expression (expression)
    { }

  tree_kind kind ();
};

struct IIR_ProcedureCallStatement : IIR_SequentialStatement {
  pIIR_ProcedureDeclaration procedure;
  pIIR_AssociationList actual_parameter_part;

  IIR_ProcedureCallStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_ProcedureDeclaration procedure, pIIR_AssociationList actual_parameter_part) 
  : IIR_SequentialStatement (pos, label),
    procedure (procedure),
    actual_parameter_part (actual_parameter_part)
    { }

  tree_kind kind ();
};

struct IIR_IfStatement : IIR_SequentialStatement {
  pIIR_Expression condition;
  pIIR_SequentialStatementList then_sequence;
  pIIR_SequentialStatementList else_sequence;

  IIR_IfStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression condition, pIIR_SequentialStatementList then_sequence, pIIR_SequentialStatementList else_sequence) 
  : IIR_SequentialStatement (pos, label),
    condition (condition),
    then_sequence (then_sequence),
    else_sequence (else_sequence)
    { }

  tree_kind kind ();
};

struct IIR_CaseStatement : IIR_SequentialStatement {
  pIIR_Expression expression;
  pIIR_CaseStatementAlternativeList case_statement_alternatives;

  IIR_CaseStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_Expression expression, pIIR_CaseStatementAlternativeList case_statement_alternatives) 
  : IIR_SequentialStatement (pos, label),
    expression (expression),
    case_statement_alternatives (case_statement_alternatives)
    { }

  tree_kind kind ();
};

struct IIR_LoopStatement : IIR_SequentialStatement {
  pIIR_SequentialStatementList sequence_of_statements;
  pIIR_LoopDeclarativeRegion declarative_region;

  IIR_LoopStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_SequentialStatementList sequence_of_statements, pIIR_LoopDeclarativeRegion declarative_region) 
  : IIR_SequentialStatement (pos, label),
    sequence_of_statements (sequence_of_statements),
    declarative_region (declarative_region)
    { }

  tree_kind kind ();
};

struct IIR_ForLoopStatement : IIR_LoopStatement {
  pIIR_ConstantDeclaration iterator;

  IIR_ForLoopStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_SequentialStatementList sequence_of_statements, pIIR_LoopDeclarativeRegion declarative_region, pIIR_ConstantDeclaration iterator) 
  : IIR_LoopStatement (pos, label, sequence_of_statements, declarative_region),
    iterator (iterator)
    { }

  tree_kind kind ();
};

struct IIR_WhileLoopStatement : IIR_LoopStatement {
  pIIR_Expression condition;

  IIR_WhileLoopStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_SequentialStatementList sequence_of_statements, pIIR_LoopDeclarativeRegion declarative_region, pIIR_Expression condition) 
  : IIR_LoopStatement (pos, label, sequence_of_statements, declarative_region),
    condition (condition)
    { }

  tree_kind kind ();
};

struct IIR_LoopControlStatement : IIR_SequentialStatement {
  pIIR_LoopStatement loop;
  pIIR_Expression condition;

  IIR_LoopControlStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_LoopStatement loop, pIIR_Expression condition) 
  : IIR_SequentialStatement (pos, label),
    loop (loop),
    condition (condition)
    { }

  tree_kind kind ();
};

struct IIR_NextStatement : IIR_LoopControlStatement {

  IIR_NextStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_LoopStatement loop, pIIR_Expression condition) 
  : IIR_LoopControlStatement (pos, label, loop, condition)
    { }

  tree_kind kind ();
};

struct IIR_ExitStatement : IIR_LoopControlStatement {

  IIR_ExitStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_LoopStatement loop, pIIR_Expression condition) 
  : IIR_LoopControlStatement (pos, label, loop, condition)
    { }

  tree_kind kind ();
};

struct IIR_ReturnStatement : IIR_SequentialStatement {
  pIIR_SubprogramDeclaration enclosing_subprogram;
  pIIR_Expression return_expression;

  IIR_ReturnStatement (pIIR_PosInfo pos, pIIR_Label label, pIIR_SubprogramDeclaration enclosing_subprogram, pIIR_Expression return_expression) 
  : IIR_SequentialStatement (pos, label),
    enclosing_subprogram (enclosing_subprogram),
    return_expression (return_expression)
    { }

  tree_kind kind ();
};

struct IIR_NullStatement : IIR_SequentialStatement {

  IIR_NullStatement (pIIR_PosInfo pos, pIIR_Label label) 
  : IIR_SequentialStatement (pos, label)
    { }

  tree_kind kind ();
};

struct IIR_ConcurrentStatement : IIR_DeclarativeRegion {

  IIR_ConcurrentStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations) 
  : IIR_DeclarativeRegion (pos, declarator, declarative_region, attributes, seqno, continued, declarations)
    { }

  tree_kind kind ();
};

struct IIR_BlockStatement : IIR_ConcurrentStatement {
  pIIR_Expression guard_expression;
  pIIR_InterfaceList generic_clause;
  pIIR_AssociationList generic_map_aspect;
  pIIR_InterfaceList port_clause;
  pIIR_AssociationList port_map_aspect;
  pIIR_ConfigurationSpecificationList configuration_specifications;
  pIIR_ConcurrentStatementList block_statement_part;

  IIR_BlockStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_Expression guard_expression, pIIR_InterfaceList generic_clause, pIIR_AssociationList generic_map_aspect, pIIR_InterfaceList port_clause, pIIR_AssociationList port_map_aspect, pIIR_ConfigurationSpecificationList configuration_specifications, pIIR_ConcurrentStatementList block_statement_part) 
  : IIR_ConcurrentStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    guard_expression (guard_expression),
    generic_clause (generic_clause),
    generic_map_aspect (generic_map_aspect),
    port_clause (port_clause),
    port_map_aspect (port_map_aspect),
    configuration_specifications (configuration_specifications),
    block_statement_part (block_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_ProcessStatement : IIR_ConcurrentStatement {
  bool postponed;
  bool guarded;
  pIIR_SequentialStatementList process_statement_part;

  IIR_ProcessStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, bool postponed, bool guarded, pIIR_SequentialStatementList process_statement_part) 
  : IIR_ConcurrentStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    postponed (postponed),
    guarded (guarded),
    process_statement_part (process_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_ImplicitProcessStatement : IIR_ProcessStatement {

  IIR_ImplicitProcessStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, bool postponed, bool guarded, pIIR_SequentialStatementList process_statement_part) 
  : IIR_ProcessStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations, postponed, guarded, process_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_SensitizedProcessStatement : IIR_ProcessStatement {
  pIIR_ExpressionList sensitivity_list;

  IIR_SensitizedProcessStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, bool postponed, bool guarded, pIIR_SequentialStatementList process_statement_part, pIIR_ExpressionList sensitivity_list) 
  : IIR_ProcessStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations, postponed, guarded, process_statement_part),
    sensitivity_list (sensitivity_list)
    { }

  tree_kind kind ();
};

struct IIR_ComponentInstantiationStatement : IIR_ConcurrentStatement {
  pIIR_BindingIndication binding;
  pIIR_BindingIndication configuration;

  IIR_ComponentInstantiationStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_BindingIndication binding, pIIR_BindingIndication configuration) 
  : IIR_ConcurrentStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    binding (binding),
    configuration (configuration)
    { }

  tree_kind kind ();
};

struct IIR_ConcurrentGenerateStatement : IIR_ConcurrentStatement {
  pIIR_ConfigurationSpecificationList configuration_specifications;
  pIIR_ConcurrentStatementList concurrent_statement_part;

  IIR_ConcurrentGenerateStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_ConfigurationSpecificationList configuration_specifications, pIIR_ConcurrentStatementList concurrent_statement_part) 
  : IIR_ConcurrentStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations),
    configuration_specifications (configuration_specifications),
    concurrent_statement_part (concurrent_statement_part)
    { }

  tree_kind kind ();
};

struct IIR_ConcurrentGenerateForStatement : IIR_ConcurrentGenerateStatement {
  pIIR_ConstantDeclaration generate_parameter_specification;

  IIR_ConcurrentGenerateForStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_ConfigurationSpecificationList configuration_specifications, pIIR_ConcurrentStatementList concurrent_statement_part, pIIR_ConstantDeclaration generate_parameter_specification) 
  : IIR_ConcurrentGenerateStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations, configuration_specifications, concurrent_statement_part),
    generate_parameter_specification (generate_parameter_specification)
    { }

  tree_kind kind ();
};

struct IIR_ConcurrentGenerateIfStatement : IIR_ConcurrentGenerateStatement {
  pIIR_Expression condition;

  IIR_ConcurrentGenerateIfStatement (pIIR_PosInfo pos, pIIR_TextLiteral declarator, pIIR_DeclarativeRegion declarative_region, pIIR_AttributeValueList attributes, int seqno, pIIR_DeclarativeRegion continued, pIIR_DeclarationList declarations, pIIR_ConfigurationSpecificationList configuration_specifications, pIIR_ConcurrentStatementList concurrent_statement_part, pIIR_Expression condition) 
  : IIR_ConcurrentGenerateStatement (pos, declarator, declarative_region, attributes, seqno, continued, declarations, configuration_specifications, concurrent_statement_part),
    condition (condition)
    { }

  tree_kind kind ();
};

void init_fire_chunk ();

#endif
