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. | ||
|  | */ |