throw '' whenever an interrupt is made (#365, #366)

This commit is contained in:
Mark Thom
2020-04-19 12:58:44 -06:00
parent 3798dcb98d
commit 5d6ca7a88e
4 changed files with 26 additions and 4 deletions

View File

@@ -3089,6 +3089,14 @@ impl MachineState {
self.p += 1;
}
fn throw_interrupt_exception(&mut self) {
let err = MachineError::interrupt_error();
let src = functor!("repl");
let err = self.error_form(err, src);
self.throw_exception(err);
}
fn handle_call_clause(
&mut self,
indices: &mut IndexStore,
@@ -3105,8 +3113,7 @@ impl MachineState {
let interrupted = INTERRUPT.load(std::sync::atomic::Ordering::Relaxed);
if INTERRUPT.compare_and_swap(interrupted, false, std::sync::atomic::Ordering::Relaxed) {
self.reset();
self.fail = true;
self.throw_interrupt_exception();
return;
}