]> Repositorios git - scryer-prolog.git/commitdiff
fix arg/3 bug
authorMark Thom <[email protected]>
Sun, 21 Nov 2021 20:25:24 +0000 (13:25 -0700)
committerMark Thom <[email protected]>
Fri, 7 Jan 2022 04:44:41 +0000 (21:44 -0700)
src/lib/builtins.pl
src/machine/machine_state_impl.rs
src/machine/system_calls.rs

index ef9f555e462c6a2fa9ddc26f0bc0810bc68b67f4..730b97bd376db4d3e36ffff094a3b9946d78df6c 100644 (file)
@@ -209,10 +209,6 @@ repeat :- repeat.
 
 :- meta_predicate ->(0,0).
 
-% '!' is for internal use as a callable no-op within if/then/else.
-% Where it shouldn't be a no-op, it's interpreted under the expected
-% semantics by comma_dispatch/3.
-
 ! :- '$get_staggered_cp'(B), '$set_cp'(B).
 
 G1 -> G2 :- '$get_staggered_cp'(B), call('$call'(G1)), '$set_cp'(B), call('$call'(G2)).
index 47019772f9b0f113541bde4a0149f5b9aed91cb9..00556078dbca4b5b45caedafbf00cf5b36aa402c 100644 (file)
@@ -2974,7 +2974,7 @@ impl MachineState {
     // arg(+N, +Term, ?Arg)
     pub fn try_arg(&mut self) -> CallResult {
         let stub_gen = || functor_stub(atom!("arg"), 3);
-        let n = self.registers[1]; //self.store(self.deref(self.registers[1])); // TODO: necessary?
+        let n = self.store(self.deref(self.registers[1]));
 
         read_heap_cell!(n,
             (HeapCellValueTag::Var | HeapCellValueTag::AttrVar | HeapCellValueTag::StackVar) => {
index b5fb568e75864dc36c2858b6bd6181620d8cc6aa..5bc6a91566673dbd0c534f442d85063913175dae 100644 (file)
@@ -3795,12 +3795,12 @@ impl MachineState {
                 self.reset_block(addr);
             }
             &SystemClauseType::ResetContinuationMarker => {
-                self.registers[3] = atom_as_cell!(atom!("none"));
-
                 let h = self.heap.len();
-                self.heap.push(heap_loc_as_cell!(h));
 
+                self.registers[3] = atom_as_cell!(atom!("none"));
                 self.registers[4] = heap_loc_as_cell!(h);
+
+                self.heap.push(heap_loc_as_cell!(h));
             }
             &SystemClauseType::SetBall => {
                 self.set_ball();