]> Repositorios git - scryer-prolog.git/commitdiff
handle TCO when setting up verify_attributes interrupts
authorMark Thom <[email protected]>
Sun, 13 Oct 2019 20:13:52 +0000 (14:13 -0600)
committerMark Thom <[email protected]>
Sun, 13 Oct 2019 20:13:52 +0000 (14:13 -0600)
Cargo.toml
src/prolog/machine/attributed_variables.rs
src/prolog/machine/mod.rs

index c9f70a8baf3848ec1cdc926847316078af444e0a..f3a72dd0fba69819c017b0e54db5d0ec3d4df9db 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "scryer-prolog"
-version = "0.8.107"
+version = "0.8.108"
 authors = ["Mark Thom <[email protected]>"]
 build = "build.rs"
 repository = "https://github.com/mthom/scryer-prolog"
index 118bb0823ffefc3a2e7b3903d29009eebb44795c..d3ad71d0b41fd8a3100b02c0886f811f5259574c 100644 (file)
@@ -40,7 +40,12 @@ impl AttrVarInitializer {
 impl MachineState {
     pub(super) fn push_attr_var_binding(&mut self, h: usize, addr: Addr) {
         if self.attr_var_init.bindings.is_empty() {
-            self.attr_var_init.cp = self.p.local();
+            if self.last_call {
+                self.attr_var_init.cp = self.cp;
+            } else {
+                self.attr_var_init.cp = self.p.local();
+            }
+            
             self.p = CodePtr::VerifyAttrInterrupt(self.attr_var_init.verify_attrs_loc);
         }
 
index 32cfd9c580e0f069d1d03ec061137713658618cf..bd19074197687901ee0a81bafe2f99480b929e8b 100644 (file)
@@ -1046,7 +1046,7 @@ impl MachineState {
 
             match self.p {
                 CodePtr::VerifyAttrInterrupt(_) => {
-                    self.p = CodePtr::Local(self.attr_var_init.cp);// + 1);
+                    self.p = CodePtr::Local(self.attr_var_init.cp);
 
                     if !self.verify_attr_stepper(indices, policies, code_repo, prolog_stream) {
                         if self.fail {