1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
% -----------------------------------------------------------------------------
% (C) Altran Praxis Limited
% -----------------------------------------------------------------------------
%
% The SPARK toolset is free software; you can redistribute it and/or modify it
% under terms of the GNU General Public License as published by the Free
% Software Foundation; either version 3, or (at your option) any later
% version. The SPARK toolset is distributed in the hope that it will be
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
% Public License for more details. You should have received a copy of the GNU
% General Public License distributed with the SPARK toolset; see file
% COPYING3. If not, go to http://www.gnu.org/licenses for a complete copy of
% the license.
%
% =============================================================================
%###############################################################################
% PURPOSE
%-------------------------------------------------------------------------------
% Support file to offer improved reporting of warnings and errors detected
% at compilation.
%###############################################################################
%###############################################################################
% MODULE
%###############################################################################
%###############################################################################
% DEPENDENCIES
%###############################################################################
:- use_module(library(lists)).
%###############################################################################
% TYPES
%###############################################################################
%###############################################################################
% DATA
%###############################################################################
:- dynamic(defect_counter/1).
:- assert(defect_counter(0)).
%###############################################################################
% PREDICATES
%###############################################################################
%===============================================================================
% message_hook(+Severity, +Message, +Lines).
%-------------------------------------------------------------------------------
% Provide an alternative implementation for the message_hook. This enables
% us abort with an error code, preventing compilation, if any defects are
% detected. Further, it also supports slightly cleaner defect reports, to
% assist in debugging.
%===============================================================================
% Report errors and warnings, and count these as defects.
message_hook(_Message, Severity, Lines):-
member(Severity,[error, warning]),
increase_defect_counter,
% Present defect message, preceded by separating blank line.
nl(user_error),
print_message_lines(user_error, Severity, Lines), flush_output,
!.
% Report all other messages, but do not separate these with blank lines nor
% count these as defects.
message_hook(_Message, Severity, Lines):-
!.
%-------------------------------------------------------------------------------
increase_defect_counter:-
retract(defect_counter(At_Int)),
Next_Int is At_Int+1,
assert(defect_counter(Next_Int)),
!.
%===============================================================================
%===============================================================================
% zero_defects_reported.
%-------------------------------------------------------------------------------
% Succeeds where zero defects have been reported.
%===============================================================================
zero_defects_reported:-
defect_counter(0),
!.
%===============================================================================
%===============================================================================
% report_total_defects.
%-------------------------------------------------------------------------------
% Report the total number of defects reported.
%===============================================================================
report_total_defects:-
defect_counter(At_Int),
nl,
write(At_Int),
write(' defects detected.'), nl,
nl,
!.
%===============================================================================
%###############################################################################
% END-OF-FILE
|