From 7c2f626d56ff93703349cfd900a4c5da5800e7d1 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Wed, 6 Feb 2019 22:26:22 -0700 Subject: [PATCH] add verify_attributes driver code --- src/prolog/machine/attributed_variables.rs | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/prolog/machine/attributed_variables.rs diff --git a/src/prolog/machine/attributed_variables.rs b/src/prolog/machine/attributed_variables.rs new file mode 100644 index 00000000..b36997f2 --- /dev/null +++ b/src/prolog/machine/attributed_variables.rs @@ -0,0 +1,24 @@ +pub static VERIFY_ATTRS: &str = " +iterate([Var-Value|Bindings]) :- + '$get_attr_list'(Var, Ls), + call_verify_attributes(Ls, Var, Value), + iterate(Bindings), + '$restore_p_from_sfcp'. +iterate([]). + +call_verify_attributes(Attrs, _, _) :- + var(Attrs), !. +call_verify_attributes([Attr|Attrs], Var, Value) :- + '$module_of'(M, Attr), % write the owning module Attr to M. + catch(M:verify_attribute(Var, Value, Goals), error(existence_error(procedure, _), _), true), + call_verify_attribute_goals(Goals), + call_verify_attributes(Attrs, Var, Value). + +call_verify_attribute_goals(Goals) :- + var(Goals), throw(error(instantiation_error, call_verify_attribute_goals/1)). +call_verify_attribute_goals([Goal|Goals]) :- + call(Goal), + call_verify_attribute_goals(Goals). +call_verify_attribute_goals([]). +"; + -- 2.54.0