diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index 06d80ba1..8b1da483 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -336,23 +336,16 @@ impl Machine { } pub fn run_top_level(&mut self) { - use std::env; + use std::env; - let mut filename_atoms = vec![]; + let mut arg_pstrs = vec![]; + for arg in env::args() { + arg_pstrs.push(self.machine_st.heap.put_complete_string(&arg)); + } + let list_addr = Addr::HeapCell(self.machine_st.heap.to_list(arg_pstrs.into_iter())); - // the first of these is the path to the scryer-prolog executable, so skip - // it. - for filename in env::args().skip(1) { - let atom = clause_name!(filename, self.indices.atom_tbl); - filename_atoms.push(HeapCellValue::Atom(atom, None)); - } - - let list_addr = - Addr::HeapCell(self.machine_st.heap.to_list(filename_atoms.into_iter())); - - self.machine_st[temp_v!(1)] = list_addr; + self.machine_st[temp_v!(1)] = list_addr; self.machine_st.p = CodePtr::Local(LocalCodePtr::DirEntry(self.toplevel_idx)); - self.run_query(); } diff --git a/src/prolog/toplevel.pl b/src/prolog/toplevel.pl index 4f037c9a..c2aa20f3 100644 --- a/src/prolog/toplevel.pl +++ b/src/prolog/toplevel.pl @@ -3,13 +3,14 @@ :- module('$toplevel', ['$repl'/1, consult/1, use_module/1, use_module/2]). -'$repl'(ListOfModules) :- - maplist('$use_list_of_modules', ListOfModules), +'$repl'([_|Args]) :- + maplist('$use_list_of_modules', Args), false. '$repl'(_) :- '$repl'. -'$use_list_of_modules'(Module) :- - catch(use_module(Module), E, '$print_exception'(E)). +'$use_list_of_modules'(Mod0) :- + atom_chars(Mod, Mod0), + catch(use_module(Mod), E, '$print_exception'(E)). '$repl' :- catch('$read_and_match', E, '$print_exception'(E)),