move error handling to early on so as to get feedback on errors since bootstrap.

This commit is contained in:
Vítor Santos Costa 2016-02-21 19:09:10 +00:00
parent d5862139c8
commit f017f38dee
5 changed files with 103 additions and 110 deletions

View File

@ -171,7 +171,7 @@ list, since backtracking could not "pass through" the cut.
*/
system_module(Mod, _SysExps, _Decls) :- ! .
system_module(_Mod, _SysExps, _Decls) :- ! .
% new_system_module(Mod).
use_system_module(_init, _SysExps) :- !.
@ -252,6 +252,55 @@ private(_).
:- use_system_module( '$_strict_iso', ['$check_iso_strict_clause'/1,
'$iso_check_goal'/2]).
'$early_print_message'(_, absolute_file_path(X, Y)) :- !,
format(user_error, X, Y), nl(user_error).
'$early_print_message'(_, loading( C, F)) :- !,
'$show_consult_level'(LC),
format(user_error, '~*|% ~a ~w...~n', [LC,C,F]).
'$early_print_message'(_, loaded(F,C,M,T,H)) :- !,
'$show_consult_level'(LC),
format(user_error, '~*|% ~a:~w ~a ~d bytes in ~d seconds...~n', [LC, M, F ,C, H, T]).
'$early_print_message'(Level, Msg) :-
source_location(F0, L),
!,
format(user_error, '~a:~d:0: unprocessed ~a ~w ~n', [F0, L,Level,Msg]).
'$early_print_message'(Level, Msg) :-
format(user_error, 'unprocessed ~a ~w ~n', [Level,Msg]).
'$exceptional_cases'(_:print_message(Context, Msg)) :-
'$early_print_message'(Context, Msg).
'$undefp'([M0|G0], Action) :-
% make sure we do not loop on undefined predicates
'$stop_creeping'(Current),
yap_flag( unknown, _, fail),
% yap_flag( debug, Debug, false),
(
'$exceptional_cases'(M0:G0),
'$undefp_search'(M0:G0, NM:NG),
( M0 \== NM -> true ; G0 \== NG ),
NG \= fail,
'$pred_exists'(NG,NM)
->
yap_flag( unknown, _, Action),
% yap_flag( debug, _, Debug),
(
Current == true
->
% carry on signal processing
'$start_creep'([NM|NG], creep)
;
'$execute0'(NG, NM)
)
;
yap_flag( unknown, _, Action),
% yap_flag( debug, _, Debug),
'$pred_exists'('$handle_error'(Action,G0,M0), prolog),
'$handle_error'(Action,G0,M0)
).
/*
'$undefp'([M0|G0], Default) :-
G0 \= '$imported_predicate'(_,_,_,_),
@ -281,11 +330,13 @@ private(_).
'$prepare_goals'(A,NA,Any).
'$prepare_goals'('$do_error'(Error,Goal),
(clause_location(Call, Caller),
source_module(M),
strip_module(M:Goal,M1,NGoal),
throw(error(Error, [[g|g(M1:NGoal)],[p|Call],[e|Caller],[h|g(Head)]]))
),
true) :-
!.
!,
'$head_and_body'(NGoal,Head,_Body).
'$prepare_goals'(X is AOB,
is(X, IOp, A, B ),
true) :-
@ -741,7 +792,7 @@ number of steps.
recorded('$import','$import'(NM,Mod,NH,H,_,_),RI),
% NM \= Mod,
functor(NH,N,Ar),
'$early_print'(warning,redefine_imported(Mod,NM,M:N/Ar)),
'$early_print'(warning,redefine_imported(Mod,NM,Mod:N/Ar)),
erase(RI),
fail.
'$init_pred'(H, Mod, Where ) :-
@ -1432,7 +1483,7 @@ bootstrap(F) :-
current_prolog_flag(strict_iso, true) /* strict_iso on */
->
Expanded = ExpandedI,
'$check_iso_strict_clause'(Expanded0)
'$check_iso_strict_clause'(ExpandedUser)
;
'$expand_array_accesses_in_term'(ExpandedI,Expanded)
-> true
@ -1651,7 +1702,8 @@ log_event( String, Args ) :-
yap_flag(toplevel_prompt, P),
atomic_concat(LF, PF),
prompt1(PF),
prompt(_,' ').
prompt(_,' '),
'$ensure_prompting'.
/**

View File

@ -90,16 +90,6 @@ system_error(Type,Goal,Culprit) :-
[p|Call],
[e|Caller]])).
'$do_error'(Type,Goal) :-
% format('~w~n', [Type]),
ancestor_location(Call, Caller),
throw(error(Type, [
[g|g(Goal)],
[p|Call],
[e|Caller]])).
'$do_pi_error'(type_error(callable,Name/0),Message) :- !,
'$do_error'(type_error(callable,Name),Message).
'$do_pi_error'(Error,Message) :- !,

View File

@ -110,30 +110,6 @@ otherwise.
:- '$all_current_modules'(M), yap_flag(M:unknown, error) ; true.
'$early_print_message'(_, absolute_file_path(X, Y)) :- !,
format(user_error, X, Y), nl(user_error).
'$early_print_message'(_, loading( C, F)) :- !,
'$show_consult_level'(LC),
format(user_error, '~*|% ~a ~w...~n', [LC,C,F]).
'$early_print_message'(_, loaded(F,C,M,T,H)) :- !,
'$show_consult_level'(LC),
format(user_error, '~*|% ~a:~w ~a ~d bytes in ~d seconds...~n', [LC, M, F ,C, H, T]).
'$early_print_message'(Level, Msg) :-
source_location(F0, L),
!,
format(user_error, '~a:~d:0: unprocessed ~a ~w ~n', [F0, L,Level,Msg]).
'$early_print_message'(Level, Msg) :-
format(user_error, 'unprocessed ~a ~w ~n', [Level,Msg]).
print_message(Severity, Term) :-
'$pred_exists'(execute_print_message(_,_), '$messages'),
'$messages':execute_print_message(Severity, Term),
!.
print_message(Level, Msg) :-
source_location(F0, L),
'$early_print_message'(Level, Msg).
:- bootstrap('arith.yap').

View File

@ -857,51 +857,6 @@ prolog:print_message_lines(S, Prefix0, Lines) :-
print_lines(S, [Prefix], Key, [Prefix|Msg], [])
).
execute_print_message(_, _Msg) :-
% first step at hook processi --ng
'$nb_getval'('$if_skip_mode',skip,fail),
!.
execute_print_message(silent, _Msg) :-
!.
execute_print_message(informational, _Msg) :-
current_prolog_flag(verbose, silent),
!.
execute_print_message(banner, _Msg) :-
current_prolog_flag(verbose, silent),
!.
execute_print_message(Severity, Msg) :-
(
var(Severity)
->
!,
format(user_error, 'malformed message ~q: message level is unbound~n', [Msg])
;
var(Msg)
->
!,
format(user_error, 'uninstantiated message~n', [])
;
user:portray_message(Severity, Msg)
),
!.
execute_print_message(force(_Severity), Msg) :- !,
print(user_error,Msg).
% This predicate has more hooks than a pirate ship!
execute_print_message(Severity, Term) :-
translate_message( Term, Severity, Lines0, [ end(Id)]),
Lines = [begin(Severity, Id)| Lines0],
(
user:message_hook(Term, Severity, Lines)
->
true
;
prefix( Severity, Prefix ),
prolog:print_message_lines(user_error, Prefix, Lines)
),
!.
execute_print_message(Severity, _Term) :-
format('No handler for ~a message ~q,~n',[Severity, _Term]).
/** @pred prolog:print_message(+ Severity, +Term)
The predicate print_message/2 is used to print messages, notably from
@ -930,6 +885,52 @@ stub to ensure everything os ok
*/
prolog:print_message(_, _Msg) :-
% first step at hook processi --ng
'$nb_getval'('$if_skip_mode',skip,fail),
!.
prolog:print_message(silent, _Msg) :-
!.
prolog:print_message(informational, _Msg) :-
current_prolog_flag(verbose, silent),
!.
prolog:print_message(banner, _Msg) :-
current_prolog_flag(verbose, silent),
!.
prolog:print_message(Severity, Msg) :-
(
var(Severity)
->
!,
format(user_error, 'malformed message ~q: message level is unbound~n', [Msg])
;
var(Msg)
->
!,
format(user_error, 'uninstantiated message~n', [])
;
user:portray_message(Severity, Msg)
),
!.
prolog:print_message(force(_Severity), Msg) :- !,
print(user_error,Msg).
% This predicate has more hooks than a pirate ship!
prolog:print_message(Severity, Term) :-
translate_message( Term, Severity, Lines0, [ end(Id)]),
Lines = [begin(Severity, Id)| Lines0],
(
user:message_hook(Term, Severity, Lines)
->
true
;
prefix( Severity, Prefix ),
prolog:print_message_lines(user_error, Prefix, Lines)
),
!.
prolog:print_message(Severity, _Term) :-
format('No handler for ~a message ~q,~n',[Severity, _Term]).
/**
@}
*/

View File

@ -104,32 +104,6 @@ Z * @pred '$undefp_expand'(+ M0:G0, -MG)
'$undefp_search'(MG, FMG) :-
expand_goal(MG, FMG).
'$undefp'([M0|G0], Action) :-
% make sure we do not loop on undefined predicates
'$stop_creeping'(Current),
yap_flag( unknown, _, fail),
% yap_flag( debug, Debug, false),
(
'$undefp_search'(M0:G0, NM:NG),
( M0 \== NM -> true ; G0 \== NG ),
NG \= fail,
'$pred_exists'(NG,NM)
->
yap_flag( unknown, _, Action),
% yap_flag( debug, _, Debug),
(
Current == true
->
% carry on signal processing
'$start_creep'([NM|NG], creep)
;
'$execute0'(NG, NM)
)
;
yap_flag( unknown, _, Action),
% yap_flag( debug, _, Debug),
'$handle_error'(Action,G0,M0)
).
/** @pred unknown(- _O_,+ _N_)