aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-09-04 07:11:38 +0200
committerTristan Gingold <tgingold@free.fr>2016-09-04 07:24:30 +0200
commitd99f387f2391531eeba31a0cd143a39a2b6cd011 (patch)
tree281e98bfa8af73fef1f32bc79af9811031bbdbe5 /src/vhdl/translate
parentc553937361b0b9f20b0445b75a296559911a3e53 (diff)
downloadghdl-d99f387f2391531eeba31a0cd143a39a2b6cd011.tar.gz
ghdl-d99f387f2391531eeba31a0cd143a39a2b6cd011.tar.bz2
ghdl-d99f387f2391531eeba31a0cd143a39a2b6cd011.zip
vhdl08: preliminary work to support nested package bodies.
Diffstat (limited to 'src/vhdl/translate')
-rw-r--r--src/vhdl/translate/trans-chap2.adb9
-rw-r--r--src/vhdl/translate/trans-chap4.adb3
-rw-r--r--src/vhdl/translate/trans-rtis.adb11
3 files changed, 19 insertions, 4 deletions
diff --git a/src/vhdl/translate/trans-chap2.adb b/src/vhdl/translate/trans-chap2.adb
index d5837d304..1273760fa 100644
--- a/src/vhdl/translate/trans-chap2.adb
+++ b/src/vhdl/translate/trans-chap2.adb
@@ -865,8 +865,9 @@ package body Trans.Chap2 is
procedure Translate_Package_Body (Bod : Iir_Package_Body)
is
- Spec : constant Iir_Package_Declaration := Get_Package (Bod);
- Info : constant Ortho_Info_Acc := Get_Info (Spec);
+ Is_Nested : constant Boolean := Is_Nested_Package (Bod);
+ Spec : constant Iir_Package_Declaration := Get_Package (Bod);
+ Info : constant Ortho_Info_Acc := Get_Info (Spec);
Prev_Subprg_Instance : Subprgs.Subprg_Instance_Stack;
Prev_Storage : constant O_Storage := Global_Storage;
begin
@@ -916,7 +917,9 @@ package body Trans.Chap2 is
Subprgs.Pop_Subprg_Instance (Wki_Instance, Prev_Subprg_Instance);
end if;
- Elab_Package_Body (Spec, Bod);
+ if not Is_Nested then
+ Elab_Package_Body (Spec, Bod);
+ end if;
Global_Storage := Prev_Storage;
end Translate_Package_Body;
diff --git a/src/vhdl/translate/trans-chap4.adb b/src/vhdl/translate/trans-chap4.adb
index 0f78919a3..3e7f18b75 100644
--- a/src/vhdl/translate/trans-chap4.adb
+++ b/src/vhdl/translate/trans-chap4.adb
@@ -2453,7 +2453,8 @@ package body Trans.Chap4 is
| Iir_Kind_Group_Declaration =>
null;
- when Iir_Kind_Package_Declaration =>
+ when Iir_Kind_Package_Declaration
+ | Iir_Kind_Package_Body =>
declare
Nested_Final : Boolean;
begin
diff --git a/src/vhdl/translate/trans-rtis.adb b/src/vhdl/translate/trans-rtis.adb
index da69bd9b3..8c06460aa 100644
--- a/src/vhdl/translate/trans-rtis.adb
+++ b/src/vhdl/translate/trans-rtis.adb
@@ -2298,6 +2298,17 @@ package body Trans.Rtis is
Generate_Block (Decl, Parent_Rti);
Pop_Identifier_Prefix (Mark);
end;
+ when Iir_Kind_Package_Body =>
+ declare
+ Mark : Id_Mark_Type;
+ Mark1 : Id_Mark_Type;
+ begin
+ Push_Identifier_Prefix (Mark, Get_Identifier (Decl));
+ Push_Identifier_Prefix (Mark1, "BODY");
+ Generate_Block (Decl, Parent_Rti);
+ Pop_Identifier_Prefix (Mark1);
+ Pop_Identifier_Prefix (Mark);
+ end;
when others =>
Error_Kind ("rti.generate_declaration_chain", Decl);