From: Mark Thom Date: Thu, 9 Nov 2017 05:57:40 +0000 (-0700) Subject: remove Div for ast.rs X-Git-Tag: v0.8.110~676 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=d6086390e0838129b8c6af41e39a9b3b7784bfd5;p=scryer-prolog.git remove Div for ast.rs --- diff --git a/src/prolog/and_stack.rs b/src/prolog/and_stack.rs index c1294be5..77a729f9 100644 --- a/src/prolog/and_stack.rs +++ b/src/prolog/and_stack.rs @@ -3,6 +3,7 @@ use prolog::ast::*; use std::ops::{Index, IndexMut}; use std::vec::Vec; +#[derive(Clone)] pub struct Frame { pub global_index: usize, pub b0: usize, @@ -12,13 +13,13 @@ pub struct Frame { } impl Frame { - fn new(global_index: usize, sz: usize, e: usize, cp: CodePtr, n: usize) -> Self { + fn new(global_index: usize, fr: usize, e: usize, cp: CodePtr, n: usize) -> Self { Frame { - global_index: global_index, + global_index, b0: 0, e: e, cp: cp, - perms: (1 .. n+1).map(|i| Addr::StackCell(sz, i)).collect() + perms: (1 .. n+1).map(|i| Addr::StackCell(fr, i)).collect() } } } @@ -47,6 +48,10 @@ impl AndStack { pub fn clear(&mut self) { self.0.clear() } + + pub fn pop(&mut self) { + self.0.pop(); + } } impl Index for AndStack { diff --git a/src/prolog/ast.rs b/src/prolog/ast.rs index 05fc31b5..9e6b493e 100644 --- a/src/prolog/ast.rs +++ b/src/prolog/ast.rs @@ -9,7 +9,7 @@ use std::collections::{HashMap, VecDeque}; use std::fmt; use std::io::Error as IOError; use std::num::{ParseFloatError}; -use std::ops::{Add, AddAssign, Sub, Mul, Div, Neg}; +use std::ops::{Add, AddAssign, Sub, Mul, Neg}; use std::str::Utf8Error; use std::vec::Vec; diff --git a/src/prolog/machine.rs b/src/prolog/machine.rs index 68374c92..0d924618 100644 --- a/src/prolog/machine.rs +++ b/src/prolog/machine.rs @@ -1511,9 +1511,10 @@ impl MachineState { match instr { &ControlInstruction::Allocate(num_cells) => { let num_frames = self.num_frames(); - self.and_stack.push(num_frames + 1, self.e, self.cp, num_cells); + self.and_stack.push(num_frames + 1, self.e, self.cp, num_cells); self.e = self.and_stack.len() - 1; + self.p += 1; }, &ControlInstruction::Call(ref name, arity, _) => @@ -1538,7 +1539,7 @@ impl MachineState { self.cp = self.and_stack[e].cp; self.e = self.and_stack[e].e; - + self.p += 1; }, &ControlInstruction::Execute(ref name, arity) =>