aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-06-23 11:38:01 +0200
committerTristan Gingold <tgingold@free.fr>2019-06-23 11:38:01 +0200
commit54f5e47e5c3e2d2ba9aa9e671a591b42200b1187 (patch)
tree8c14d7e3c5cafb394ebf6c55225f6f5cd61bca98 /src
parent9ac639f08b3b94fb0393bb0b7d6c997975f61c19 (diff)
downloadghdl-54f5e47e5c3e2d2ba9aa9e671a591b42200b1187.tar.gz
ghdl-54f5e47e5c3e2d2ba9aa9e671a591b42200b1187.tar.bz2
ghdl-54f5e47e5c3e2d2ba9aa9e671a591b42200b1187.zip
synth-stmts: handle constant if statements.
Diffstat (limited to 'src')
-rw-r--r--src/synth/synth-stmts.adb20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index b5b51644d..e00cf19e4 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -192,8 +192,24 @@ package body Synth.Stmts is
begin
Cond_Val := Synth_Expression (Syn_Inst, Cond);
if Is_Const (Cond_Val) then
- -- TODO
- raise Internal_Error;
+ if Cond_Val.Scal = 1 then
+ -- True.
+ Synth_Sequential_Statements
+ (Syn_Inst, Get_Sequential_Statement_Chain (Stmt));
+ else
+ pragma Assert (Cond_Val.Scal = 0);
+ if Is_Valid (Els) then
+ -- Else part
+ if Is_Null (Get_Condition (Els)) then
+ -- Final else part.
+ Synth_Sequential_Statements
+ (Syn_Inst, Get_Sequential_Statement_Chain (Els));
+ else
+ -- Elsif. Handled as a nested if.
+ Synth_If_Statement (Syn_Inst, Els);
+ end if;
+ end if;
+ end if;
else
Push_Phi;
Synth_Sequential_Statements