From 94939e793b0f10ef491366ca6ea34588dde6d6f5 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Wed, 28 Mar 2018 21:20:50 -0600 Subject: [PATCH] add call support for acyclic_term --- src/prolog/builtins.rs | 7 +++++-- src/prolog/macros.rs | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/prolog/builtins.rs b/src/prolog/builtins.rs index 1d5b80a2..6d3e678c 100644 --- a/src/prolog/builtins.rs +++ b/src/prolog/builtins.rs @@ -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)); diff --git a/src/prolog/macros.rs b/src/prolog/macros.rs index 940bdc39..90ec275a 100644 --- a/src/prolog/macros.rs +++ b/src/prolog/macros.rs @@ -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 { -- 2.54.0