]> Repositorios git - scryer-prolog.git/commitdiff
fix incorrect handling of terminal cuts.
authorMark Thom <[email protected]>
Thu, 2 Nov 2017 21:29:31 +0000 (15:29 -0600)
committerMark Thom <[email protected]>
Thu, 2 Nov 2017 21:29:31 +0000 (15:29 -0600)
src/prolog/codegen.rs
src/prolog/io.rs
src/prolog/machine.rs

index d67c32e02decd0ba2b1744cbc6935a18771454ee..1a9bb7438c1b4ee44f5b53416abc1ebf4a92e59f 100644 (file)
@@ -247,6 +247,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                 if let &mut Line::Control(ref mut ctrl) = body.last_mut().unwrap() {
                     *ctrl = ControlInstruction::CatchExecute;
                 },
+            QueryTermRef::Cut => {},
             QueryTermRef::Throw(_) =>
                 if let &mut Line::Control(ref mut ctrl) = body.last_mut().unwrap() {
                     *ctrl = ControlInstruction::ThrowExecute;
index 6610c233391193cc05d93e0a956388dd549b6c71..320c9e59484d480338705147dd08cd228d7605e1 100644 (file)
@@ -255,7 +255,7 @@ pub fn eval<'a, 'b: 'a>(wam: &'a mut Machine, tl: &'b TopLevel) -> EvalSession<'
         &TopLevel::Predicate(ref clauses) => {
             let mut cg = CodeGenerator::<DebrayAllocator>::new();
 
-            let compiled_pred = cg.compile_predicate(clauses);            
+            let compiled_pred = cg.compile_predicate(clauses);
             wam.add_predicate(clauses, compiled_pred)
         },
         &TopLevel::Fact(ref fact) => {
index 6c235647a91d1a69beedf62fe0f067ff72845109..3c93ff67b1cf5bc84efcdd9045818bdf1c012403 100644 (file)
@@ -36,7 +36,7 @@ struct MachineState {
     tr: usize,
     hb: usize,
     block: usize, // an offset into the OR stack.
-    ball: (usize, Heap) // heap boundary, and a term copy    
+    ball: (usize, Heap) // heap boundary, and a term copy
 }
 
 struct DuplicateTerm<'a> {
@@ -446,7 +446,7 @@ impl Machine {
                     static ref ERR_STRING: String = String::from("an operator can't be both \
                                                                   infix and postfix.");
                 }
-                
+
                 if is_infix!(spec) {
                     match self.op_dir.get(&(name.clone(), Fixity::Post)) {
                         Some(_) => return EvalSession::EntryFailure(ERR_STRING.clone()),
@@ -479,7 +479,7 @@ impl Machine {
             }
         }
     }
-    
+
     pub fn submit_query<'a>(&mut self, code: Code, alloc_locs: AllocVarDict<'a>) -> EvalSession<'a>
     {
         let mut heap_locs = HashMap::new();
@@ -1658,7 +1658,7 @@ impl MachineState {
                 }
 
                 if let &Terminal::Terminal = term {
-                    self.p = CodePtr::default();
+                    self.p = self.cp;
                 } else {
                     self.p += 1;
                 }
@@ -1680,7 +1680,7 @@ impl MachineState {
                 }
 
                 if let &Terminal::Terminal = term {
-                    self.p = CodePtr::default();
+                    self.p = self.cp;
                 } else {
                     self.p += 1;
                 }