aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/sem_inst.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/sem_inst.adb')
-rw-r--r--src/vhdl/sem_inst.adb45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index 3101d4219..10eac72dd 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -640,6 +640,7 @@ package body Sem_Inst is
procedure Set_Instance_On_Chain (Chain : Iir; Inst_Chain : Iir);
procedure Set_Instance_On_Iir_List (N : Iir_List; Inst : Iir_List);
+ procedure Set_Instance_On_Iir_Flist (N : Iir_Flist; Inst : Iir_Flist);
procedure Set_Instance_On_Iir (N : Iir; Inst : Iir) is
begin
@@ -719,6 +720,28 @@ package body Sem_Inst is
raise Internal_Error;
end case;
end;
+ when Type_Iir_Flist =>
+ declare
+ S : constant Iir_Flist := Get_Iir_Flist (N, F);
+ S_Inst : constant Iir_Flist := Get_Iir_Flist (Inst, F);
+ begin
+ case Get_Field_Attribute (F) is
+ when Attr_None =>
+ Set_Instance_On_Iir_Flist (S, S_Inst);
+ when Attr_Of_Maybe_Ref =>
+ if not Get_Is_Ref (N) then
+ Set_Instance_On_Iir_Flist (S, S_Inst);
+ end if;
+ when Attr_Of_Ref
+ | Attr_Ref
+ | Attr_Forward_Ref =>
+ null;
+ when others =>
+ -- Ref is specially handled in Instantiate_Iir.
+ -- Others cannot appear for lists.
+ raise Internal_Error;
+ end case;
+ end;
when others =>
null;
end case;
@@ -750,6 +773,28 @@ package body Sem_Inst is
end case;
end Set_Instance_On_Iir_List;
+ procedure Set_Instance_On_Iir_Flist (N : Iir_Flist; Inst : Iir_Flist)
+ is
+ El : Iir;
+ El_Inst : Iir;
+ begin
+ case N is
+ when Null_Iir_Flist
+ | Iir_Flist_All
+ | Iir_Flist_Others =>
+ pragma Assert (Inst = N);
+ return;
+ when others =>
+ pragma Assert (Get_Nbr_Elements (N) = Get_Nbr_Elements (Inst));
+ for I in Flist_First .. Flist_Last (N) loop
+ El := Get_Nth_Element (N, I);
+ El_Inst := Get_Nth_Element (Inst, I);
+
+ Set_Instance_On_Iir (El, El_Inst);
+ end loop;
+ end case;
+ end Set_Instance_On_Iir_Flist;
+
procedure Set_Instance_On_Chain (Chain : Iir; Inst_Chain : Iir)
is
El : Iir;