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());
code.extend(decl_code.into_iter());
let code_dir = mem::replace(indices.code_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.op_dir.extend(op_dir.into_iter());
if let &mut Some(ref mut module) = module {
module.use_module(submodule);
}
-
- // self.wam.use_module_in_toplevel(name);
}
fn use_qualified_module(module: &mut Option<Module>, submodule: &Module, exports: &Vec<PredicateKey>,
if let &mut Some(ref mut module) = module {
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 {
- let mut indices = machine_code_index!(&mut CodeDir::new(), &mut default_op_dir());
-
+pub
+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 compiler = ListingCompiler::new(wam);
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)
+}
-:- use_module(library(builtins)).
-
:- module(lists, [member/2, select/3, append/3, memberchk/2,
reverse/2, length/2, maplist/2, maplist/3,
maplist/4, maplist/5, maplist/6, maplist/7,
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_listing(&mut wam, CONTROL);
- compile_listing(&mut wam, QUEUES);
+ compile_user_module(&mut wam, LISTS);
+ compile_user_module(&mut wam, CONTROL);
+ compile_user_module(&mut wam, QUEUES);
wam.use_module_in_toplevel(clause_name!("builtins"));