remove operators declared at user-level from files when reloading
This commit is contained in:
13
src/forms.rs
13
src/forms.rs
@@ -453,6 +453,19 @@ impl Module {
|
|||||||
listing_src,
|
listing_src,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn new_in_situ(module_decl: ModuleDecl) -> Self {
|
||||||
|
Module {
|
||||||
|
module_decl,
|
||||||
|
code_dir: CodeDir::new(),
|
||||||
|
op_dir: OpDir::new(),
|
||||||
|
meta_predicates: MetaPredicateDir::new(),
|
||||||
|
is_impromptu_module: false,
|
||||||
|
extensible_predicates: ExtensiblePredicates::new(),
|
||||||
|
local_extensible_predicates: LocalExtensiblePredicates::new(),
|
||||||
|
listing_src: ListingSource::DynamicallyGenerated,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|||||||
@@ -718,6 +718,16 @@ impl<'a> LoadState<'a> {
|
|||||||
pub(super) fn add_op_decl(&mut self, op_decl: &OpDecl) {
|
pub(super) fn add_op_decl(&mut self, op_decl: &OpDecl) {
|
||||||
match &self.compilation_target {
|
match &self.compilation_target {
|
||||||
CompilationTarget::User => {
|
CompilationTarget::User => {
|
||||||
|
if let Some(filename) = self.listing_src_file_name() {
|
||||||
|
match self.wam.indices.modules.get_mut(&filename) {
|
||||||
|
Some(ref mut module) => {
|
||||||
|
op_decl.insert_into_op_dir(&mut module.op_dir);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
add_op_decl(
|
add_op_decl(
|
||||||
&mut self.retraction_info,
|
&mut self.retraction_info,
|
||||||
&self.compilation_target,
|
&self.compilation_target,
|
||||||
@@ -949,6 +959,15 @@ impl<'a> LoadState<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if &self.compilation_target == compilation_target {
|
if &self.compilation_target == compilation_target {
|
||||||
|
if let CompilationTarget::User = &self.compilation_target {
|
||||||
|
match (key.0.as_str(), key.1) {
|
||||||
|
("term_expansion", 2) | ("goal_expansion", 2) => {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let skeleton_opt = self.wam.indices.remove_predicate_skeleton(
|
let skeleton_opt = self.wam.indices.remove_predicate_skeleton(
|
||||||
compilation_target,
|
compilation_target,
|
||||||
&key,
|
&key,
|
||||||
|
|||||||
@@ -1474,16 +1474,29 @@ impl Machine {
|
|||||||
exports: vec![],
|
exports: vec![],
|
||||||
};
|
};
|
||||||
|
|
||||||
if !loader.load_state.wam.indices.modules.contains_key(&module_decl.name) {
|
let module_name = module_decl.name.clone();
|
||||||
let module_name = module_decl.name.clone();
|
|
||||||
let module = Module::new(module_decl, ListingSource::DynamicallyGenerated);
|
|
||||||
|
|
||||||
|
if !loader.load_state.wam.indices.modules.contains_key(&module_decl.name) {
|
||||||
|
let module = Module::new_in_situ(module_decl);
|
||||||
loader.load_state.wam.indices.modules.insert(module_name, module);
|
loader.load_state.wam.indices.modules.insert(module_name, module);
|
||||||
} else {
|
} else {
|
||||||
loader.load_state.reset_in_situ_module(
|
loader.load_state.reset_in_situ_module(
|
||||||
module_decl.clone(),
|
module_decl.clone(),
|
||||||
&ListingSource::DynamicallyGenerated,
|
&ListingSource::DynamicallyGenerated,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
match loader.load_state.wam.indices.modules.get_mut(&module_name) {
|
||||||
|
Some(module) => {
|
||||||
|
for (key, value) in module.op_dir.drain(0 ..) {
|
||||||
|
let (prec, spec) = value.shared_op_desc().get();
|
||||||
|
let mut op_decl = OpDecl::new(prec, spec, key.0);
|
||||||
|
|
||||||
|
op_decl.remove(&mut loader.load_state.wam.indices.op_dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -702,7 +702,7 @@ impl IndexStore {
|
|||||||
key: &PredicateKey,
|
key: &PredicateKey,
|
||||||
) -> Option<&mut PredicateSkeleton> {
|
) -> Option<&mut PredicateSkeleton> {
|
||||||
match (key.0.as_str(), key.1) {
|
match (key.0.as_str(), key.1) {
|
||||||
("term_expansion", 2) => self.extensible_predicates.get_mut(key),
|
// ("term_expansion", 2) => self.extensible_predicates.get_mut(key),
|
||||||
_ => match compilation_target {
|
_ => match compilation_target {
|
||||||
CompilationTarget::User => self.extensible_predicates.get_mut(key),
|
CompilationTarget::User => self.extensible_predicates.get_mut(key),
|
||||||
CompilationTarget::Module(ref module_name) => {
|
CompilationTarget::Module(ref module_name) => {
|
||||||
@@ -722,24 +722,19 @@ impl IndexStore {
|
|||||||
local_compilation_target: CompilationTarget,
|
local_compilation_target: CompilationTarget,
|
||||||
key: PredicateKey,
|
key: PredicateKey,
|
||||||
) -> Option<&mut PredicateSkeleton> {
|
) -> Option<&mut PredicateSkeleton> {
|
||||||
match (key.0.as_str(), key.1) {
|
match src_compilation_target {
|
||||||
("term_expansion", 2) => self
|
CompilationTarget::User => self
|
||||||
.local_extensible_predicates
|
.local_extensible_predicates
|
||||||
.get_mut(&(local_compilation_target, key)),
|
.get_mut(&(local_compilation_target, key)),
|
||||||
_ => match src_compilation_target {
|
CompilationTarget::Module(ref module_name) => {
|
||||||
CompilationTarget::User => self
|
if let Some(module) = self.modules.get_mut(module_name) {
|
||||||
.local_extensible_predicates
|
module
|
||||||
.get_mut(&(local_compilation_target, key)),
|
.local_extensible_predicates
|
||||||
CompilationTarget::Module(ref module_name) => {
|
.get_mut(&(local_compilation_target, key))
|
||||||
if let Some(module) = self.modules.get_mut(module_name) {
|
} else {
|
||||||
module
|
None
|
||||||
.local_extensible_predicates
|
|
||||||
.get_mut(&(local_compilation_target, key))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -749,24 +744,19 @@ impl IndexStore {
|
|||||||
local_compilation_target: CompilationTarget,
|
local_compilation_target: CompilationTarget,
|
||||||
key: PredicateKey,
|
key: PredicateKey,
|
||||||
) -> Option<&PredicateSkeleton> {
|
) -> Option<&PredicateSkeleton> {
|
||||||
match (key.0.as_str(), key.1) {
|
match src_compilation_target {
|
||||||
("term_expansion", 2) => self
|
CompilationTarget::User => self
|
||||||
.local_extensible_predicates
|
.local_extensible_predicates
|
||||||
.get(&(local_compilation_target, key)),
|
.get(&(local_compilation_target, key)),
|
||||||
_ => match src_compilation_target {
|
CompilationTarget::Module(ref module_name) => {
|
||||||
CompilationTarget::User => self
|
if let Some(module) = self.modules.get(module_name) {
|
||||||
.local_extensible_predicates
|
module
|
||||||
.get(&(local_compilation_target, key)),
|
.local_extensible_predicates
|
||||||
CompilationTarget::Module(ref module_name) => {
|
.get(&(local_compilation_target, key))
|
||||||
if let Some(module) = self.modules.get(module_name) {
|
} else {
|
||||||
module
|
None
|
||||||
.local_extensible_predicates
|
|
||||||
.get(&(local_compilation_target, key))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -775,18 +765,15 @@ impl IndexStore {
|
|||||||
compilation_target: &CompilationTarget,
|
compilation_target: &CompilationTarget,
|
||||||
key: &PredicateKey,
|
key: &PredicateKey,
|
||||||
) -> Option<&PredicateSkeleton> {
|
) -> Option<&PredicateSkeleton> {
|
||||||
match (key.0.as_str(), key.1) {
|
match compilation_target {
|
||||||
("term_expansion", 2) => self.extensible_predicates.get(key),
|
CompilationTarget::User => self.extensible_predicates.get(key),
|
||||||
_ => match compilation_target {
|
CompilationTarget::Module(ref module_name) => {
|
||||||
CompilationTarget::User => self.extensible_predicates.get(key),
|
if let Some(module) = self.modules.get(module_name) {
|
||||||
CompilationTarget::Module(ref module_name) => {
|
module.extensible_predicates.get(key)
|
||||||
if let Some(module) = self.modules.get(module_name) {
|
} else {
|
||||||
module.extensible_predicates.get(key)
|
None
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -795,18 +782,15 @@ impl IndexStore {
|
|||||||
compilation_target: &CompilationTarget,
|
compilation_target: &CompilationTarget,
|
||||||
key: &PredicateKey,
|
key: &PredicateKey,
|
||||||
) -> Option<PredicateSkeleton> {
|
) -> Option<PredicateSkeleton> {
|
||||||
match (key.0.as_str(), key.1) {
|
match compilation_target {
|
||||||
("term_expansion", 2) => self.extensible_predicates.remove(key),
|
CompilationTarget::User => self.extensible_predicates.remove(key),
|
||||||
_ => match compilation_target {
|
CompilationTarget::Module(ref module_name) => {
|
||||||
CompilationTarget::User => self.extensible_predicates.remove(key),
|
if let Some(module) = self.modules.get_mut(module_name) {
|
||||||
CompilationTarget::Module(ref module_name) => {
|
module.extensible_predicates.remove(key)
|
||||||
if let Some(module) = self.modules.get_mut(module_name) {
|
} else {
|
||||||
module.extensible_predicates.remove(key)
|
None
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user