diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-09-19 06:21:53 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-09-19 06:32:17 +0200 |
commit | b93769c93d695b4dc77199bdab041da50b1fb5ff (patch) | |
tree | 66186b8e57c53bd7ac5cb3cb1f17c61479a90d3f /src/synth/synth-context.adb | |
parent | f659edc23a249a35e78956054afed0fdc256d127 (diff) | |
download | ghdl-b93769c93d695b4dc77199bdab041da50b1fb5ff.tar.gz ghdl-b93769c93d695b4dc77199bdab041da50b1fb5ff.tar.bz2 ghdl-b93769c93d695b4dc77199bdab041da50b1fb5ff.zip |
synth: make synth_instance_type private.
Diffstat (limited to 'src/synth/synth-context.adb')
-rw-r--r-- | src/synth/synth-context.adb | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/src/synth/synth-context.adb b/src/synth/synth-context.adb index 8b0b190dc..e89a29e11 100644 --- a/src/synth/synth-context.adb +++ b/src/synth/synth-context.adb @@ -38,14 +38,16 @@ package body Synth.Context is Table_Low_Bound => 1, Table_Initial => 16); - function Make_Instance (Parent : Synth_Instance_Acc; Info : Sim_Info_Acc) + function Make_Instance (Parent : Synth_Instance_Acc; + Info : Sim_Info_Acc; + Name : Sname := No_Sname) return Synth_Instance_Acc is Res : Synth_Instance_Acc; begin Res := new Synth_Instance_Type'(Max_Objs => Info.Nbr_Objects, M => No_Module, - Name => No_Sname, + Name => Name, Block_Scope => Info, Up_Block => Parent, Elab_Objects => 0, @@ -61,6 +63,27 @@ package body Synth.Context is Deallocate (Synth_Inst); end Free_Instance; + procedure Set_Module (Inst : Synth_Instance_Acc; M : Module) is + begin + Inst.M := M; + end Set_Module; + + function Get_Module (Inst : Synth_Instance_Acc) return Module is + begin + return Inst.M; + end Get_Module; + + function Get_Sname (Inst : Synth_Instance_Acc) return Sname is + begin + return Inst.Name; + end Get_Sname; + + procedure Set_Block_Scope + (Inst : Synth_Instance_Acc; Scope : Sim_Info_Acc) is + begin + Inst.Block_Scope := Scope; + end Set_Block_Scope; + function Create_Value_Instance (Inst : Synth_Instance_Acc) return Value_Acc is begin @@ -120,15 +143,35 @@ package body Synth.Context is Syn_Inst.Elab_Objects := Slot + Num - 1; end Create_Object; - procedure Create_Object + procedure Create_Object_Force (Syn_Inst : Synth_Instance_Acc; Decl : Iir; Val : Value_Acc) is Info : constant Sim_Info_Acc := Get_Info (Decl); begin - Create_Object (Syn_Inst, Info.Slot, 1); + pragma Assert (Syn_Inst.Objects (Info.Slot) = null); Syn_Inst.Objects (Info.Slot) := Val; + end Create_Object_Force; + + procedure Create_Object + (Syn_Inst : Synth_Instance_Acc; Decl : Iir; Val : Value_Acc) + is + Info : constant Sim_Info_Acc := Get_Info (Decl); + begin + if Syn_Inst /= Global_Instance then + Create_Object (Syn_Inst, Info.Slot, 1); + end if; + Create_Object_Force (Syn_Inst, Decl, Val); end Create_Object; + procedure Create_Package_Object + (Syn_Inst : Synth_Instance_Acc; Decl : Iir; Val : Value_Acc) + is + Info : constant Sim_Info_Acc := Get_Info (Decl); + begin + pragma Assert (Syn_Inst.Objects (Info.Pkg_Slot) = null); + Syn_Inst.Objects (Info.Pkg_Slot) := Val; + end Create_Package_Object; + procedure Destroy_Object (Syn_Inst : Synth_Instance_Acc; Decl : Iir) is |