}
pub fn run_top_level(&mut self) {
- use std::env;
+ use std::env;
- let mut filename_atoms = vec![];
-
- // 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()));
+ 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()));
- 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();
}
:- 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)),