From: Mark Thom Date: Sun, 13 Oct 2019 20:13:52 +0000 (-0600) Subject: handle TCO when setting up verify_attributes interrupts X-Git-Tag: v0.8.110~7 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=da89b1af636a6335e71d877eaaf21a7dfa775ea4;p=scryer-prolog.git handle TCO when setting up verify_attributes interrupts --- diff --git a/Cargo.toml b/Cargo.toml index c9f70a8b..f3a72dd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scryer-prolog" -version = "0.8.107" +version = "0.8.108" authors = ["Mark Thom "] build = "build.rs" repository = "https://github.com/mthom/scryer-prolog" diff --git a/src/prolog/machine/attributed_variables.rs b/src/prolog/machine/attributed_variables.rs index 118bb082..d3ad71d0 100644 --- a/src/prolog/machine/attributed_variables.rs +++ b/src/prolog/machine/attributed_variables.rs @@ -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); } diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index 32cfd9c5..bd190741 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -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 {