aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-10-01 07:41:39 +0200
committerTristan Gingold <tgingold@free.fr>2019-10-01 07:41:39 +0200
commit92616e09b4a050ee9ba4496a3f68b6db2cb2552a (patch)
tree26d8f65385af90110b25ed4a175224e74e8e761b /src/synth
parent4ae9ffbce09663402fdff2dbacf77151d0ad81b9 (diff)
downloadghdl-92616e09b4a050ee9ba4496a3f68b6db2cb2552a.tar.gz
ghdl-92616e09b4a050ee9ba4496a3f68b6db2cb2552a.tar.bz2
ghdl-92616e09b4a050ee9ba4496a3f68b6db2cb2552a.zip
synth: handle selected element of const record.
Diffstat (limited to 'src/synth')
-rw-r--r--src/synth/synth-expr.adb13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb
index 9e5ccff6a..12579b1eb 100644
--- a/src/synth/synth-expr.adb
+++ b/src/synth/synth-expr.adb
@@ -1574,11 +1574,14 @@ package body Synth.Expr is
begin
Res := Synth_Expression (Syn_Inst, Pfx);
Res_Typ := Res.Typ.Rec.E (Idx + 1).Typ;
- -- FIXME: handle const.
- N := Build_Extract
- (Build_Context, Get_Net (Res),
- Res.Typ.Rec.E (Idx + 1).Off, Get_Type_Width (Res_Typ));
- return Create_Value_Net (N, Res_Typ);
+ if Res.Kind = Value_Const_Record then
+ return Res.Rec.V (Idx + 1);
+ else
+ N := Build_Extract
+ (Build_Context, Get_Net (Res),
+ Res.Typ.Rec.E (Idx + 1).Off, Get_Type_Width (Res_Typ));
+ return Create_Value_Net (N, Res_Typ);
+ end if;
end;
when Iir_Kind_Character_Literal =>
return Synth_Expression_With_Type