extend existing local predicate skeletons in LoadState::compile

This commit is contained in:
Mark Thom
2021-02-22 02:00:25 -07:00
parent f6498f2a7b
commit 5f8bdc564b
2 changed files with 54 additions and 7 deletions

View File

@@ -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,

View File

@@ -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