diff options
author | Tristan Gingold <tgingold@free.fr> | 2017-05-14 21:00:54 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2017-05-18 07:59:34 +0200 |
commit | e67b8103bd40953fbe0dec6e7c476c88ca1801c8 (patch) | |
tree | 3c78f834d4c5533b3d9e751e8baaf457a201c127 /src/vhdl/translate/trans.adb | |
parent | 37614e632530b255437d8ed2b6258a5bbc23e522 (diff) | |
download | ghdl-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.adb | 15 |
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; |