aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2023-03-27 18:58:19 +0200
committerTristan Gingold <tgingold@free.fr>2023-03-27 18:58:19 +0200
commit413db2f74665682693f899045feb4f5bdc108c03 (patch)
tree57e3e90fbf263dde6f6a61916fc8bb995672c66c /src/synth
parent6378544fae28ee9298017a758c2844d7af86cdea (diff)
downloadghdl-413db2f74665682693f899045feb4f5bdc108c03.tar.gz
ghdl-413db2f74665682693f899045feb4f5bdc108c03.tar.bz2
ghdl-413db2f74665682693f899045feb4f5bdc108c03.zip
synth: adjust for iir_kind_package_instantiation_body
Diffstat (limited to 'src/synth')
-rw-r--r--src/synth/elab-vhdl_annotations.adb18
-rw-r--r--src/synth/elab-vhdl_decls.adb2
-rw-r--r--src/synth/elab-vhdl_insts.adb16
-rw-r--r--src/synth/elab-vhdl_insts.ads2
4 files changed, 30 insertions, 8 deletions
diff --git a/src/synth/elab-vhdl_annotations.adb b/src/synth/elab-vhdl_annotations.adb
index 83d19e225..5514df5a5 100644
--- a/src/synth/elab-vhdl_annotations.adb
+++ b/src/synth/elab-vhdl_annotations.adb
@@ -516,9 +516,11 @@ package body Elab.Vhdl_Annotations is
Bod : constant Iir := Get_Instance_Package_Body (Decl);
begin
if Bod /= Null_Iir then
- Set_Ann (Bod, Package_Info);
- Annotate_Declaration_List
- (Package_Info, Get_Declaration_Chain (Bod));
+ if Get_Immediate_Body_Flag (Decl) then
+ Set_Ann (Bod, Package_Info);
+ Annotate_Declaration_List
+ (Package_Info, Get_Declaration_Chain (Bod));
+ end if;
else
declare
Uninst : constant Iir :=
@@ -538,10 +540,13 @@ package body Elab.Vhdl_Annotations is
procedure Annotate_Package_Body (Bod: Iir)
is
+ Is_Inst : constant Boolean :=
+ Get_Kind (Bod) = Iir_Kind_Package_Instantiation_Body;
Pkg : constant Node := Get_Package (Bod);
Package_Info : constant Sim_Info_Acc := Get_Ann (Pkg);
begin
- if Is_Uninstantiated_Package (Pkg)
+ if not Is_Inst
+ and then Is_Uninstantiated_Package (Pkg)
and then Get_Macro_Expanded_Flag (Pkg)
then
-- The body of a macro-expanded flag.
@@ -568,10 +573,11 @@ package body Elab.Vhdl_Annotations is
begin
case Get_Kind (Decl) is
when Iir_Kind_Package_Declaration
- | Iir_Kind_Package_Instantiation_Declaration =>
+ | Iir_Kind_Package_Instantiation_Declaration =>
Annotate_Package_Declaration (Block_Info, Decl);
- when Iir_Kind_Package_Body =>
+ when Iir_Kind_Package_Body
+ | Iir_Kind_Package_Instantiation_Body =>
Annotate_Package_Body (Decl);
when Iir_Kind_Attribute_Implicit_Declaration =>
diff --git a/src/synth/elab-vhdl_decls.adb b/src/synth/elab-vhdl_decls.adb
index 6839ed123..cfa5a8f9a 100644
--- a/src/synth/elab-vhdl_decls.adb
+++ b/src/synth/elab-vhdl_decls.adb
@@ -322,6 +322,8 @@ package body Elab.Vhdl_Decls is
when Iir_Kind_Package_Instantiation_Declaration =>
Vhdl_Insts.Elab_Package_Instantiation (Syn_Inst, Decl);
+ when Iir_Kind_Package_Instantiation_Body =>
+ Vhdl_Insts.Elab_Package_Instantiation_Body (Syn_Inst, Decl);
when Iir_Kind_Package_Declaration =>
Vhdl_Insts.Elab_Package_Declaration (Syn_Inst, Decl);
when Iir_Kind_Package_Body =>
diff --git a/src/synth/elab-vhdl_insts.adb b/src/synth/elab-vhdl_insts.adb
index a397c6b95..25984a8fa 100644
--- a/src/synth/elab-vhdl_insts.adb
+++ b/src/synth/elab-vhdl_insts.adb
@@ -270,8 +270,10 @@ package body Elab.Vhdl_Insts is
if Bod /= Null_Node then
-- Macro expanded package instantiation.
- Elab_Declarations
- (Sub_Inst, Get_Declaration_Chain (Bod));
+ if Get_Immediate_Body_Flag (Pkg) then
+ Elab_Declarations
+ (Sub_Inst, Get_Declaration_Chain (Bod));
+ end if;
else
-- Shared body
declare
@@ -286,6 +288,16 @@ package body Elab.Vhdl_Insts is
end if;
end Elab_Package_Instantiation;
+ procedure Elab_Package_Instantiation_Body
+ (Parent_Inst : Synth_Instance_Acc; Bod : Node)
+ is
+ Sub_Inst : Synth_Instance_Acc;
+ begin
+ Sub_Inst := Get_Package_Object (Parent_Inst, Bod);
+ Elab_Declarations
+ (Sub_Inst, Get_Declaration_Chain (Bod));
+ end Elab_Package_Instantiation_Body;
+
procedure Elab_Dependencies (Parent_Inst : Synth_Instance_Acc; Unit : Node);
procedure Elab_Configuration_Declaration (Parent_Inst : Synth_Instance_Acc;
diff --git a/src/synth/elab-vhdl_insts.ads b/src/synth/elab-vhdl_insts.ads
index 7e64bb944..1e78c3329 100644
--- a/src/synth/elab-vhdl_insts.ads
+++ b/src/synth/elab-vhdl_insts.ads
@@ -39,6 +39,8 @@ package Elab.Vhdl_Insts is
(Parent_Inst : Synth_Instance_Acc; Pkg : Node; Bod : Node);
procedure Elab_Package_Instantiation
(Parent_Inst : Synth_Instance_Acc; Pkg : Node);
+ procedure Elab_Package_Instantiation_Body
+ (Parent_Inst : Synth_Instance_Acc; Bod : Node);
procedure Elab_Component_Instantiation_Statement
(Syn_Inst : Synth_Instance_Acc; Stmt : Node);