From: Markus Triska Date: Sat, 20 Jan 2024 09:33:24 +0000 (+0100) Subject: ENHANCED: Throw representation errors for DCG bodies that use unsupported constructs. X-Git-Tag: v0.9.4~25^2~3 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=0559ddca2a28969de19faac9d427b0fef6888057;p=scryer-prolog.git ENHANCED: Throw representation errors for DCG bodies that use unsupported constructs. This addresses #2285. --- diff --git a/src/lib/dcgs.pl b/src/lib/dcgs.pl index 0876bd5a..40f44a59 100644 --- a/src/lib/dcgs.pl +++ b/src/lib/dcgs.pl @@ -176,8 +176,10 @@ dcg_constr(phrase(_)). % 7.14.9 dcg_constr(phrase(_,_)). % extension of 7.14.9 dcg_constr(phrase(_,_,_)). % extension of 7.14.9 dcg_constr(!). % 7.14.10 -%% dcg_constr(\+ _). % 7.14.11 - not (existence implementation dep.) -%% dcg_constr((_->_)). % 7.14.12 - if-then (existence implementation dep.) +dcg_constr(\+ _) :- % 7.14.11 - not (existence implementation dep.) + throw(error(representation_error(dcg_body), phrase/3)). +dcg_constr((_->_)) :- % 7.14.12 - if-then (existence implementation dep.) + throw(error(representation_error(dcg_body), phrase/3)). % The principal functor of the first argument indicates % the construct to be expanded. @@ -244,6 +246,8 @@ seqq([Es|Ess]) --> seq(Es), seqq(Ess). error_goal(error(E, must_be/2), error(E, must_be/2)). error_goal(error(E, (=..)/2), error(E, (=..)/2)). +error_goal(error(representation_error(dcg_body), Context), + error(representation_error(dcg_body), Context)). error_goal(E, _) :- throw(E). user:goal_expansion(phrase(GRBody, S, S0), GRBody2) :-