fix style checker to be more self-contained.
This commit is contained in:
parent
3c4da56af2
commit
1369057cc4
78
C/cdmgr.c
78
C/cdmgr.c
@ -507,8 +507,6 @@ STATIC_PROTO(Int p_new_multifile, (void));
|
|||||||
STATIC_PROTO(Int p_is_multifile, (void));
|
STATIC_PROTO(Int p_is_multifile, (void));
|
||||||
STATIC_PROTO(Int p_optimizer_on, (void));
|
STATIC_PROTO(Int p_optimizer_on, (void));
|
||||||
STATIC_PROTO(Int p_optimizer_off, (void));
|
STATIC_PROTO(Int p_optimizer_off, (void));
|
||||||
STATIC_PROTO(Int p_in_this_f_before, (void));
|
|
||||||
STATIC_PROTO(Int p_first_cl_in_f, (void));
|
|
||||||
STATIC_PROTO(Int p_is_dynamic, (void));
|
STATIC_PROTO(Int p_is_dynamic, (void));
|
||||||
STATIC_PROTO(Int p_kill_dynamic, (void));
|
STATIC_PROTO(Int p_kill_dynamic, (void));
|
||||||
STATIC_PROTO(Int p_compile_mode, (void));
|
STATIC_PROTO(Int p_compile_mode, (void));
|
||||||
@ -2431,80 +2429,6 @@ Yap_add_logupd_clause(PredEntry *pe, LogUpdClause *cl, int mode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
|
||||||
p_in_this_f_before(void)
|
|
||||||
{ /* '$in_this_file_before'(N,A,M) */
|
|
||||||
unsigned int arity;
|
|
||||||
Atom at;
|
|
||||||
Term t;
|
|
||||||
register consult_obj *fp;
|
|
||||||
Prop p0;
|
|
||||||
Term mod;
|
|
||||||
|
|
||||||
if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t))
|
|
||||||
return (FALSE);
|
|
||||||
else
|
|
||||||
at = AtomOfTerm(t);
|
|
||||||
if (IsVarTerm(t = Deref(ARG2)) || !IsIntTerm(t))
|
|
||||||
return (FALSE);
|
|
||||||
else
|
|
||||||
arity = IntOfTerm(t);
|
|
||||||
if (IsVarTerm(mod = Deref(ARG3)) || !IsAtomTerm(mod))
|
|
||||||
return FALSE;
|
|
||||||
if (arity)
|
|
||||||
p0 = PredPropByFunc(Yap_MkFunctor(at, arity), mod);
|
|
||||||
else
|
|
||||||
p0 = PredPropByAtom(at, mod);
|
|
||||||
if (!ConsultSp || ConsultSp == ConsultBase || LastAssertedPred == RepPredProp(p0) || (fp = ConsultSp)->p == p0)
|
|
||||||
return FALSE;
|
|
||||||
else
|
|
||||||
fp++;
|
|
||||||
for (; fp < ConsultBase; ++fp)
|
|
||||||
if (fp->p == p0)
|
|
||||||
break;
|
|
||||||
if (fp != ConsultBase)
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Int
|
|
||||||
p_first_cl_in_f(void)
|
|
||||||
{ /* '$first_cl_in_file'(+N,+Ar,+Mod) */
|
|
||||||
unsigned int arity;
|
|
||||||
Atom at;
|
|
||||||
Term t;
|
|
||||||
register consult_obj *fp;
|
|
||||||
Prop p0;
|
|
||||||
Term mod;
|
|
||||||
|
|
||||||
|
|
||||||
if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t))
|
|
||||||
return (FALSE);
|
|
||||||
else
|
|
||||||
at = AtomOfTerm(t);
|
|
||||||
if (IsVarTerm(t = Deref(ARG2)) || !IsIntTerm(t))
|
|
||||||
return (FALSE);
|
|
||||||
else
|
|
||||||
arity = IntOfTerm(t);
|
|
||||||
if (IsVarTerm(mod = Deref(ARG3)) || !IsAtomTerm(mod))
|
|
||||||
return (FALSE);
|
|
||||||
if (arity)
|
|
||||||
p0 = PredPropByFunc(Yap_MkFunctor(at, arity),mod);
|
|
||||||
else
|
|
||||||
p0 = PredPropByAtom(at, mod);
|
|
||||||
if (LastAssertedPred == RepPredProp(p0))
|
|
||||||
return FALSE;
|
|
||||||
if (!ConsultSp)
|
|
||||||
return FALSE;
|
|
||||||
for (fp = ConsultSp; fp < ConsultBase; ++fp)
|
|
||||||
if (fp->p == p0)
|
|
||||||
break;
|
|
||||||
if (fp != ConsultBase)
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if EMACS
|
#if EMACS
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5732,8 +5656,6 @@ Yap_InitCdMgr(void)
|
|||||||
Yap_InitCPred("$clean_up_dead_clauses", 0, p_clean_up_dead_clauses, SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$clean_up_dead_clauses", 0, p_clean_up_dead_clauses, SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$optimizer_off", 0, p_optimizer_off, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$optimizer_off", 0, p_optimizer_off, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$kill_dynamic", 2, p_kill_dynamic, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$kill_dynamic", 2, p_kill_dynamic, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$in_this_file_before", 3, p_in_this_f_before, SafePredFlag|HiddenPredFlag);
|
|
||||||
Yap_InitCPred("$first_clause_in_file", 3, p_first_cl_in_f, SafePredFlag|HiddenPredFlag);
|
|
||||||
Yap_InitCPred("$new_multifile", 3, p_new_multifile, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$new_multifile", 3, p_new_multifile, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$is_multifile", 2, p_is_multifile, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$is_multifile", 2, p_is_multifile, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$is_profiled", 1, p_is_profiled, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$is_profiled", 1, p_is_profiled, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
|
@ -461,14 +461,14 @@ true :- true.
|
|||||||
'$$compile'(G1, G0, N, HeadMod).
|
'$$compile'(G1, G0, N, HeadMod).
|
||||||
|
|
||||||
'$prepare_term'(G, V, Pos, G0, G1, BodyMod, SourceMod, Source) :-
|
'$prepare_term'(G, V, Pos, G0, G1, BodyMod, SourceMod, Source) :-
|
||||||
'$precompile_term'(G, G0, G1, BodyMod, SourceMod),
|
|
||||||
(
|
(
|
||||||
get_value('$syntaxcheckflag',on)
|
get_value('$syntaxcheckflag',on)
|
||||||
->
|
->
|
||||||
'$check_term'(G0, V, Pos, Source, BodyMod)
|
'$check_term'(Source, V, Pos, BodyMod)
|
||||||
;
|
;
|
||||||
true
|
true
|
||||||
).
|
),
|
||||||
|
'$precompile_term'(G, G0, G1, BodyMod, SourceMod).
|
||||||
|
|
||||||
% process an input clause
|
% process an input clause
|
||||||
'$$compile'(G, G0, L, Mod) :-
|
'$$compile'(G, G0, L, Mod) :-
|
||||||
|
144
pl/checker.yap
144
pl/checker.yap
@ -106,7 +106,6 @@ no_style_check([]).
|
|||||||
no_style_check([H|T]) :- no_style_check(H), no_style_check(T).
|
no_style_check([H|T]) :- no_style_check(H), no_style_check(T).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'$syntax_check_mode'(O,N) :-
|
'$syntax_check_mode'(O,N) :-
|
||||||
'$values'('$syntaxcheckflag',O,N).
|
'$values'('$syntaxcheckflag',O,N).
|
||||||
|
|
||||||
@ -119,55 +118,78 @@ no_style_check([H|T]) :- no_style_check(H), no_style_check(T).
|
|||||||
'$syntax_check_multiple'(O,N) :-
|
'$syntax_check_multiple'(O,N) :-
|
||||||
'$values'('$syntaxcheckmultiple',O,N).
|
'$values'('$syntaxcheckmultiple',O,N).
|
||||||
|
|
||||||
|
% reset current state of style checker.
|
||||||
|
'$init_style_check'(File) :-
|
||||||
|
recorded('$predicate_defs','$predicate_defs'(_,_,_,File),R),
|
||||||
|
erase(R),
|
||||||
|
fail.
|
||||||
|
'$init_style_check'(_).
|
||||||
|
|
||||||
'$check_term'(T,_,P,_Source,M) :-
|
% style checker proper..
|
||||||
|
'$check_term'(T,VL,P,_) :-
|
||||||
|
get_value('$syntaxchecksinglevar',on),
|
||||||
|
'$singletons_in_clause'(T, VL, Sv),
|
||||||
|
Sv = [_|_],
|
||||||
|
'$sv_warning'(Sv,T),
|
||||||
|
fail.
|
||||||
|
'$check_term'(T,_,P,M) :-
|
||||||
get_value('$syntaxcheckdiscontiguous',on),
|
get_value('$syntaxcheckdiscontiguous',on),
|
||||||
'$xtract_head'(T,M,NM,_,F,A),
|
'$xtract_head'(T,M,NM,_,F,A),
|
||||||
'$handle_discontiguous'(F,A,NM), fail.
|
% should always fail
|
||||||
'$check_term'(T,_,P,_Source,M) :-
|
'$handle_discontiguous'(F,A,NM),
|
||||||
|
fail.
|
||||||
|
'$check_term'(T,_,P,M) :-
|
||||||
get_value('$syntaxcheckmultiple',on),
|
get_value('$syntaxcheckmultiple',on),
|
||||||
'$xtract_head'(T,M,NM,_,F,A),
|
'$xtract_head'(T,M,NM,_,F,A),
|
||||||
'$handle_multiple'(F,A,NM), fail.
|
'$handle_multiple'(F,A,NM),
|
||||||
'$check_term'(T,VL,P,_Source,_) :-
|
fail.
|
||||||
get_value('$syntaxchecksinglevar',on),
|
'$check_term'(T,_,_,M) :-
|
||||||
( '$chk_binding_vars'(T),
|
once((
|
||||||
'$sv_list'(VL,Sv)
|
get_value('$syntaxcheckdiscontiguous',on)
|
||||||
->
|
;
|
||||||
'$sv_warning'(Sv,T)
|
get_value('$syntaxcheckmultiple',on)
|
||||||
), fail.
|
)),
|
||||||
'$check_term'(_,_,_,_,_).
|
recorded('$reconsulting',File,_),
|
||||||
|
'$xtract_head'(T,M,NM,_,F,A),
|
||||||
|
\+ (
|
||||||
|
% allow duplicates if we are not the last predicate to have
|
||||||
|
% been asserted.
|
||||||
|
once(recorded('$predicate_defs','$predicate_defs'(F0,A0,M0,File),_)),
|
||||||
|
F0 = F, A0 = A, M0 = NM
|
||||||
|
),
|
||||||
|
recorda('$predicate_defs','$predicate_defs'(F,A,NM,File),_),
|
||||||
|
fail.
|
||||||
|
'$check_term'(_,_,_,_).
|
||||||
|
|
||||||
'$chk_binding_vars'(V) :- var(V), !, V = '$V'(_).
|
%
|
||||||
'$chk_binding_vars'('$V'(off)) :- !.
|
% output a list of singleton variables...
|
||||||
'$chk_binding_vars'(A) :- primitive(A), !.
|
%
|
||||||
'$chk_binding_vars'(S) :- S =.. [_|L],
|
'$singletons_in_clause'(T, VL, Sv) :-
|
||||||
'$chk_bind_in_struct'(L).
|
% first check which variables are not singleton
|
||||||
|
'$non_singletons_in_term'(T,[],V2L),
|
||||||
|
% bound them
|
||||||
|
'$ground_vars'(V2L),
|
||||||
|
% the remainder which do not start by _ are our target!
|
||||||
|
'$sv_list'(VL, Sv).
|
||||||
|
|
||||||
'$chk_bind_in_struct'([]).
|
'$ground_vars'([]).
|
||||||
'$chk_bind_in_struct'([H|T]) :-
|
'$ground_vars'(ground.V2L) :-
|
||||||
'$chk_binding_vars'(H),
|
'$ground_vars'(V2L).
|
||||||
'$chk_bind_in_struct'(T).
|
|
||||||
|
|
||||||
'$sv_list'([],[]).
|
'$sv_list'([],[]).
|
||||||
'$sv_list'([[[95|_]|_]|T],L) :-
|
'$sv_list'([[[95|_]|_]|T],L) :-
|
||||||
'$sv_list'(T,L).
|
'$sv_list'(T,L).
|
||||||
'$sv_list'([[Name|'$V'(V)]|T],[Name|L]) :- var(V), !,
|
'$sv_list'([_|V].T,L) :- nonvar(V), !,
|
||||||
'$sv_list'(T,L).
|
'$sv_list'(T,L).
|
||||||
'$sv_list'([_|T],L) :-
|
'$sv_list'([Name|_].T, Name.L) :-
|
||||||
'$sv_list'(T,L).
|
'$sv_list'(T,L).
|
||||||
|
|
||||||
|
|
||||||
'$sv_warning'([],_) :- !.
|
'$sv_warning'([], _) :- !.
|
||||||
'$sv_warning'(SVs,T) :-
|
'$sv_warning'(SVs, T) :-
|
||||||
'$current_module'(OM),
|
'$current_module'(OM),
|
||||||
'$xtract_head'(T,OM,M,H,Name,Arity),
|
'$xtract_head'(T, OM, M, H, Name, Arity),
|
||||||
( nb_getval('$consulting',false),
|
print_message(warning,singletons(SVs,(M:Name/Arity))).
|
||||||
'$first_clause_in_file'(Name,Arity, OM) ->
|
|
||||||
ClN = 1 ;
|
|
||||||
'$number_of_clauses'(H,M,ClN0),
|
|
||||||
ClN is ClN0+1
|
|
||||||
),
|
|
||||||
print_message(warning,singletons(SVs,(M:Name/Arity),ClN)).
|
|
||||||
|
|
||||||
'$xtract_head'(V,M,M,V,call,1) :- var(V), !.
|
'$xtract_head'(V,M,M,V,call,1) :- var(V), !.
|
||||||
'$xtract_head'((H:-_),OM,M,NH,Name,Arity) :- !,
|
'$xtract_head'((H:-_),OM,M,NH,Name,Arity) :- !,
|
||||||
@ -183,36 +205,54 @@ no_style_check([H|T]) :- no_style_check(H), no_style_check(T).
|
|||||||
'$xtract_head'(H,M,M,H,Name,Arity) :-
|
'$xtract_head'(H,M,M,H,Name,Arity) :-
|
||||||
functor(H,Name,Arity).
|
functor(H,Name,Arity).
|
||||||
|
|
||||||
|
% check if a predicate is discontiguous.
|
||||||
'$handle_discontiguous'(F,A,M) :-
|
'$handle_discontiguous'(F,A,M) :-
|
||||||
recorded('$discontiguous_defs','$df'(F,A,M),_), !.
|
recorded('$discontiguous_defs','$df'(F,A,M),_), !,
|
||||||
|
fail.
|
||||||
'$handle_discontiguous'(F,A,M) :-
|
'$handle_discontiguous'(F,A,M) :-
|
||||||
functor(Head, F, A),
|
functor(Head, F, A),
|
||||||
'$is_multifile'(Head, M), !.
|
'$is_multifile'(Head, M), !,
|
||||||
|
fail.
|
||||||
'$handle_discontiguous'(F,A,M) :-
|
'$handle_discontiguous'(F,A,M) :-
|
||||||
'$in_this_file_before'(F,A,M),
|
nb_getval('$consulting_file', FileName),
|
||||||
print_message(warning,clauses_not_together((M:F/A))).
|
% we have been there before
|
||||||
|
once(recorded('$predicate_defs','$predicate_defs'(F, A, M, FileName),_)),
|
||||||
|
% and we are not
|
||||||
|
\+ (
|
||||||
|
% the last predicate to have been asserted
|
||||||
|
once(recorded('$predicate_defs','$predicate_defs'(F0,A0,M0,FileName),_)),
|
||||||
|
F0 = F, A0 = A, M0 = M
|
||||||
|
),
|
||||||
|
print_message(warning,clauses_not_together((M:F/A))),
|
||||||
|
fail.
|
||||||
|
|
||||||
|
% never complain the second time
|
||||||
'$handle_multiple'(F,A,M) :-
|
'$handle_multiple'(F,A,M) :-
|
||||||
\+ '$first_clause_in_file'(F,A,M), !.
|
nb_getval('$consulting_file', FileName),
|
||||||
'$handle_multiple'(_,_,_) :-
|
recorded('$predicate_defs','$predicate_defs'(F,A,M,FileName),_), !.
|
||||||
nb_getval('$consulting',true), !.
|
% first time we have a definition
|
||||||
'$handle_multiple'(F,A,M) :-
|
'$handle_multiple'(F,A,M) :-
|
||||||
recorded('$predicate_defs','$predicate_defs'(F,A,M,Fil),_), !,
|
nb_getval('$consulting_file', FileName0),
|
||||||
'$multiple_has_been_defined'(Fil, F/A, M), !.
|
recorded('$predicate_defs','$predicate_defs'(F,A,M,FileName),_),
|
||||||
'$handle_multiple'(F,A,M) :-
|
FileName \= FileName0,
|
||||||
( recorded('$reconsulting',Fil,_) -> true ),
|
'$multiple_has_been_defined'(FileName, F/A, M), !.
|
||||||
recorda('$predicate_defs','$predicate_defs'(F,A,M,Fil),_).
|
|
||||||
|
|
||||||
|
% be careful about these cases.
|
||||||
|
% consult does not count
|
||||||
|
'$multiple_has_been_defined'(_, _, _) :-
|
||||||
|
nb_getval('$consulting',true), !.
|
||||||
|
% multifile does not count
|
||||||
'$multiple_has_been_defined'(_, F/A, M) :-
|
'$multiple_has_been_defined'(_, F/A, M) :-
|
||||||
functor(S, F, A),
|
functor(S, F, A),
|
||||||
'$is_multifile'(S, M), !.
|
'$is_multifile'(S, M), !.
|
||||||
|
'$multiple_has_been_defined'(Fil,F/A,M) :-
|
||||||
|
% first, clean up all definitions in other files
|
||||||
|
% don't forget, we just removed everything.
|
||||||
|
recorded('$predicate_defs','$predicate_defs'(F,A,M,FileName),R),
|
||||||
|
erase(R),
|
||||||
|
fail.
|
||||||
'$multiple_has_been_defined'(Fil,P,M) :-
|
'$multiple_has_been_defined'(Fil,P,M) :-
|
||||||
recorded('$reconsulting',F,_), !,
|
print_message(warning,defined_elsewhere(M:P,Fil)).
|
||||||
'$test_if_well_reconsulting'(F,Fil,M:P).
|
|
||||||
|
|
||||||
'$test_if_well_reconsulting'(F,F,_) :- !.
|
|
||||||
'$test_if_well_reconsulting'(_,Fil,P) :-
|
|
||||||
print_message(warning,defined_elsewhere(P,Fil)).
|
|
||||||
|
|
||||||
'$multifile'(V, _) :- var(V), !,
|
'$multifile'(V, _) :- var(V), !,
|
||||||
'$do_error'(instantiation_error,multifile(V)).
|
'$do_error'(instantiation_error,multifile(V)).
|
||||||
|
@ -252,6 +252,7 @@ use_module(M,F,Is) :-
|
|||||||
'$access_yap_flags'(18,GenerateDebug),
|
'$access_yap_flags'(18,GenerateDebug),
|
||||||
'$consult_infolevel'(InfLevel),
|
'$consult_infolevel'(InfLevel),
|
||||||
'$comp_mode'(OldCompMode, CompMode),
|
'$comp_mode'(OldCompMode, CompMode),
|
||||||
|
( get_value('$syntaxcheckflag',on) -> '$init_style_check'(File) ; true ),
|
||||||
recorda('$initialisation','$',_),
|
recorda('$initialisation','$',_),
|
||||||
( Reconsult = reconsult ->
|
( Reconsult = reconsult ->
|
||||||
'$start_reconsulting'(File),
|
'$start_reconsulting'(File),
|
||||||
|
@ -129,10 +129,10 @@ system_message(leash([A|B])) -->
|
|||||||
[ 'Leashing set to ~w.' - [[A|B]] ].
|
[ 'Leashing set to ~w.' - [[A|B]] ].
|
||||||
system_message(existence_error(prolog_flag,F)) -->
|
system_message(existence_error(prolog_flag,F)) -->
|
||||||
[ 'Prolog Flag ~w: new Prolog flags must be created using create_prolog_flag/3.' - [F] ].
|
[ 'Prolog Flag ~w: new Prolog flags must be created using create_prolog_flag/3.' - [F] ].
|
||||||
system_message(singletons([SV],P,CLN)) -->
|
system_message(singletons([SV],P)) -->
|
||||||
[ 'Singleton variable ~s in ~q, clause ~d.' - [SV,P,CLN] ].
|
[ 'Singleton variable ~s in ~q.' - [SV,P] ].
|
||||||
system_message(singletons(SVs,P,CLN)) -->
|
system_message(singletons(SVs,P)) -->
|
||||||
[ 'Singleton variables ~s in ~q, clause ~d.' - [SVsL, P, CLN] ],
|
[ 'Singleton variables ~s in ~q.' - [SVsL, P] ],
|
||||||
{ svs(SVs,SVsL,[]) }.
|
{ svs(SVs,SVsL,[]) }.
|
||||||
system_message(trace_command(-1)) -->
|
system_message(trace_command(-1)) -->
|
||||||
[ 'EOF is not a valid debugger command.' ].
|
[ 'EOF is not a valid debugger command.' ].
|
||||||
|
Reference in New Issue
Block a user