53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								find_undefs :-
							 | 
						||
| 
								 | 
							
								 %   check_args(undefs, boolean, true, true),
							 | 
						||
| 
								 | 
							
								    format('UNDEFINED procedure calls:~n===~n',[]),
							 | 
						||
| 
								 | 
							
								    pmodule(M),
							 | 
						||
| 
								 | 
							
								    findall(P, undef_in_m(M,P), Ps),
							 | 
						||
| 
								 | 
							
								    Ps = [_|_],
							 | 
						||
| 
								 | 
							
								      format('  * ~w~n', [M]),
							 | 
						||
| 
								 | 
							
								    member(P, Ps),
							 | 
						||
| 
								 | 
							
								    format('      + ~w:~n',[P]),
							 | 
						||
| 
								 | 
							
								     fail.
							 | 
						||
| 
								 | 
							
								find_undefs.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								pmodule(M) :-
							 | 
						||
| 
								 | 
							
								    findall(M, node(M, _,_,_), Ms),
							 | 
						||
| 
								 | 
							
								    sort(Ms, SMs),
							 | 
						||
| 
								 | 
							
								    member(M, SMs).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								called_in_module(M, P) :-
							 | 
						||
| 
								 | 
							
								    findall(P, edge((_ :- _-M:P)), Ps),
							 | 
						||
| 
								 | 
							
								    sort(Ps, SPs),
							 | 
						||
| 
								 | 
							
								    member(P, SPs).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								undef_in_m(M,P) :-
							 | 
						||
| 
								 | 
							
								    called_in_module(M, P),
							 | 
						||
| 
								 | 
							
								    \+ edge((_-M:P :- _)),
							 | 
						||
| 
								 | 
							
								    \+ is_private(_, M, P),
							 | 
						||
| 
								 | 
							
								    \+ is_public(_, M, P).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								    setof(M, Target^F^Line^NA^undef( ( Target :- F-M:NA ), Line  ), Ms ),
							 | 
						||
| 
								 | 
							
								    member( Mod, Ms ),
							 | 
						||
| 
								 | 
							
								    format('    module ~a:~n',[Mod]),
							 | 
						||
| 
								 | 
							
								    setof(NA, Target^F^Line^undef( ( Target :- F-Mod:NA ), Line  ), Ns ),
							 | 
						||
| 
								 | 
							
								    member( NA, Ns ),
							 | 
						||
| 
								 | 
							
								    \+ node( Mod , NA , _File1, _ ),
							 | 
						||
| 
								 | 
							
								    \+ node( prolog , NA , _File2, _ ),
							 | 
						||
| 
								 | 
							
								    format('      predicate ~w:~n',[NA]),
							 | 
						||
| 
								 | 
							
								    (
							 | 
						||
| 
								 | 
							
								        setof(F-Line, Target^undef( ( Target :- F-Mod:NA ), Line ), FLs ),
							 | 
						||
| 
								 | 
							
									member(F-L, FLs ),
							 | 
						||
| 
								 | 
							
									format('        line ~w, file ~a~n',[L,F]),
							 | 
						||
| 
								 | 
							
									fail
							 | 
						||
| 
								 | 
							
								    ;
							 | 
						||
| 
								 | 
							
								         setof(F-M,Type^node( M, NA, F, Type ) , FMs ),
							 | 
						||
| 
								 | 
							
									 format('      same name at:~n',[]),
							 | 
						||
| 
								 | 
							
									 member((F-L)-M, FMs ),
							 | 
						||
| 
								 | 
							
									 format('        module ~a, file ~a, line ~d~n',[M,F,L]),
							 | 
						||
| 
								 | 
							
									 fail
							 | 
						||
| 
								 | 
							
								    ).
							 | 
						||
| 
								 | 
							
								undefs.
							 | 
						||
| 
								 | 
							
								*/
							 |