diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/translate/trans-chap2.adb | 9 | ||||
| -rw-r--r-- | src/vhdl/translate/trans-chap4.adb | 31 | 
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)) | 
