diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-06-23 11:38:01 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-06-23 11:38:01 +0200 |
commit | 54f5e47e5c3e2d2ba9aa9e671a591b42200b1187 (patch) | |
tree | 8c14d7e3c5cafb394ebf6c55225f6f5cd61bca98 /src | |
parent | 9ac639f08b3b94fb0393bb0b7d6c997975f61c19 (diff) | |
download | ghdl-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.adb | 20 |
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 |