aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth/synth-context.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-09-19 06:21:53 +0200
committerTristan Gingold <tgingold@free.fr>2019-09-19 06:32:17 +0200
commitb93769c93d695b4dc77199bdab041da50b1fb5ff (patch)
tree66186b8e57c53bd7ac5cb3cb1f17c61479a90d3f /src/synth/synth-context.adb
parentf659edc23a249a35e78956054afed0fdc256d127 (diff)
downloadghdl-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.adb51
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