diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-03-24 18:12:51 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-03-24 18:12:51 +0100 |
commit | 371ac66310d68b72a83718891e04921a73d1d4ea (patch) | |
tree | 508b103a6d0fd1fbf5ab8175b38f3426296aaa46 /src/synth/synth-decls.adb | |
parent | 91cf6d0fbf8ab78910f74271525d9663f45e44e0 (diff) | |
download | ghdl-371ac66310d68b72a83718891e04921a73d1d4ea.tar.gz ghdl-371ac66310d68b72a83718891e04921a73d1d4ea.tar.bz2 ghdl-371ac66310d68b72a83718891e04921a73d1d4ea.zip |
synth: handle package instantiation. Fix #1159
Diffstat (limited to 'src/synth/synth-decls.adb')
-rw-r--r-- | src/synth/synth-decls.adb | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/synth/synth-decls.adb b/src/synth/synth-decls.adb index 63710b065..24e7e2a41 100644 --- a/src/synth/synth-decls.adb +++ b/src/synth/synth-decls.adb @@ -679,6 +679,7 @@ package body Synth.Decls is procedure Synth_Package_Instantiation (Parent_Inst : Synth_Instance_Acc; Pkg : Node) is + Bod : constant Node := Get_Instance_Package_Body (Pkg); Sub_Inst : Synth_Instance_Acc; begin Sub_Inst := Create_Package_Instance (Parent_Inst, Pkg); @@ -688,6 +689,24 @@ package body Synth.Decls is Get_Generic_Chain (Pkg), Get_Generic_Map_Aspect_Chain (Pkg)); Synth_Declarations (Sub_Inst, Get_Declaration_Chain (Pkg)); + + if Bod /= Null_Node then + -- Macro expended package instantiation. + raise Internal_Error; + else + -- Shared body + declare + Uninst : constant Node := Get_Uninstantiated_Package_Decl (Pkg); + Uninst_Bod : constant Node := Get_Package_Body (Uninst); + begin + Set_Uninstantiated_Scope (Sub_Inst, Uninst); + -- Synth declarations of (optional) body. + if Uninst_Bod /= Null_Node then + Synth_Declarations + (Sub_Inst, Get_Declaration_Chain (Uninst_Bod)); + end if; + end; + end if; end Synth_Package_Instantiation; procedure Synth_Variable |