Enhanced the implementation
The restriction has been removed by using read_library_path from
cfd15f4e02.
This commit is contained in:
@@ -8,12 +8,12 @@
|
|||||||
op(1150, fx, table)
|
op(1150, fx, table)
|
||||||
]).
|
]).
|
||||||
|
|
||||||
:- use_module(library('tabling/double_linked_list')).
|
:- use_module(library(tabling/double_linked_list)).
|
||||||
:- use_module(library('tabling/table_data_structure')).
|
:- use_module(library(tabling/table_data_structure)).
|
||||||
:- use_module(library('tabling/batched_worklist')).
|
:- use_module(library(tabling/batched_worklist)).
|
||||||
:- use_module(library('tabling/wrapper')).
|
:- use_module(library(tabling/wrapper)).
|
||||||
:- use_module(library('tabling/global_worklist')).
|
:- use_module(library(tabling/global_worklist)).
|
||||||
:- use_module(library('tabling/table_link_manager')).
|
:- use_module(library(tabling/table_link_manager)).
|
||||||
|
|
||||||
:- use_module(library(cont)).
|
:- use_module(library(cont)).
|
||||||
:- use_module(library(lists)).
|
:- use_module(library(lists)).
|
||||||
|
|||||||
@@ -45,8 +45,8 @@
|
|||||||
wkl_worklist_work_done/1 % +WorkList
|
wkl_worklist_work_done/1 % +WorkList
|
||||||
]).
|
]).
|
||||||
|
|
||||||
:- use_module(library('tabling/global_worklist')).
|
:- use_module(library(tabling/global_worklist)).
|
||||||
:- use_module(library('tabling/double_linked_list')).
|
:- use_module(library(tabling/double_linked_list)).
|
||||||
|
|
||||||
:- use_module(library(atts)).
|
:- use_module(library(atts)).
|
||||||
:- use_module(library(lists)).
|
:- use_module(library(lists)).
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
get_nb_identifiers/3 % +Table, -NbWorklistID, -NbAnswerTreeID
|
get_nb_identifiers/3 % +Table, -NbWorklistID, -NbAnswerTreeID
|
||||||
]).
|
]).
|
||||||
|
|
||||||
:- use_module(library('tabling/table_link_manager')).
|
:- use_module(library(tabling/table_link_manager)).
|
||||||
:- use_module(library('tabling/trie')).
|
:- use_module(library(tabling/trie)).
|
||||||
|
|
||||||
/* Part of SWI-Prolog
|
/* Part of SWI-Prolog
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
POSSIBILITY OF SUCH DAMAGE.
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
:- use_module(library('tabling/batched_worklist')).
|
:- use_module(library(tabling/batched_worklist)).
|
||||||
|
|
||||||
:- use_module(library(atts)).
|
:- use_module(library(atts)).
|
||||||
:- use_module(library(gensym)).
|
:- use_module(library(gensym)).
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
:- use_module(library(iso_ext)).
|
:- use_module(library(iso_ext)).
|
||||||
:- use_module(library(terms)).
|
:- use_module(library(terms)).
|
||||||
|
|
||||||
:- use_module(library('tabling/trie')).
|
:- use_module(library(tabling/trie)).
|
||||||
|
|
||||||
:- attribute trie_table_link/1.
|
:- attribute trie_table_link/1.
|
||||||
|
|
||||||
|
|||||||
@@ -340,16 +340,37 @@ fn setup_module_decl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_use_module_decl(mut terms: Vec<Box<Term>>) -> Result<ModuleSource, ParserError> {
|
fn read_library_path(
|
||||||
|
term: Term,
|
||||||
|
atom_tbl: TabledData<Atom>,
|
||||||
|
) -> Option<ClauseName> {
|
||||||
|
match term {
|
||||||
|
Term::Constant(_, Constant::Atom(atom, _)) => {
|
||||||
|
Some(atom.defrock_brackets())
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let mut atoms = vec![];
|
||||||
|
|
||||||
|
for term in unfold_by_str(term, "/") {
|
||||||
|
match term {
|
||||||
|
Term::Constant(_, Constant::Atom(atom, _)) => {
|
||||||
|
atoms.push(atom.as_str().to_owned());
|
||||||
|
}
|
||||||
|
_ => return None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(clause_name!(atoms.join("/"), atom_tbl))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup_use_module_decl(mut terms: Vec<Box<Term>>, atom_tbl: TabledData<Atom>) -> Result<ModuleSource, ParserError> {
|
||||||
match *terms.pop().unwrap() {
|
match *terms.pop().unwrap() {
|
||||||
Term::Clause(_, ref name, ref mut terms, None)
|
Term::Clause(_, ref name, ref mut terms, None)
|
||||||
if name.as_str() == "library" && terms.len() == 1 =>
|
if name.as_str() == "library" && terms.len() == 1 =>
|
||||||
{
|
{
|
||||||
terms
|
read_library_path(*terms.pop().unwrap(), atom_tbl)
|
||||||
.pop()
|
|
||||||
.unwrap()
|
|
||||||
.to_constant()
|
|
||||||
.and_then(|c| c.to_atom())
|
|
||||||
.map(|c| ModuleSource::Library(c))
|
.map(|c| ModuleSource::Library(c))
|
||||||
.ok_or(ParserError::InvalidUseModuleDecl)
|
.ok_or(ParserError::InvalidUseModuleDecl)
|
||||||
}
|
}
|
||||||
@@ -396,11 +417,7 @@ fn setup_qualified_import(
|
|||||||
Term::Clause(_, ref name, ref mut terms, None)
|
Term::Clause(_, ref name, ref mut terms, None)
|
||||||
if name.as_str() == "library" && terms.len() == 1 =>
|
if name.as_str() == "library" && terms.len() == 1 =>
|
||||||
{
|
{
|
||||||
terms
|
read_library_path(*terms.pop().unwrap(), atom_tbl.clone())
|
||||||
.pop()
|
|
||||||
.unwrap()
|
|
||||||
.to_constant()
|
|
||||||
.and_then(|c| c.to_atom())
|
|
||||||
.map(|c| ModuleSource::Library(c))
|
.map(|c| ModuleSource::Library(c))
|
||||||
.ok_or(ParserError::InvalidUseModuleDecl)
|
.ok_or(ParserError::InvalidUseModuleDecl)
|
||||||
}
|
}
|
||||||
@@ -685,7 +702,7 @@ fn setup_declaration<'a, 'b, 'c>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
("use_module", 1) => {
|
("use_module", 1) => {
|
||||||
Ok(Declaration::UseModule(setup_use_module_decl(terms)?))
|
Ok(Declaration::UseModule(setup_use_module_decl(terms, indices.atom_tbl())?))
|
||||||
}
|
}
|
||||||
("use_module", 2) => {
|
("use_module", 2) => {
|
||||||
let (name, exports) = setup_qualified_import(terms, indices.atom_tbl())?;
|
let (name, exports) = setup_qualified_import(terms, indices.atom_tbl())?;
|
||||||
|
|||||||
Reference in New Issue
Block a user