initial updates

This commit is contained in:
Vítor Santos Costa 2015-11-13 13:24:31 +00:00
parent 4cea2839e4
commit 7236d4a527
2 changed files with 88 additions and 79 deletions

View File

@ -4,14 +4,14 @@
***********************************************************/ ***********************************************************/
load( D/MAP ) :- load( D, _OMAP ) :-
working_directory(_, D), working_directory(_, D),
fail. fail.
load( Map ) :- load( _, _Map ) :-
% from libraries outside the current directories % from libraries outside the current directories
assert( node( attributes, woken_att_do/4, 'library/atts.yap', prolog ) ), assert( node( attributes, woken_att_do/4, 'library/atts.yap', prolog ) ),
fail. fail.
load( D, Map ) :- load( _ , Dirs ) :-
dirs( Dirs ), dirs( Dirs ),
%%% phase 1: find modules %%% phase 1: find modules
nb_setval( current_module, user ), nb_setval( current_module, user ),
@ -23,25 +23,20 @@ load( D, Map ) :-
maplist( c_preds, Dirs ). maplist( c_preds, Dirs ).
dirs( Roots ) :- dirs( Roots ) :-
member( Root-_, Roots ), member( Root-_, Roots ),
% (Root = 'OPTYap' -> start_low_level_trace ; true ),
absolute_file_name( Root, FRoot ), absolute_file_name( Root, FRoot ),
rdir( FRoot ), rdir( FRoot ),
fail. fail.
dirs( _Roots ). dirs( _Roots ).
rdir( FRoot ) :- rdir( FRoot ) :-
directory_files( FRoot , Files), absolute_file_name( FRoot, [glob(*), solutions(all), file_errors(fail)], File ),
member( File, Files ), \+ doskip( File ),
atom_concat( [FRoot,'/',File], New0 ),
absolute_file_name( New0, New ),
\+ doskip( New ),
( (
file_property( New, type(directory) ) file_property( File, type(directory) )
-> ->
File \= '.', rdir( File )
File \= '..',
File \= '.git',
rdir( New )
; ;
assert_new( dir( FRoot, File )) assert_new( dir( FRoot, File ))
), ),
@ -50,10 +45,7 @@ rdir(_).
c_preds(Dir - Mod) :- c_preds(Dir - Mod) :-
atom( Dir ), atom( Dir ),
atom_concat([Dir,'/*'], Pattern), % */ absolute_file_name( Dir, [glob(*), solutions(all), file_errors(fail)], File ),
expand_file_name( Pattern, Files ),
member( File0, Files ),
absolute_file_name( File0, File ),
( ( sub_atom(File,_,_,0,'.c') ( ( sub_atom(File,_,_,0,'.c')
; ;
sub_atom(File,_,_,0,'.i') sub_atom(File,_,_,0,'.i')
@ -61,7 +53,7 @@ c_preds(Dir - Mod) :-
sub_atom(File,_,_,0,'.C') sub_atom(File,_,_,0,'.C')
; ;
sub_atom(File,_,_,0,'.cpp') sub_atom(File,_,_,0,'.cpp')
; ;
sub_atom(File,_,_,0,'.icc') sub_atom(File,_,_,0,'.icc')
; ;
sub_atom(File,_,_,0,'.h') sub_atom(File,_,_,0,'.h')
@ -70,8 +62,6 @@ c_preds(Dir - Mod) :-
c_file( File , Mod ) c_file( File , Mod )
; ;
exists_directory( File ), exists_directory( File ),
\+ atom_concat(_, '/.', File),
\+ atom_concat(_, '/..', File),
\+ doskip( File ), \+ doskip( File ),
c_preds( File - Mod ) c_preds( File - Mod )
), ),
@ -94,22 +84,22 @@ c_file(F, Mod) :-
!, !,
close(S) close(S)
; ;
sub_string(String, _, _, _, "PL_extension"), sub_string(String, _, _, _, `PL_extension`),
%writeln(Fields), %writeln(Fields),
c_ext(S, Mod, F), c_ext(S, Mod, F),
fail fail
; ;
split_string(String, ",; ()\t\"\'", Fields), %' split_string(String, `,; ()\t\"\'`, Fields), %'
%writeln(Fields), %writeln(Fields),
line_count(S, Lines), line_count(S, Lines),
c_line(Fields , Mod, F:Lines), c_line(Fields , Mod, F:Lines),
fail fail
). ).
c_line(["}"], Mod, _) :- !, c_line([`}`], Mod, _) :- !,
nb_setval( current_module, Mod ). nb_setval( current_module, Mod ).
c_line(Line, _Mod, _) :- c_line(Line, _Mod, _) :-
append( _, [ "CurrentModule", "=", M|_], Line), append( _, [ `CurrentModule`, `=`, M|_], Line),
system_mod(M, _Mod, Mod, _), system_mod(M, _Mod, Mod, _),
nb_setval( current_module, Mod ). nb_setval( current_module, Mod ).
c_line(Line, Mod, F: LineP) :- c_line(Line, Mod, F: LineP) :-
@ -121,10 +111,10 @@ c_ext( S, Mod, F ) :-
repeat, repeat,
read_line_to_string( S, String ), read_line_to_string( S, String ),
( (
sub_string( String, _, _, _, "NULL" ), sub_string( String, _, _, _, `NULL` ),
! !
; ;
split_string(String, ",; (){}\t\"\'", ["FRG", NS,AS,FS|_]), %' split_string(String, `,; (){}\t\"\'`, [`FRG`, NS,AS,FS|_]), %'
atom_string(N,NS), atom_string(N,NS),
atom_string(Fu,FS), atom_string(Fu,FS),
number_string(A, AS), number_string(A, AS),
@ -133,7 +123,7 @@ c_ext( S, Mod, F ) :-
assert( node( Mod , N/A, F-Line, Fu ) ), assert( node( Mod , N/A, F-Line, Fu ) ),
handle_pred( Mod, N, A, F ) handle_pred( Mod, N, A, F )
; ;
split_string(String, ",; (){}\t\"\'", [NS,AS,FS|_]), %' split_string(String, `,; (){}\t\"\'`, [NS,AS,FS|_]), %'
atom_string(N,NS), atom_string(N,NS),
atom_string(Fu,FS), atom_string(Fu,FS),
number_string(A, AS), number_string(A, AS),
@ -154,12 +144,12 @@ break_line( Line, N/A, swi(Fu)) :-
take_line( Line, NS, AS, FS ), !, take_line( Line, NS, AS, FS ), !,
atom_string(N,NS), atom_string(N,NS),
number_string(A, AS), number_string(A, AS),
atomic_concat(["pl_",FS,"_",A,"_va"], Fu). atomic_concat([`pl_`,FS,`_`,A,`_va`], Fu).
break_line( Line, N/A, bp(Fu)) :- break_line( Line, N/A, bp(Fu)) :-
take_line( Line, NS, AS, FS ), !, take_line( Line, NS, AS, FS ), !,
atom_string(N,NS), atom_string(N,NS),
number_string(A, AS), number_string(A, AS),
atomic_concat(["pc_",FS,"_",A], Fu). atomic_concat([`pc_`,FS,`_`,A], Fu).
break_line( Line, N/A, c(FuE, FuB)) :- break_line( Line, N/A, c(FuE, FuB)) :-
take_line( Line, NS, AS, FSE, FSB ), !, take_line( Line, NS, AS, FSE, FSB ), !,
atom_string(N,NS), atom_string(N,NS),
@ -168,57 +158,57 @@ break_line( Line, N/A, c(FuE, FuB)) :-
number_string(A, AS). number_string(A, AS).
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "Yap_InitCPred", NS, AS, FS|_], Line), !. append( _, [ `Yap_InitCPred`, NS, AS, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "Yap_InitAsmPred", NS, AS, _, FS|_], Line), !. append( _, [ `Yap_InitAsmPred`, NS, AS, _, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "Yap_InitCmpPred", NS, AS, FS|_], Line), !. append( _, [ `Yap_InitCmpPred`, NS, AS, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "Yap_InitCmpPred", NS, AS, FS|_], Line), !. append( _, [ `Yap_InitCmpPred`, NS, AS, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "YAP_UserCPredicate", NS, FS, AS|_], Line), !. append( _, [ `YAP_UserCPredicate`, NS, FS, AS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "PRED", NS0, AS, FS|_], Line), !, append( _, [ `PRED`, NS0, AS, FS|_], Line), !,
append( ["pl_", NS0, AS, "_va"], NS ). append( [`pl_`, NS0, AS, `_va`], NS ).
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "PRED_IMPL", NS0, AS, FS|_], Line), !, append( _, [ `PRED_IMPL`, NS0, AS, FS|_], Line), !,
append( ["pl_", NS0, AS, "_va"], NS ). append( [`pl_`, NS0, AS, `_va`], NS ).
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "PL_register_foreign", NS, AS, FS|_], Line), !. append( _, [ `PL_register_foreign`, NS, AS, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "PRED_DEF", NS0, AS, FS|_], Line), !, append( _, [ `PRED_DEF`, NS0, AS, FS|_], Line), !,
append( ["pl_", NS0, AS, "_va"], NS ). append( [`pl_`, NS0, AS, `_va`], NS ).
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "FRG", NS, AS, FS|_], Line), !. append( _, [ `FRG`, NS, AS, FS|_], Line), !.
% from odbc % from odbc
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "NDET", NS, AS, FS|_], Line), !. append( _, [ `NDET`, NS, AS, FS|_], Line), !.
take_line( Line, NS, AS, FS ) :- take_line( Line, NS, AS, FS ) :-
append( _, [ "DET", NS, AS, FS|_], Line), !. append( _, [ `DET`, NS, AS, FS|_], Line), !.
take_line( Line, AS, FS ) :- take_line( Line, AS, FS ) :-
append( _, [ "REGISTER_CPRED", FS, AS], Line), !. append( _, [ `REGISTER_CPRED`, FS, AS], Line), !.
take_line( Line, NS, AS, FSE, FSB ) :- take_line( Line, NS, AS, FSE, FSB ) :-
append( _, [ "Yap_InitCPredBack", NS, AS, _, FSE, FSB|_], Line), !. append( _, [ `Yap_InitCPredBack`, NS, AS, _, FSE, FSB|_], Line), !.
system_mod("ATTRIBUTES_MODULE", _, attributes, user ). system_mod(`ATTRIBUTES_MODULE`, _, attributes, user ).
system_mod("HACKS_MODULE", _, '$hacks' , sys ). system_mod(`HACKS_MODULE`, _, '$hacks' , sys ).
system_mod("USER_MODULE", _, user, user ). system_mod(`USER_MODULE`, _, user, user ).
system_mod("DBLOAD_MODULE", _, '$db_load', sys ). system_mod(`DBLOAD_MODULE`, _, '$db_load', sys ).
system_mod("GLOBALS_MODULE", _, globals, sys ). system_mod(`GLOBALS_MODULE`, _, globals, sys ).
system_mod("ARG_MODULE", _, arg, sys ). system_mod(`ARG_MODULE`, _, arg, sys ).
system_mod("PROLOG_MODULE", _ , prolog, sys ). system_mod(`PROLOG_MODULE`, _ , prolog, sys ).
system_mod("RANGE_MODULE", _, range, user ). system_mod(`RANGE_MODULE`, _, range, user ).
system_mod("SWI_MODULE", _, swi, sys ). system_mod(`SWI_MODULE`, _, swi, sys ).
system_mod("OPERATING_SYSTEM_MODULE", _, system , sys ). system_mod(`OPERATING_SYSTEM_MODULE`, _, system , sys ).
system_mod("TERMS_MODULE", _, terms , sys). system_mod(`TERMS_MODULE`, _, terms , sys).
system_mod("SYSTEM_MODULE", _, system, sys ). system_mod(`SYSTEM_MODULE`, _, system, sys ).
system_mod("IDB_MODULE", _, idb, user ). system_mod(`IDB_MODULE`, _, idb, user ).
system_mod("CHARSIO_MODULE", _, charsio, sys ). system_mod(`CHARSIO_MODULE`, _, charsio, sys ).
system_mod("cm", M, M, user ). system_mod(`cm`, M, M, user ).
call_c_files( File, Mod, _Fun, [CFile] ) :- call_c_files( File, Mod, _Fun, [CFile] ) :-
search_file( CFile, File, c, F ), search_file( CFile, File, c, F ),

