Revert "allow paths in use_module(library(..)) (#604)"

This reverts commit cfd15f4e02.
This commit is contained in:
notoria
2020-07-01 10:07:26 +02:00
parent e05c34d1ee
commit 1eb42654e0
4 changed files with 59 additions and 116 deletions

View File

@@ -666,27 +666,21 @@ impl Machine {
Ok(exports)
}
fn use_module(&mut self, to_src: impl Fn(ClauseName) -> ModuleSource)
fn use_module<ToSource>(&mut self, to_src: ToSource)
where ToSource: Fn(ClauseName) -> ModuleSource
{
// the term expander will overwrite the cached query, so save it here.
let cached_query = mem::replace(&mut self.code_repo.cached_query, vec![]);
let module_spec = self.machine_st[temp_v!(1)].clone();
let (name, is_path) = {
let name = {
let addr = self.machine_st.store(self.machine_st.deref(module_spec));
match self.machine_st.heap.index_addr(&addr).as_ref() {
HeapCellValue::Atom(name, _) =>
(name.clone(), name.as_str().contains('/')),
name.clone(),
HeapCellValue::Addr(Addr::Char(c)) =>
(clause_name!(c.to_string(), self.indices.atom_tbl), false),
HeapCellValue::Addr(addr @ Addr::PStrLocation(..)) => {
let mut heap_pstr_iter = self.machine_st.heap_pstr_iter(*addr);
let filename = heap_pstr_iter.to_string();
let is_path = filename.contains('/');
(clause_name!(filename, self.indices.atom_tbl), is_path)
}
clause_name!(c.to_string(), self.indices.atom_tbl),
_ =>
unreachable!(),
}
@@ -694,18 +688,14 @@ impl Machine {
let load_result = match to_src(name) {
ModuleSource::Library(name) =>
if is_path {
load_library(self, name, false)
} else {
if let Some(module) = self.indices.take_module(name.clone()) {
self.indices.remove_module(clause_name!("user"), &module);
self.indices.modules.insert(name.clone(), module);
if let Some(module) = self.indices.take_module(name.clone()) {
self.indices.remove_module(clause_name!("user"), &module);
self.indices.modules.insert(name.clone(), module);
Ok(name)
} else {
load_library(self, name, false)
}
}
Ok(name)
} else {
load_library(self, name, false)
},
ModuleSource::File(name) =>
load_module_from_file(self, PathBuf::from(name.as_str()), false)
};
@@ -727,27 +717,21 @@ impl Machine {
}
}
fn use_qualified_module(&mut self, to_src: impl Fn(ClauseName) -> ModuleSource)
fn use_qualified_module<ToSource>(&mut self, to_src: ToSource)
where ToSource: Fn(ClauseName) -> ModuleSource
{
// the term expander will overwrite the cached query, so save it here.
let cached_query = mem::replace(&mut self.code_repo.cached_query, vec![]);
let module_spec = self.machine_st[temp_v!(1)].clone();
let (name, is_path) = {
let name = {
let addr = self.machine_st.store(self.machine_st.deref(module_spec));
match self.machine_st.heap.index_addr(&addr).as_ref() {
HeapCellValue::Atom(name, _) =>
(name.clone(), name.as_str().contains('/')),
name.clone(),
HeapCellValue::Addr(Addr::Char(c)) =>
(clause_name!(c.to_string(), self.indices.atom_tbl), false),
HeapCellValue::Addr(addr @ Addr::PStrLocation(..)) => {
let mut heap_pstr_iter = self.machine_st.heap_pstr_iter(*addr);
let filename = heap_pstr_iter.to_string();
let is_path = filename.contains('/');
(clause_name!(filename, self.indices.atom_tbl), is_path)
}
clause_name!(c.to_string(), self.indices.atom_tbl),
_ =>
unreachable!(),
}
@@ -763,18 +747,14 @@ impl Machine {
let load_result = match to_src(name) {
ModuleSource::Library(name) =>
if is_path {
load_library(self, name, false)
} else {
if let Some(module) = self.indices.take_module(name.clone()) {
self.indices.remove_module(clause_name!("user"), &module);
self.indices.modules.insert(name.clone(), module);
if let Some(module) = self.indices.take_module(name.clone()) {
self.indices.remove_module(clause_name!("user"), &module);
self.indices.modules.insert(name.clone(), module);
Ok(name)
} else {
load_library(self, name, false)
}
},
Ok(name)
} else {
load_library(self, name, false)
},
ModuleSource::File(name) =>
load_module_from_file(self, PathBuf::from(name.as_str()), false)
};