Construct and return exception string
This commit is contained in:
@@ -107,8 +107,27 @@ impl Machine {
|
|||||||
// this should halt the search for solutions as it
|
// this should halt the search for solutions as it
|
||||||
// does in the Scryer top-level. the exception term is
|
// does in the Scryer top-level. the exception term is
|
||||||
// contained in self.machine_st.ball.
|
// contained in self.machine_st.ball.
|
||||||
println!("exception thrown");
|
let error_string = self.machine_st.ball.stub
|
||||||
break;
|
.iter()
|
||||||
|
.filter(|h| match h.get_tag() {
|
||||||
|
HeapCellValueTag::Atom => true,
|
||||||
|
HeapCellValueTag::Fixnum => true,
|
||||||
|
_ => false,
|
||||||
|
})
|
||||||
|
.map(|h| match h.get_tag() {
|
||||||
|
HeapCellValueTag::Atom => {
|
||||||
|
let (name, _) = cell_as_atom_cell!(h).get_name_and_arity();
|
||||||
|
name.as_str().to_string()
|
||||||
|
}
|
||||||
|
HeapCellValueTag::Fixnum => {
|
||||||
|
h.get_value().clone().to_string()
|
||||||
|
},
|
||||||
|
_ => unreachable!(),
|
||||||
|
})
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(" ");
|
||||||
|
|
||||||
|
return Err(error_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut bindings: BTreeMap<String, Value> = BTreeMap::new();
|
let mut bindings: BTreeMap<String, Value> = BTreeMap::new();
|
||||||
@@ -221,7 +240,7 @@ mod tests {
|
|||||||
let output = machine.run_query(query);
|
let output = machine.run_query(query);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
output,
|
output,
|
||||||
Err(String::from("error(existence_error(procedure,triple/3),triple/3)."))
|
Err(String::from("error existence_error procedure / triple 3 / triple 3"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user