aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2023-03-22 03:38:34 +0100
committerTristan Gingold <tgingold@free.fr>2023-03-22 04:39:50 +0100
commit827588370d9c3ce38beb646f99a081f52fcc91b6 (patch)
tree82600024f041832fe68e7e29398a5da88a737dee /src
parentc715b1955ae3fa52a1b4291648ffa212ccec11a5 (diff)
downloadghdl-827588370d9c3ce38beb646f99a081f52fcc91b6.tar.gz
ghdl-827588370d9c3ce38beb646f99a081f52fcc91b6.tar.bz2
ghdl-827588370d9c3ce38beb646f99a081f52fcc91b6.zip
trans-chap2: improve support for nested package instantiation
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/translate/trans-chap2.adb9
-rw-r--r--src/vhdl/translate/trans-chap4.adb31
2 files changed, 28 insertions, 12 deletions
diff --git a/src/vhdl/translate/trans-chap2.adb b/src/vhdl/translate/trans-chap2.adb
index 6bf69a8fb..b95f0eee0 100644
--- a/src/vhdl/translate/trans-chap2.adb
+++ b/src/vhdl/translate/trans-chap2.adb
@@ -1686,15 +1686,18 @@ package body Trans.Chap2 is
-- Macro-expanded instances are handled like a regular package.
if Get_Macro_Expanded_Flag (Spec) then
declare
+ Spec_Parent : constant Iir := Get_Parent (Spec);
Bod : constant Iir := Get_Package_Body (Spec);
Inst_Bod : constant Iir := Get_Instance_Package_Body (Inst);
Final : Boolean;
begin
-- There are no routines generated to elaborate macro-expanded
-- packages, but dependencies still need to be elaborated.
- Elab_Dependence (Get_Design_Unit (Spec));
- if Bod /= Null_Iir then
- Elab_Dependence (Get_Design_Unit (Bod));
+ if Get_Kind (Spec_Parent) = Iir_Kind_Design_Unit then
+ Elab_Dependence (Get_Design_Unit (Spec));
+ if Bod /= Null_Iir then
+ Elab_Dependence (Get_Design_Unit (Bod));
+ end if;
end if;
Elab_Package (Inst, Inst);
diff --git a/src/vhdl/translate/trans-chap4.adb b/src/vhdl/translate/trans-chap4.adb
index 41a83b8c8..ab1633eaf 100644
--- a/src/vhdl/translate/trans-chap4.adb
+++ b/src/vhdl/translate/trans-chap4.adb
@@ -2596,6 +2596,23 @@ package body Trans.Chap4 is
Create_Union_Scope (State_Scope.all, Scope_Type);
end Translate_Statements_Chain_State_Declaration;
+ -- PKG is a nested package declaration or package body
+ -- Translate only if non-generic or non-macro expanded.
+ -- SPEC is the corresponding package declaration.
+ procedure Translate_Declaration_Chain_Subprograms_Package
+ (Pkg : Iir; Spec : Iir; What : Subprg_Translate_Kind)
+ is
+ Mark : Id_Mark_Type;
+ begin
+ if Get_Package_Header (Spec) = Null_Iir
+ or else not Get_Macro_Expanded_Flag (Spec)
+ then
+ Push_Identifier_Prefix (Mark, Get_Identifier (Pkg));
+ Translate_Declaration_Chain_Subprograms (Pkg, What);
+ Pop_Identifier_Prefix (Mark);
+ end if;
+ end Translate_Declaration_Chain_Subprograms_Package;
+
procedure Translate_Declaration_Chain_Subprograms
(Parent : Iir; What : Subprg_Translate_Kind)
is
@@ -2677,15 +2694,11 @@ package body Trans.Chap4 is
Chap3.Translate_Protected_Type_Body_Subprograms_Spec (El);
Chap3.Translate_Protected_Type_Body_Subprograms_Body (El);
end if;
- when Iir_Kind_Package_Declaration
- | Iir_Kind_Package_Body =>
- declare
- Mark : Id_Mark_Type;
- begin
- Push_Identifier_Prefix (Mark, Get_Identifier (El));
- Translate_Declaration_Chain_Subprograms (El, What);
- Pop_Identifier_Prefix (Mark);
- end;
+ when Iir_Kind_Package_Declaration =>
+ Translate_Declaration_Chain_Subprograms_Package (El, El, What);
+ when Iir_Kind_Package_Body =>
+ Translate_Declaration_Chain_Subprograms_Package
+ (El, Get_Package (El), What);
when Iir_Kind_Package_Instantiation_Declaration =>
if Get_Macro_Expanded_Flag
(Get_Uninstantiated_Package_Decl (El))