From 54f5e47e5c3e2d2ba9aa9e671a591b42200b1187 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Sun, 23 Jun 2019 11:38:01 +0200 Subject: synth-stmts: handle constant if statements. --- src/synth/synth-stmts.adb | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src') 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 -- cgit v1.2.3