From: Mark Thom Date: Thu, 7 Feb 2019 05:26:22 +0000 (-0700) Subject: add verify_attributes driver code X-Git-Tag: v0.8.110~269 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=7c2f626d56ff93703349cfd900a4c5da5800e7d1;p=scryer-prolog.git add verify_attributes driver code --- 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([]). +"; +