aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-05-29 08:43:24 +0200
committerTristan Gingold <tgingold@free.fr>2022-05-29 08:43:24 +0200
commit24bc050b6b8025f4906735bf61c3d836fad2e48c (patch)
tree36551a470d82eecd43d99308664370f364baeb4f /src
parent59f8a3d59f23bd787c95d5ba3258e3a0384dd61c (diff)
downloadghdl-24bc050b6b8025f4906735bf61c3d836fad2e48c.tar.gz
ghdl-24bc050b6b8025f4906735bf61c3d836fad2e48c.tar.bz2
ghdl-24bc050b6b8025f4906735bf61c3d836fad2e48c.zip
elab-vhdl_objtypes: add unshare with areapool
Diffstat (limited to 'src')
-rw-r--r--src/synth/elab-vhdl_objtypes.adb12
-rw-r--r--src/synth/elab-vhdl_objtypes.ads1
2 files changed, 13 insertions, 0 deletions
diff --git a/src/synth/elab-vhdl_objtypes.adb b/src/synth/elab-vhdl_objtypes.adb
index d1d263948..0b876ffeb 100644
--- a/src/synth/elab-vhdl_objtypes.adb
+++ b/src/synth/elab-vhdl_objtypes.adb
@@ -796,6 +796,18 @@ package body Elab.Vhdl_Objtypes is
end loop;
end Copy_Memory;
+ function Unshare (Src : Memtyp; Pool : Areapool_Acc) return Memtyp
+ is
+ Prev_Pool : constant Areapool_Acc := Current_Pool;
+ Res : Memory_Ptr;
+ begin
+ Current_Pool := Pool;
+ Res := Alloc_Memory (Src.Typ);
+ Copy_Memory (Res, Src.Mem, Src.Typ.Sz);
+ Current_Pool := Prev_Pool;
+ return (Src.Typ, Res);
+ end Unshare;
+
function Unshare (Src : Memtyp) return Memtyp
is
Res : Memory_Ptr;
diff --git a/src/synth/elab-vhdl_objtypes.ads b/src/synth/elab-vhdl_objtypes.ads
index c8797e069..257065e5c 100644
--- a/src/synth/elab-vhdl_objtypes.ads
+++ b/src/synth/elab-vhdl_objtypes.ads
@@ -300,6 +300,7 @@ package Elab.Vhdl_Objtypes is
procedure Copy_Memory (Dest : Memory_Ptr; Src : Memory_Ptr; Sz : Size_Type);
function Unshare (Src : Memtyp) return Memtyp;
+ function Unshare (Src : Memtyp; Pool : Areapool_Acc) return Memtyp;
procedure Initialize;
procedure Finalize;