summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kompsos-collector.adb14
-rw-r--r--src/kompsos-collector.ads3
2 files changed, 13 insertions, 4 deletions
diff --git a/src/kompsos-collector.adb b/src/kompsos-collector.adb
index c95453e..d7c40eb 100644
--- a/src/kompsos-collector.adb
+++ b/src/kompsos-collector.adb
@@ -197,6 +197,7 @@ package body Kompsos.Collector is
if Book.Contains (Ptr.Actual) then
Reset (Constant_World_Access (Book.Element (Ptr.Actual).Con_Part));
Free (Book (Ptr.Actual).Con_Part);
+ Free (Book (Ptr.Actual).Con_Base);
Book.Delete (Ptr.Actual);
end if;
Reset (Ptr.Actual.Con_World'Unchecked_Access);
@@ -336,6 +337,13 @@ package body Kompsos.Collector is
when Conjunct_Node =>
if not Book.Contains (Ptr) then
Book.Insert (Ptr, (Kind => Conjunct_Data, others => <>));
+ if not Get_Next (Ptr.Con_World'Unchecked_Access, 1, Result) then
+ Book (Ptr).Con_Gone := True;
+ else
+ Book (Ptr).Con_Base := new World'(World (Static (Result)));
+ Book (Ptr).Con_Part := new World'(Call_Lazy
+ (Book.Element (Ptr).Con_Base.all, Ptr.Con_Data));
+ end if;
end if;
if Book (Ptr).Con_Gone then
return False;
@@ -346,18 +354,18 @@ package body Kompsos.Collector is
Result)
loop
Reset (Constant_World_Access (Book.Element (Ptr).Con_Part));
- Free (Book (Ptr).Con_Part);
if Get_Next
(Ptr.Con_World'Unchecked_Access,
Book.Element (Ptr).Con_From,
Result)
then
- Book (Ptr).Con_Part :=
- new World'(Call_Lazy (World (Static (Result)), Ptr.Con_Data));
+ Book (Ptr).Con_Base.Actual.Stc_States (1) := Result;
Book (Ptr).Con_Next := 1;
Book (Ptr).Con_From := Book.Element (Ptr).Con_From + 1;
else
Book (Ptr).Con_Gone := True;
+ Free (Book (Ptr).Con_Part);
+ Free (Book (Ptr).Con_Base);
return False;
end if;
end loop;
diff --git a/src/kompsos-collector.ads b/src/kompsos-collector.ads
index 8743ecc..d3e22a1 100644
--- a/src/kompsos-collector.ads
+++ b/src/kompsos-collector.ads
@@ -58,8 +58,9 @@ private
Dis_Gone1 : Boolean := False;
Dis_Gone2 : Boolean := False;
when Conjunct_Data =>
+ Con_From : Long_Positive := 2; -- Number one will be obtained by Get_Next already
+ Con_Base : World_Access := null;
Con_Part : World_Access := null;
- Con_From : Long_Positive := 1;
Con_Next : Long_Positive := 1;
Con_Gone : Boolean := False;
when Recurse_Data =>