fn package_term(wam: &mut Machine, term: Term) -> Result<TopLevelPacket, ParserError> {
let mut code_dir = wam.take_code_dir();
- let packet = consume_term(&mut code_dir, term, &mut wam.indices)?;
- wam.swap_code_dir(&mut code_dir);
+ let packet = consume_term(&mut code_dir, term, &mut wam.indices)?;
+ wam.swap_code_dir(&mut code_dir);
Ok(packet)
}
}
pub
-fn compile_listing<R: Read>(wam: &mut Machine, src: R, mut indices: IndexStore,
- mut toplevel_indices: IndexStore)
- -> EvalSession
+fn compile_listing<R: Read>(wam: &mut Machine, src: R, mut indices: IndexStore) -> EvalSession
{
let code_dir = wam.take_code_dir();
let mut worker = TopLevelBatchWorker::new(src, wam.indices.atom_tbl.clone(),
wam.machine_flags(),
code_dir);
-
+
let mut compiler = ListingCompiler::new();
let mut toplevel_results = vec![];
+ let mut toplevel_indices = default_index_store!(wam.indices.atom_tbl.clone());
while let Some(decl) = try_eval_session!(worker.consume(wam, &mut indices)) {
if decl.is_module_decl() {
}
wam.swap_code_dir(&mut worker.static_code_dir);
-
+
let module_code = try_eval_session!(compiler.generate_code(worker.results, wam,
&mut indices.code_dir));
let toplvl_code = try_eval_session!(compiler.generate_code(toplevel_results, wam,
}
pub fn compile_user_module<R: Read>(wam: &mut Machine, src: R) -> EvalSession {
- let atom_tbl = wam.indices.atom_tbl.clone();
- let mut indices = default_index_store!(atom_tbl.clone());
-
+ let mut indices = default_index_store!(wam.indices.atom_tbl.clone());
try_eval_session!(setup_indices(&wam, &mut indices));
-
- compile_listing(wam, src, indices, default_index_store!(atom_tbl))
+ compile_listing(wam, src, indices)
}
let atom_tbl = wam.indices.atom_tbl.clone();
compile_listing(&mut wam, BUILTINS.as_bytes(),
- default_index_store!(atom_tbl.clone()),
- default_index_store!(atom_tbl));
+ default_index_store!(atom_tbl.clone()));
compile_user_module(&mut wam, LISTS.as_bytes());
compile_user_module(&mut wam, CONTROL.as_bytes());