From: Mark Thom Date: Fri, 5 Oct 2018 04:28:42 +0000 (-0600) Subject: minor modification to lco in codegen X-Git-Tag: v0.8.110~348 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=d7e8da8324bdd5ee470fee4c17fdaafc1e4b6872;p=scryer-prolog.git minor modification to lco in codegen --- diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index 7d2dd1ab..4846c728 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -10,7 +10,6 @@ use prolog::targets::*; use std::cell::Cell; use std::collections::{HashMap}; -use std::mem; use std::rc::Rc; use std::vec::Vec; @@ -236,18 +235,15 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator let mut dealloc_index = code.len() - 1; match code.last_mut() { - Some(&mut Line::Control(ref mut ctrl)) => { - let old_ctrl = mem::replace(ctrl, ControlInstruction::Proceed); - - match old_ctrl { - ControlInstruction::CallClause(ct, arity, pvs, false, use_default_cp) => - *ctrl = ControlInstruction::CallClause(ct, arity, pvs, true, use_default_cp), - ControlInstruction::JmpBy(arity, offset, pvs, false) => - *ctrl = ControlInstruction::JmpBy(arity, offset, pvs, true), - ControlInstruction::Proceed => {}, + Some(&mut Line::Control(ref mut ctrl)) => + match ctrl { + &mut ControlInstruction::CallClause(_, _, _, ref mut last_call, _) => + *last_call = true, + &mut ControlInstruction::JmpBy(_, _, _, ref mut last_call) => + *last_call = true, + &mut ControlInstruction::Proceed => {}, _ => dealloc_index += 1 - } - }, + }, Some(&mut Line::Cut(CutInstruction::Cut(_))) => dealloc_index += 1, _ => {}