aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2017-05-14 21:00:54 +0200
committerTristan Gingold <tgingold@free.fr>2017-05-18 07:59:34 +0200
commite67b8103bd40953fbe0dec6e7c476c88ca1801c8 (patch)
tree3c78f834d4c5533b3d9e751e8baaf457a201c127 /src/vhdl/translate/trans.adb
parent37614e632530b255437d8ed2b6258a5bbc23e522 (diff)
downloadghdl-e67b8103bd40953fbe0dec6e7c476c88ca1801c8.tar.gz
ghdl-e67b8103bd40953fbe0dec6e7c476c88ca1801c8.tar.bz2
ghdl-e67b8103bd40953fbe0dec6e7c476c88ca1801c8.zip
wip: rework subprogram translation.
Diffstat (limited to 'src/vhdl/translate/trans.adb')
-rw-r--r--src/vhdl/translate/trans.adb15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/vhdl/translate/trans.adb b/src/vhdl/translate/trans.adb
index d41458d08..1f9d177a4 100644
--- a/src/vhdl/translate/trans.adb
+++ b/src/vhdl/translate/trans.adb
@@ -76,14 +76,17 @@ package body Trans is
end if;
end Add_Subprg_Instance_Interfaces;
- procedure Add_Subprg_Instance_Field (Field : out O_Fnode) is
+ procedure Add_Subprg_Instance_Field
+ (Field : out O_Fnode; Prev_Scope : out Var_Scope_Acc) is
begin
if Has_Current_Subprg_Instance then
Field := Add_Instance_Factory_Field
(Current_Subprg_Instance.Ident,
Current_Subprg_Instance.Ptr_Type);
+ Prev_Scope := Current_Subprg_Instance.Scope;
else
Field := O_Fnode_Null;
+ Prev_Scope := null;
end if;
end Add_Subprg_Instance_Field;
@@ -113,7 +116,7 @@ package body Trans is
(Var : O_Dnode; Field : O_Fnode; Vars : Subprg_Instance_Type)
is
begin
- if Has_Subprg_Instance (Vars) then
+ if Has_Subprg_Instance (Vars) and then Field /= O_Fnode_Null then
New_Assign_Stmt (New_Selected_Acc_Value (New_Obj (Var), Field),
New_Obj_Value (Vars.Inter));
end if;
@@ -134,19 +137,19 @@ package body Trans is
end Finish_Subprg_Instance_Use;
procedure Start_Prev_Subprg_Instance_Use_Via_Field
- (Prev : Subprg_Instance_Stack; Field : O_Fnode) is
+ (Prev_Scope : Var_Scope_Acc; Field : O_Fnode) is
begin
if Field /= O_Fnode_Null then
- Set_Scope_Via_Field_Ptr (Prev.Scope.all, Field,
+ Set_Scope_Via_Field_Ptr (Prev_Scope.all, Field,
Current_Subprg_Instance.Scope);
end if;
end Start_Prev_Subprg_Instance_Use_Via_Field;
procedure Finish_Prev_Subprg_Instance_Use_Via_Field
- (Prev : Subprg_Instance_Stack; Field : O_Fnode) is
+ (Prev_Scope : Var_Scope_Acc; Field : O_Fnode) is
begin
if Field /= O_Fnode_Null then
- Clear_Scope (Prev.Scope.all);
+ Clear_Scope (Prev_Scope.all);
end if;
end Finish_Prev_Subprg_Instance_Use_Via_Field;