View File

@ -12,6 +12,9 @@
:- use_module(library(maplist)). :- use_module(library(maplist)).
:- use_module(library(system)). :- use_module(library(system)).
:- use_module(library(analysis/graphs)).
:- use_module(library(analysis/load)).
:- initialization(main). :- initialization(main).
:- style_check(all). :- style_check(all).
@ -22,18 +25,18 @@
:- dynamic :- dynamic
node/4, node/4,
edge/1, edge/1,
public/2, public/2,
private/2, private/2,
module_on/3, module_on/3,
exported/1, exported/1,
dir/2, dir/2,
consulted/2, consulted/2,
op_export/3, op_export/3,
library/1, library/1,
undef/2, undef/2,
c_dep/2, c_dep/2,
do_comment/5, do_comment/5,
module_file/2. module_file/2.
% @short node(?Module:module, ?Predicate:pred_indicator, ?File:file, ?Generator:atom) is nondet % @short node(?Module:module, ?Predicate:pred_indicator, ?File:file, ?Generator:atom) is nondet
% %
@ -55,26 +58,34 @@ main :-
fail. fail.
main :- main :-
unix(argv([D])), unix(argv([D])),
load( D/['C'-prolog, Dirs = ['C'-prolog,
'os'-prolog, 'os'-prolog,
'pl'-prolog, 'pl'-prolog,
'OPTYap'-prolog, 'OPTYap'-prolog,
'library'-user, 'library'-user,
'swi/console'-prolog, % 'swi/console'-user
'swi/library'-user,
'packages'-user 'packages'-user
]), ],
% maplist(distribute(D), Dirs, Paths),
load( D, Dirs ),
maplist( pl_graphs, Dirs ),
fail. fail.
main :- main :-
%%% phase 4: construct graph %%% phase 4: construct graph
retractall( consulted(_,_) ), retractall( consulted(_,_) ),
% maplist( pl_graphs, Dirs ),
undefs, undefs,
doubles, doubles,
% pl_exported(pl). % pl_exported(pl).
c_links, c_links,
mkdocs. mkdocs.
distribute( Root, File-Class, Path-Class) :-
sub_atom(Root,_,_,1,/),
!,
atom_concat(Root, File, Path ).
distribute( Root, File-Class, Path-Class) :-
atom_concat([Root, /, File], Path ).
init :- init :-
retractall(dir(_)), retractall(dir(_)),
retractall(edge(_)), retractall(edge(_)),
@ -789,6 +800,14 @@ user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/hind
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/util.c' ). user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/util.c' ).
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/viterbi.c' ). user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/viterbi.c' ).
doskip( D):- sub_atom( D, _, _, 0, '~' ).
doskip( D):- sub_atom( D, _, _, 0, '/.' ).
doskip( D):- sub_atom( D, _, _, 0, '/..' ).
doskip( D):- sub_atom( D, _, _, 0, '/.git' ).
doskip( D):- sub_atom( D, _, _, _, '/.#' ).
doskip( D):- sub_atom( D, _, _, 0, '#' ).
doskip( D):- user_skip( D ).
user_skip( 'packages/gecode/3.6.0'). user_skip( 'packages/gecode/3.6.0').
user_skip( 'packages/gecode/3.7.0'). user_skip( 'packages/gecode/3.7.0').
user_skip( 'packages/gecode/3.7.1'). user_skip( 'packages/gecode/3.7.1').