reset instruction pointers with calls, make HCPrinter::range_from safe (#1233)
This commit is contained in:
@@ -376,7 +376,7 @@ impl HCValueOutputter for PrinterOutputter {
|
||||
}
|
||||
|
||||
fn range_from(&self, index: RangeFrom<usize>) -> &str {
|
||||
&self.contents.as_str()[index]
|
||||
&self.contents.as_str().get(index).unwrap_or("")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -962,6 +962,8 @@ impl Machine {
|
||||
match self.find_living_dynamic_else(p) {
|
||||
Some((p, next_i)) => {
|
||||
self.machine_st.p = p;
|
||||
self.machine_st.oip = 0;
|
||||
self.machine_st.iip = 0;
|
||||
|
||||
match self.machine_st.dynamic_mode {
|
||||
FirstOrNext::First if next_i == 0 => {
|
||||
@@ -1044,6 +1046,8 @@ impl Machine {
|
||||
match self.find_living_dynamic_else(p) {
|
||||
Some((p, next_i)) => {
|
||||
self.machine_st.p = p;
|
||||
self.machine_st.oip = 0;
|
||||
self.machine_st.iip = 0;
|
||||
|
||||
match self.machine_st.dynamic_mode {
|
||||
FirstOrNext::First if next_i == 0 => {
|
||||
|
||||
@@ -439,15 +439,19 @@ impl MachineState {
|
||||
pub(super) fn call_at_index(&mut self, arity: usize, p: usize) {
|
||||
self.cp = self.p + 1;
|
||||
self.p = p;
|
||||
self.oip = 0;
|
||||
self.iip = 0;
|
||||
self.num_of_args = arity;
|
||||
self.b0 = self.b;
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub(super) fn execute_at_index(&mut self, arity: usize, p: usize) {
|
||||
self.p = p;
|
||||
self.oip = 0;
|
||||
self.iip = 0;
|
||||
self.num_of_args = arity;
|
||||
self.b0 = self.b;
|
||||
self.p = p;
|
||||
}
|
||||
|
||||
pub fn read_term(&mut self, stream: Stream, indices: &mut IndexStore) -> CallResult {
|
||||
|
||||
Reference in New Issue
Block a user