34
35:- module(chr_compiler_errors,
36 [
37 chr_info/3,
38 chr_warning/3,
39 chr_error/3,
40 print_chr_error/1
41 ]). 42
43:- use_module(chr_compiler_options). 44
47
48chr_info(_,Message,Params) :-
49 ( \+verbosity_on ->
50 true
51 ;
52 long_line_with_equality_signs,
53 format(user_error,'CHR compiler:\n',[]),
54 format(user_error,Message,Params),
55 long_line_with_equality_signs
56 ).
60verbosity_on :-
61 current_prolog_flag(verbose,V), V \== silent,
62 current_prolog_flag(verbose_load,true).
71
72chr_warning(deprecated(Term),Message,Params) :- !,
73 long_line_with_equality_signs,
74 format(user_error,'CHR compiler WARNING: deprecated syntax ~w.\n',[Term]),
75 format(user_error,' `--> ',[]),
76 format(user_error,Message,Params),
77 format(user_error,' Support for deprecated syntax will be discontinued in the near future!\n',[]),
78 long_line_with_equality_signs.
79
80chr_warning(internal,Message,Params) :- !,
81 long_line_with_equality_signs,
82 format(user_error,'CHR compiler WARNING: something unexpected happened in the CHR compiler.\n',[]),
83 format(user_error,' `--> ',[]),
84 format(user_error,Message,Params),
85 format(user_error,' Your program may not have been compiled correctly!\n',[]),
86 format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]),
87 long_line_with_equality_signs.
88
89chr_warning(unsupported_pragma(Pragma,Rule),Message,Params) :- !,
90 long_line_with_equality_signs,
91 format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]),
92 format(user_error,' `--> ',[]),
93 format(user_error,Message,Params),
94 format(user_error,' Pragma is ignored!\n',[]),
95 long_line_with_equality_signs.
96chr_warning(problem_pragma(Pragma,Rule),Message,Params) :- !,
97 long_line_with_equality_signs,
98 format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]),
99 format(user_error,' `--> ',[]),
100 format(user_error,Message,Params),
101 long_line_with_equality_signs.
102
103chr_warning(_,Message,Params) :-
104 ( chr_pp_flag(verbosity,on) ->
105 long_line_with_equality_signs,
106 format(user_error,'CHR compiler WARNING:\n',[]),
107 format(user_error,' `--> ',[]),
108 format(user_error,Message,Params),
109 long_line_with_equality_signs
110 ;
111 true
112 ).
113
116
117chr_error(Type,Message,Params) :-
118 throw(chr_error(error(Type,Message,Params))).
119
120print_chr_error(error(Type,Message,Params)) :-
121 print_chr_error(Type,Message,Params).
122
123print_chr_error(syntax(Term),Message,Params) :- !,
124 long_line_with_equality_signs,
125 format(user_error,'CHR compiler ERROR: invalid syntax "~w".\n',[Term]),
126 format(user_error,' `--> ',[]),
127 format(user_error,Message,Params),
128 long_line_with_equality_signs.
129
130print_chr_error(type_error,Message,Params) :- !,
131 long_line_with_equality_signs,
132 format(user_error,'CHR compiler TYPE ERROR:\n',[]),
133 format(user_error,' `--> ',[]),
134 format(user_error,Message,Params),
135 long_line_with_equality_signs.
136
137print_chr_error(internal,Message,Params) :- !,
138 long_line_with_equality_signs,
139 format(user_error,'CHR compiler ERROR: something unexpected happened in the CHR compiler.\n',[]),
140 format(user_error,' `--> ',[]),
141 format(user_error,Message,Params),
142 format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]),
143 long_line_with_equality_signs.
144
145print_chr_error(cyclic_alias(Alias),_Message,_Params) :- !,
146 long_line_with_equality_signs,
147 format(user_error,'CHR compiler ERROR: cyclic alias "~w".\n',[Alias]),
148 format(user_error,' `--> Aborting compilation.\n',[]),
149 long_line_with_equality_signs.
150
151print_chr_error(_,Message,Params) :-
152 long_line_with_equality_signs,
153 format(user_error,'CHR compiler ERROR:\n',[]),
154 format(user_error,' `--> ',[]),
155 format(user_error,Message,Params),
156 long_line_with_equality_signs.
157
159
160
161:- public
162 format_rule/1. 163
164format_rule(PragmaRule) :-
165 PragmaRule = pragma(_,_,Pragmas,MaybeName,N),
166 ( MaybeName = yes(Name) ->
167 write('rule '), write(Name)
168 ;
169 write('rule number '), write(N)
170 ),
171 ( memberchk(line_number(LineNumber),Pragmas) ->
172 write(' (line '),
173 write(LineNumber),
174 write(')')
175 ;
176 true
177 ).
178
179long_line_with_equality_signs :-
180 format(user_error,'================================================================================\n',[])