include builtins implicitly in every module.
This commit is contained in:
@@ -32,7 +32,7 @@ fn prolog_repl() {
|
|||||||
match read() {
|
match read() {
|
||||||
Input::Line(line) => parse_and_compile_line(&mut wam, line.as_str()),
|
Input::Line(line) => parse_and_compile_line(&mut wam, line.as_str()),
|
||||||
Input::Batch(batch) =>
|
Input::Batch(batch) =>
|
||||||
match compile_listing(&mut wam, batch.as_str()) {
|
match compile_user_module(&mut wam, batch.as_str()) {
|
||||||
EvalSession::Error(e) => println!("{}", e),
|
EvalSession::Error(e) => println!("{}", e),
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ impl<'a> ListingCompiler<'a> {
|
|||||||
|
|
||||||
compile_appendix(&mut decl_code, Vec::from(queue))?;
|
compile_appendix(&mut decl_code, Vec::from(queue))?;
|
||||||
|
|
||||||
let idx = code_dir.entry((name, arity)).or_insert(CodeIndex::default());
|
let idx = code_dir.entry((name, arity)).or_insert(CodeIndex::default());
|
||||||
set_code_index!(idx, IndexPtr::Index(p), self.get_module_name());
|
set_code_index!(idx, IndexPtr::Index(p), self.get_module_name());
|
||||||
|
|
||||||
code.extend(decl_code.into_iter());
|
code.extend(decl_code.into_iter());
|
||||||
@@ -193,7 +193,7 @@ impl<'a> ListingCompiler<'a> {
|
|||||||
let code_dir = mem::replace(indices.code_dir, HashMap::new());
|
let code_dir = mem::replace(indices.code_dir, HashMap::new());
|
||||||
let op_dir = mem::replace(indices.op_dir, HashMap::new());
|
let op_dir = mem::replace(indices.op_dir, HashMap::new());
|
||||||
|
|
||||||
if let Some(mut module) = self.module {
|
if let Some(mut module) = self.module {
|
||||||
module.code_dir.extend(as_module_code_dir(code_dir));
|
module.code_dir.extend(as_module_code_dir(code_dir));
|
||||||
module.op_dir.extend(op_dir.into_iter());
|
module.op_dir.extend(op_dir.into_iter());
|
||||||
|
|
||||||
@@ -213,8 +213,6 @@ fn use_module(module: &mut Option<Module>, submodule: &Module, indices: &mut Mac
|
|||||||
if let &mut Some(ref mut module) = module {
|
if let &mut Some(ref mut module) = module {
|
||||||
module.use_module(submodule);
|
module.use_module(submodule);
|
||||||
}
|
}
|
||||||
|
|
||||||
// self.wam.use_module_in_toplevel(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn use_qualified_module(module: &mut Option<Module>, submodule: &Module, exports: &Vec<PredicateKey>,
|
fn use_qualified_module(module: &mut Option<Module>, submodule: &Module, exports: &Vec<PredicateKey>,
|
||||||
@@ -225,13 +223,11 @@ fn use_qualified_module(module: &mut Option<Module>, submodule: &Module, exports
|
|||||||
if let &mut Some(ref mut module) = module {
|
if let &mut Some(ref mut module) = module {
|
||||||
module.use_qualified_module(submodule, exports);
|
module.use_qualified_module(submodule, exports);
|
||||||
}
|
}
|
||||||
|
|
||||||
// self.wam.use_qualified_module_in_toplevel(name, exports);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn compile_listing(wam: &mut Machine, src_str: &str) -> EvalSession {
|
pub
|
||||||
let mut indices = machine_code_index!(&mut CodeDir::new(), &mut default_op_dir());
|
fn compile_listing(wam: &mut Machine, src_str: &str, mut indices: MachineCodeIndex) -> EvalSession
|
||||||
|
{
|
||||||
let mut worker = TopLevelBatchWorker::new(src_str.as_bytes(), wam.atom_tbl());
|
let mut worker = TopLevelBatchWorker::new(src_str.as_bytes(), wam.atom_tbl());
|
||||||
let mut compiler = ListingCompiler::new(wam);
|
let mut compiler = ListingCompiler::new(wam);
|
||||||
|
|
||||||
@@ -266,3 +262,15 @@ pub fn compile_listing(wam: &mut Machine, src_str: &str) -> EvalSession {
|
|||||||
|
|
||||||
EvalSession::EntrySuccess
|
EvalSession::EntrySuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn compile_user_module(wam: &mut Machine, src_str: &str) -> EvalSession {
|
||||||
|
let mut indices = machine_code_index!(&mut CodeDir::new(), &mut default_op_dir());
|
||||||
|
|
||||||
|
if let Some(ref builtins) = wam.modules.get(&clause_name!("builtins")) {
|
||||||
|
indices.use_module(builtins);
|
||||||
|
} else {
|
||||||
|
return EvalSession::from(SessionError::ModuleNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
compile_listing(wam, src_str, indices)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
:- use_module(library(builtins)).
|
|
||||||
|
|
||||||
:- module(control, [(\=)/2, (\+)/1, between/3, once/1, repeat/0]).
|
:- module(control, [(\=)/2, (\+)/1, between/3, once/1, repeat/0]).
|
||||||
|
|
||||||
:- op(900, fy, \+).
|
:- op(900, fy, \+).
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
:- use_module(library(builtins)).
|
|
||||||
|
|
||||||
:- module(lists, [member/2, select/3, append/3, memberchk/2,
|
:- module(lists, [member/2, select/3, append/3, memberchk/2,
|
||||||
reverse/2, length/2, maplist/2, maplist/3,
|
reverse/2, length/2, maplist/2, maplist/3,
|
||||||
maplist/4, maplist/5, maplist/6, maplist/7,
|
maplist/4, maplist/5, maplist/6, maplist/7,
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
:- use_module(library(builtins)).
|
|
||||||
|
|
||||||
:- module(queues, [queue/1, queue/2, queue_head/3, queue_head_list/3,
|
:- module(queues, [queue/1, queue/2, queue_head/3, queue_head_list/3,
|
||||||
queue_last/3, queue_last_list/3, list_queue/2,
|
queue_last/3, queue_last_list/3, list_queue/2,
|
||||||
queue_length/2]).
|
queue_length/2]).
|
||||||
|
|||||||
@@ -111,11 +111,12 @@ impl Machine {
|
|||||||
cached_query: None
|
cached_query: None
|
||||||
};
|
};
|
||||||
|
|
||||||
compile_listing(&mut wam, BUILTINS);
|
let indices = machine_code_index!(&mut CodeDir::new(), &mut default_op_dir());
|
||||||
|
compile_listing(&mut wam, BUILTINS, indices);
|
||||||
|
|
||||||
compile_listing(&mut wam, LISTS);
|
compile_user_module(&mut wam, LISTS);
|
||||||
compile_listing(&mut wam, CONTROL);
|
compile_user_module(&mut wam, CONTROL);
|
||||||
compile_listing(&mut wam, QUEUES);
|
compile_user_module(&mut wam, QUEUES);
|
||||||
|
|
||||||
wam.use_module_in_toplevel(clause_name!("builtins"));
|
wam.use_module_in_toplevel(clause_name!("builtins"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user