diff options
author | Tristan Gingold | 2015-05-27 03:51:50 +0200 |
---|---|---|
committer | Tristan Gingold | 2015-05-27 03:51:50 +0200 |
commit | 719f5418c95be27edcdfea5c437d44d2ef8c67de (patch) | |
tree | 570bec4128ffaaae3b600c3b96314682605cd815 /src/vhdl/translate/trans-chap4.adb | |
parent | 5f17068849547fa1ce7bfd6320188d9317aba7ec (diff) | |
download | ghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.tar.gz ghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.tar.bz2 ghdl-719f5418c95be27edcdfea5c437d44d2ef8c67de.zip |
Handle signal attribute in declarations. Fix alias of implicit signal.
Diffstat (limited to 'src/vhdl/translate/trans-chap4.adb')
-rw-r--r-- | src/vhdl/translate/trans-chap4.adb | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/src/vhdl/translate/trans-chap4.adb b/src/vhdl/translate/trans-chap4.adb index 3cbfc0b..2e33033 100644 --- a/src/vhdl/translate/trans-chap4.adb +++ b/src/vhdl/translate/trans-chap4.adb @@ -172,22 +172,17 @@ package body Trans.Chap4 is procedure Create_Implicit_Signal (Decl : Iir) is - Sig_Type : O_Tnode; - Type_Info : Type_Info_Acc; + Sig_Type_Def : constant Iir := Get_Type (Decl); + Type_Info : constant Type_Info_Acc := Get_Info (Sig_Type_Def); + Sig_Type : constant O_Tnode := Type_Info.Ortho_Type (Mode_Signal); Info : Ortho_Info_Acc; - Sig_Type_Def : Iir; begin - Sig_Type_Def := Get_Type (Decl); -- This has been disabled since DECL can have an anonymous subtype, -- and DECL has no identifiers, which causes translate_object_subtype -- to crash. -- Note: DECL can only be a iir_kind_delayed_attribute. --Chap3.Translate_Object_Subtype (Decl); - Type_Info := Get_Info (Sig_Type_Def); - Sig_Type := Type_Info.Ortho_Type (Mode_Signal); - if Sig_Type = O_Tnode_Null then - raise Internal_Error; - end if; + pragma Assert (Sig_Type /= O_Tnode_Null); Info := Add_Info (Decl, Kind_Object); @@ -1401,21 +1396,19 @@ package body Trans.Chap4 is procedure Translate_Object_Alias_Declaration (Decl : Iir_Object_Alias_Declaration) is - Decl_Type : Iir; + Decl_Type : constant Iir := Get_Type (Decl); Info : Alias_Info_Acc; Tinfo : Type_Info_Acc; Atype : O_Tnode; begin - Decl_Type := Get_Type (Decl); - - Chap3.Translate_Named_Type_Definition - (Decl_Type, Get_Identifier (Decl)); + Chap3.Translate_Named_Type_Definition (Decl_Type, Get_Identifier (Decl)); Info := Add_Info (Decl, Kind_Alias); case Get_Kind (Get_Object_Prefix (Decl)) is when Iir_Kind_Signal_Declaration - | Iir_Kind_Interface_Signal_Declaration - | Iir_Kind_Guard_Signal_Declaration => + | Iir_Kind_Interface_Signal_Declaration + | Iir_Kind_Guard_Signal_Declaration + | Iir_Kinds_Signal_Attribute => Info.Alias_Kind := Mode_Signal; when others => Info.Alias_Kind := Mode_Value; @@ -1454,24 +1447,18 @@ package body Trans.Chap4 is procedure Elab_Object_Alias_Declaration (Decl : Iir_Object_Alias_Declaration) is - Decl_Type : Iir; - Name : Iir; + Decl_Type : constant Iir := Get_Type (Decl); + Tinfo : constant Type_Info_Acc := Get_Info (Decl_Type); + Name : constant Iir := Get_Name (Decl); + Name_Type : constant Iir := Get_Type (Name); + Alias_Info : constant Alias_Info_Acc := Get_Info (Decl); Name_Node : Mnode; Alias_Node : Mnode; - Alias_Info : Alias_Info_Acc; - Name_Type : Iir; - Tinfo : Type_Info_Acc; Kind : Object_Kind_Type; begin New_Debug_Line_Stmt (Get_Line_Number (Decl)); - Decl_Type := Get_Type (Decl); - Tinfo := Get_Info (Decl_Type); - - Alias_Info := Get_Info (Decl); Chap3.Elab_Object_Subtype (Decl_Type); - Name := Get_Name (Decl); - Name_Type := Get_Type (Name); Name_Node := Chap6.Translate_Name (Name); Kind := Get_Object_Kind (Name_Node); |