extend existing local predicate skeletons in LoadState::compile
This commit is contained in:
@@ -1099,6 +1099,29 @@ impl<'a> LoadState<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
match self
|
||||||
|
.wam
|
||||||
|
.indices
|
||||||
|
.get_local_predicate_skeleton_mut(
|
||||||
|
&self.compilation_target,
|
||||||
|
predicates.compilation_target.clone(),
|
||||||
|
key.clone(),
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Some(skeleton) => {
|
||||||
|
self.retraction_info
|
||||||
|
.push_record(RetractionRecord::SkeletonLocalClauseTruncateBack(
|
||||||
|
self.compilation_target.clone(),
|
||||||
|
predicates.compilation_target.clone(),
|
||||||
|
key.clone(),
|
||||||
|
skeleton.clause_clause_locs.len(),
|
||||||
|
));
|
||||||
|
|
||||||
|
skeleton.clause_clause_locs.extend_from_slice(
|
||||||
|
&clause_clause_locs[0 ..]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
let mut skeleton = PredicateSkeleton::new();
|
let mut skeleton = PredicateSkeleton::new();
|
||||||
skeleton.clause_clause_locs = clause_clause_locs;
|
skeleton.clause_clause_locs = clause_clause_locs;
|
||||||
|
|
||||||
@@ -1108,6 +1131,8 @@ impl<'a> LoadState<'a> {
|
|||||||
skeleton,
|
skeleton,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
set_code_index(
|
set_code_index(
|
||||||
&mut self.retraction_info,
|
&mut self.retraction_info,
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ pub(crate) enum RetractionRecord {
|
|||||||
SkeletonClausePopFront(CompilationTarget, PredicateKey),
|
SkeletonClausePopFront(CompilationTarget, PredicateKey),
|
||||||
SkeletonLocalClauseClausePopBack(CompilationTarget, CompilationTarget, PredicateKey),
|
SkeletonLocalClauseClausePopBack(CompilationTarget, CompilationTarget, PredicateKey),
|
||||||
SkeletonLocalClauseClausePopFront(CompilationTarget, CompilationTarget, PredicateKey),
|
SkeletonLocalClauseClausePopFront(CompilationTarget, CompilationTarget, PredicateKey),
|
||||||
|
SkeletonLocalClauseTruncateBack(CompilationTarget, CompilationTarget, PredicateKey, usize),
|
||||||
SkeletonClauseTruncateBack(CompilationTarget, PredicateKey, usize),
|
SkeletonClauseTruncateBack(CompilationTarget, PredicateKey, usize),
|
||||||
SkeletonClauseStartReplaced(CompilationTarget, PredicateKey, usize, usize),
|
SkeletonClauseStartReplaced(CompilationTarget, PredicateKey, usize, usize),
|
||||||
RemovedSkeletonClause(
|
RemovedSkeletonClause(
|
||||||
@@ -519,6 +520,27 @@ impl<'a> Drop for LoadState<'a> {
|
|||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RetractionRecord::SkeletonLocalClauseTruncateBack(
|
||||||
|
src_compilation_target,
|
||||||
|
local_compilation_target,
|
||||||
|
key,
|
||||||
|
len,
|
||||||
|
) => {
|
||||||
|
match self
|
||||||
|
.wam
|
||||||
|
.indices
|
||||||
|
.get_local_predicate_skeleton_mut(
|
||||||
|
&src_compilation_target,
|
||||||
|
local_compilation_target,
|
||||||
|
key,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Some(skeleton) => {
|
||||||
|
skeleton.clause_clause_locs.truncate_back(len);
|
||||||
|
}
|
||||||
|
None => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
RetractionRecord::SkeletonClauseTruncateBack(compilation_target, key, len) => {
|
RetractionRecord::SkeletonClauseTruncateBack(compilation_target, key, len) => {
|
||||||
match self
|
match self
|
||||||
.wam
|
.wam
|
||||||
|
|||||||
Reference in New Issue
Block a user