]> Repositorios git - scryer-prolog.git/commitdiff
add call support for acyclic_term
authorMark Thom <[email protected]>
Thu, 29 Mar 2018 03:20:50 +0000 (21:20 -0600)
committerMark Thom <[email protected]>
Thu, 29 Mar 2018 03:20:50 +0000 (21:20 -0600)
src/prolog/builtins.rs
src/prolog/macros.rs

index 1d5b80a207d742e93763e6e86c6ade70e1e00f01..6d3e678c9492fc6c6cd35ea5ea954b3f2c4f8994 100644 (file)
@@ -624,7 +624,8 @@ fn get_builtins() -> Code {
          is_atom!(temp_v!(1)), // atom/1, 465.
          proceed!(),
          sort_execute!(), // sort/2, 467.
-         keysort_execute!() // keysort/2, 468.
+         keysort_execute!(), // keysort/2, 468.
+         acyclic_term_execute!(), // acyclic_term/1, 469.
     ]
 }
 
@@ -740,6 +741,7 @@ pub fn build_code_and_op_dirs() -> (CodeDir, OpDir)
     code_dir.insert((clause_name!("atom"), 1), (465, builtin.clone()));
     code_dir.insert((clause_name!("sort"), 2), (467, builtin.clone()));
     code_dir.insert((clause_name!("keysort"), 2), (468, builtin.clone()));
+    code_dir.insert((clause_name!("acyclic_term"), 1), (469, builtin.clone()));
     
     (code_dir, op_dir)
 }
@@ -801,7 +803,8 @@ pub fn builtin_module() -> Module
                                             (clause_name!("compare"), 3),
                                             (clause_name!("atom"), 1),
                                             (clause_name!("sort"), 2),
-                                            (clause_name!("keysort"), 2)]);
+                                            (clause_name!("keysort"), 2),
+                                            (clause_name!("acyclic_term"), 1)]);
 
     for arity in 0 .. 63 {
         module_decl.exports.push((clause_name!("call"), arity));
index 940bdc39438ca58426680a52124cc799bd1b8be5..90ec275aa6d46b17fd518a35058bb3e583c9e842 100644 (file)
@@ -728,6 +728,12 @@ macro_rules! keysort_execute {
     )
 }
 
+macro_rules! acyclic_term_execute {
+    () => (
+        Line::Control(ControlInstruction::CallClause(ClauseType::AcyclicTerm, 1, 0, true))
+    )
+}
+
 macro_rules! return_from_clause {
     ($lco:expr, $machine_st:expr) => {{
         if $lco {