aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans_analyzes.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-10-21 08:50:52 +0200
committerTristan Gingold <tgingold@free.fr>2016-11-01 13:11:42 +0100
commitd5f2c69f322973e62d4bd61cd659317397efd4bc (patch)
treedd937d4b86d31b755474d30970b35ed7fe63d648 /src/vhdl/translate/trans_analyzes.adb
parenta98d989710eec4b44d2532bd31c8fbba209c8172 (diff)
downloadghdl-d5f2c69f322973e62d4bd61cd659317397efd4bc.tar.gz
ghdl-d5f2c69f322973e62d4bd61cd659317397efd4bc.tar.bz2
ghdl-d5f2c69f322973e62d4bd61cd659317397efd4bc.zip
Add translation for selected signal assignment.
Diffstat (limited to 'src/vhdl/translate/trans_analyzes.adb')
-rw-r--r--src/vhdl/translate/trans_analyzes.adb28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/vhdl/translate/trans_analyzes.adb b/src/vhdl/translate/trans_analyzes.adb
index 427989935..93701819e 100644
--- a/src/vhdl/translate/trans_analyzes.adb
+++ b/src/vhdl/translate/trans_analyzes.adb
@@ -66,7 +66,7 @@ package body Trans_Analyzes is
Status : Walk_Status;
pragma Unreferenced (Status);
begin
- case Get_Kind (Stmt) is
+ case Iir_Kinds_Sequential_Statement (Get_Kind (Stmt)) is
when Iir_Kind_Simple_Signal_Assignment_Statement =>
Extract_Has_After (Get_Waveform_Chain (Stmt));
Status := Walk_Assignment_Target
@@ -83,6 +83,18 @@ package body Trans_Analyzes is
Status := Walk_Assignment_Target
(Get_Target (Stmt), Extract_Driver_Target'Access);
end;
+ when Iir_Kind_Selected_Waveform_Assignment_Statement =>
+ declare
+ Swf : Iir;
+ begin
+ Swf := Get_Selected_Waveform_Chain (Stmt);
+ while Swf /= Null_Iir loop
+ Extract_Has_After (Get_Associated_Chain (Swf));
+ Swf := Get_Chain (Swf);
+ end loop;
+ Status := Walk_Assignment_Target
+ (Get_Target (Stmt), Extract_Driver_Target'Access);
+ end;
when Iir_Kind_Procedure_Call_Statement =>
declare
Call : constant Iir := Get_Procedure_Call (Stmt);
@@ -109,7 +121,19 @@ package body Trans_Analyzes is
Next_Association_Interface (Assoc, Inter);
end loop;
end;
- when others =>
+ when Iir_Kind_Null_Statement
+ | Iir_Kind_Assertion_Statement
+ | Iir_Kind_Report_Statement
+ | Iir_Kind_Wait_Statement
+ | Iir_Kind_Return_Statement
+ | Iir_Kind_Next_Statement
+ | Iir_Kind_Exit_Statement
+ | Iir_Kind_Variable_Assignment_Statement
+ | Iir_Kind_Conditional_Variable_Assignment_Statement
+ | Iir_Kind_For_Loop_Statement
+ | Iir_Kind_While_Loop_Statement
+ | Iir_Kind_Case_Statement
+ | Iir_Kind_If_Statement =>
null;
end case;
return Walk_Continue;