minor modification to lco in codegen
This commit is contained in:
@@ -10,7 +10,6 @@ use prolog::targets::*;
|
|||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::collections::{HashMap};
|
use std::collections::{HashMap};
|
||||||
use std::mem;
|
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
|
|
||||||
@@ -236,18 +235,15 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<TermMarker>
|
|||||||
let mut dealloc_index = code.len() - 1;
|
let mut dealloc_index = code.len() - 1;
|
||||||
|
|
||||||
match code.last_mut() {
|
match code.last_mut() {
|
||||||
Some(&mut Line::Control(ref mut ctrl)) => {
|
Some(&mut Line::Control(ref mut ctrl)) =>
|
||||||
let old_ctrl = mem::replace(ctrl, ControlInstruction::Proceed);
|
match ctrl {
|
||||||
|
&mut ControlInstruction::CallClause(_, _, _, ref mut last_call, _) =>
|
||||||
match old_ctrl {
|
*last_call = true,
|
||||||
ControlInstruction::CallClause(ct, arity, pvs, false, use_default_cp) =>
|
&mut ControlInstruction::JmpBy(_, _, _, ref mut last_call) =>
|
||||||
*ctrl = ControlInstruction::CallClause(ct, arity, pvs, true, use_default_cp),
|
*last_call = true,
|
||||||
ControlInstruction::JmpBy(arity, offset, pvs, false) =>
|
&mut ControlInstruction::Proceed => {},
|
||||||
*ctrl = ControlInstruction::JmpBy(arity, offset, pvs, true),
|
|
||||||
ControlInstruction::Proceed => {},
|
|
||||||
_ => dealloc_index += 1
|
_ => dealloc_index += 1
|
||||||
}
|
},
|
||||||
},
|
|
||||||
Some(&mut Line::Cut(CutInstruction::Cut(_))) =>
|
Some(&mut Line::Cut(CutInstruction::Cut(_))) =>
|
||||||
dealloc_index += 1,
|
dealloc_index += 1,
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|||||||
Reference in New Issue
Block a user