ADDED: working_directory/2, addressing a remaining aspect of #511

This commit is contained in:
Markus Triska
2020-07-14 22:37:05 +02:00
parent 5134e64cae
commit 94e9e17c79
3 changed files with 38 additions and 1 deletions

View File

@@ -890,6 +890,34 @@ impl MachineState {
}
}
}
&SystemClauseType::WorkingDirectory => {
if let Ok(dir) = env::current_dir() {
let current =
match dir.to_str() {
Some(d) => { d }
_ => { let stub = MachineError::functor_stub(clause_name!("working_directory"), 2);
let err = MachineError::representation_error(RepFlag::Character);
let err = self.error_form(err, stub);
return Err(err);
}
};
let chars = self.heap.put_complete_string(current);
self.unify(self[temp_v!(1)], chars);
let next = self.heap_pstr_iter(self[temp_v!(2)]).to_string();
match env::set_current_dir(std::path::Path::new(&next)) {
Ok(_) => { }
_ => { self.fail = true;
return Ok(());
}
}
} else {
self.fail = true;
return Ok(());
}
}
&SystemClauseType::AtEndOfExpansion => {
if self.cp == LocalCodePtr::TopLevel(0, 0) {
self.at_end_of_expansion = true;