From: Mark Thom Date: Wed, 22 Jun 2022 04:47:55 +0000 (-0600) Subject: capture and propagate (=..)/2 errors in phrase/{2,3} (#1460) X-Git-Tag: v0.9.1~4 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=607c84a79ba38326693617255ed692b1625d5f70;p=scryer-prolog.git capture and propagate (=..)/2 errors in phrase/{2,3} (#1460) --- diff --git a/src/lib/dcgs.pl b/src/lib/dcgs.pl index 4fe172f7..0c30447a 100644 --- a/src/lib/dcgs.pl +++ b/src/lib/dcgs.pl @@ -154,12 +154,17 @@ seqq([Es|Ess]) --> seq(Es), seqq(Ess). % Describes an arbitrary number of elements ... --> [] | [_], ... . + +error_goal(error(E, must_be/2), error(E, must_be/2)). +error_goal(error(E, (=..)/2), error(E, (=..)/2)). +error_goal(E, _) :- throw(E). + user:goal_expansion(phrase(GRBody, S, S0), GRBody1) :- load_context(GRBody, M, GRBody0), nonvar(GRBody0), catch(dcgs:dcg_body(GRBody0, S, S0, GRBody1, M), - error(E, must_be/2), - ( GRBody1 = throw(error(E, must_be/2)) ) + E, + dcgs:error_goal(E, GRBody1) ). user:goal_expansion(phrase(GRBody, S), phrase(GRBody, S, [])).