diff --git a/misc/analysis/load.yap b/misc/analysis/load.yap index 10a331bf7..a0539e0b4 100644 --- a/misc/analysis/load.yap +++ b/misc/analysis/load.yap @@ -4,14 +4,14 @@ ***********************************************************/ -load( D/MAP ) :- +load( D, _OMAP ) :- working_directory(_, D), fail. -load( Map ) :- +load( _, _Map ) :- % from libraries outside the current directories assert( node( attributes, woken_att_do/4, 'library/atts.yap', prolog ) ), fail. -load( D, Map ) :- +load( _ , Dirs ) :- dirs( Dirs ), %%% phase 1: find modules nb_setval( current_module, user ), @@ -23,25 +23,20 @@ load( D, Map ) :- maplist( c_preds, Dirs ). dirs( Roots ) :- - member( Root-_, Roots ), + member( Root-_, Roots ), +% (Root = 'OPTYap' -> start_low_level_trace ; true ), absolute_file_name( Root, FRoot ), rdir( FRoot ), fail. dirs( _Roots ). rdir( FRoot ) :- - directory_files( FRoot , Files), - member( File, Files ), - atom_concat( [FRoot,'/',File], New0 ), - absolute_file_name( New0, New ), - \+ doskip( New ), + absolute_file_name( FRoot, [glob(*), solutions(all), file_errors(fail)], File ), + \+ doskip( File ), ( - file_property( New, type(directory) ) + file_property( File, type(directory) ) -> - File \= '.', - File \= '..', - File \= '.git', - rdir( New ) + rdir( File ) ; assert_new( dir( FRoot, File )) ), @@ -50,10 +45,7 @@ rdir(_). c_preds(Dir - Mod) :- atom( Dir ), - atom_concat([Dir,'/*'], Pattern), % */ - expand_file_name( Pattern, Files ), - member( File0, Files ), - absolute_file_name( File0, File ), + absolute_file_name( Dir, [glob(*), solutions(all), file_errors(fail)], File ), ( ( sub_atom(File,_,_,0,'.c') ; sub_atom(File,_,_,0,'.i') @@ -61,7 +53,7 @@ c_preds(Dir - Mod) :- sub_atom(File,_,_,0,'.C') ; sub_atom(File,_,_,0,'.cpp') - ; + ; sub_atom(File,_,_,0,'.icc') ; sub_atom(File,_,_,0,'.h') @@ -70,8 +62,6 @@ c_preds(Dir - Mod) :- c_file( File , Mod ) ; exists_directory( File ), - \+ atom_concat(_, '/.', File), - \+ atom_concat(_, '/..', File), \+ doskip( File ), c_preds( File - Mod ) ), @@ -94,22 +84,22 @@ c_file(F, Mod) :- !, close(S) ; - sub_string(String, _, _, _, "PL_extension"), + sub_string(String, _, _, _, `PL_extension`), %writeln(Fields), c_ext(S, Mod, F), fail ; - split_string(String, ",; ()\t\"\'", Fields), %' + split_string(String, `,; ()\t\"\'`, Fields), %' %writeln(Fields), line_count(S, Lines), c_line(Fields , Mod, F:Lines), fail ). -c_line(["}"], Mod, _) :- !, +c_line([`}`], Mod, _) :- !, nb_setval( current_module, Mod ). c_line(Line, _Mod, _) :- - append( _, [ "CurrentModule", "=", M|_], Line), + append( _, [ `CurrentModule`, `=`, M|_], Line), system_mod(M, _Mod, Mod, _), nb_setval( current_module, Mod ). c_line(Line, Mod, F: LineP) :- @@ -121,10 +111,10 @@ c_ext( S, Mod, F ) :- repeat, 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(Fu,FS), number_string(A, AS), @@ -133,7 +123,7 @@ c_ext( S, Mod, F ) :- assert( node( Mod , N/A, F-Line, Fu ) ), 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(Fu,FS), number_string(A, AS), @@ -154,12 +144,12 @@ break_line( Line, N/A, swi(Fu)) :- take_line( Line, NS, AS, FS ), !, atom_string(N,NS), 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)) :- take_line( Line, NS, AS, FS ), !, atom_string(N,NS), number_string(A, AS), - atomic_concat(["pc_",FS,"_",A], Fu). + atomic_concat([`pc_`,FS,`_`,A], Fu). break_line( Line, N/A, c(FuE, FuB)) :- take_line( Line, NS, AS, FSE, FSB ), !, atom_string(N,NS), @@ -168,57 +158,57 @@ break_line( Line, N/A, c(FuE, FuB)) :- number_string(A, AS). 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 ) :- - append( _, [ "Yap_InitAsmPred", NS, AS, _, FS|_], Line), !. + append( _, [ `Yap_InitAsmPred`, NS, AS, _, FS|_], Line), !. 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 ) :- - append( _, [ "Yap_InitCmpPred", NS, AS, FS|_], Line), !. + append( _, [ `Yap_InitCmpPred`, NS, AS, FS|_], Line), !. 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 ) :- - append( _, [ "PRED", NS0, AS, FS|_], Line), !, - append( ["pl_", NS0, AS, "_va"], NS ). + append( _, [ `PRED`, NS0, AS, FS|_], Line), !, + append( [`pl_`, NS0, AS, `_va`], NS ). take_line( Line, NS, AS, FS ) :- - append( _, [ "PRED_IMPL", NS0, AS, FS|_], Line), !, - append( ["pl_", NS0, AS, "_va"], NS ). + append( _, [ `PRED_IMPL`, NS0, AS, FS|_], Line), !, + append( [`pl_`, NS0, AS, `_va`], NS ). 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 ) :- - append( _, [ "PRED_DEF", NS0, AS, FS|_], Line), !, - append( ["pl_", NS0, AS, "_va"], NS ). + append( _, [ `PRED_DEF`, NS0, AS, FS|_], Line), !, + append( [`pl_`, NS0, AS, `_va`], NS ). take_line( Line, NS, AS, FS ) :- - append( _, [ "FRG", NS, AS, FS|_], Line), !. + append( _, [ `FRG`, NS, AS, FS|_], Line), !. % from odbc take_line( Line, NS, AS, FS ) :- - append( _, [ "NDET", NS, AS, FS|_], Line), !. + append( _, [ `NDET`, NS, AS, FS|_], Line), !. take_line( Line, NS, AS, FS ) :- - append( _, [ "DET", NS, AS, FS|_], Line), !. + append( _, [ `DET`, NS, AS, FS|_], Line), !. take_line( Line, AS, FS ) :- - append( _, [ "REGISTER_CPRED", FS, AS], Line), !. + append( _, [ `REGISTER_CPRED`, FS, AS], Line), !. 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("HACKS_MODULE", _, '$hacks' , sys ). -system_mod("USER_MODULE", _, user, user ). -system_mod("DBLOAD_MODULE", _, '$db_load', sys ). -system_mod("GLOBALS_MODULE", _, globals, sys ). -system_mod("ARG_MODULE", _, arg, sys ). -system_mod("PROLOG_MODULE", _ , prolog, sys ). -system_mod("RANGE_MODULE", _, range, user ). -system_mod("SWI_MODULE", _, swi, sys ). -system_mod("OPERATING_SYSTEM_MODULE", _, system , sys ). -system_mod("TERMS_MODULE", _, terms , sys). -system_mod("SYSTEM_MODULE", _, system, sys ). -system_mod("IDB_MODULE", _, idb, user ). -system_mod("CHARSIO_MODULE", _, charsio, sys ). -system_mod("cm", M, M, user ). +system_mod(`ATTRIBUTES_MODULE`, _, attributes, user ). +system_mod(`HACKS_MODULE`, _, '$hacks' , sys ). +system_mod(`USER_MODULE`, _, user, user ). +system_mod(`DBLOAD_MODULE`, _, '$db_load', sys ). +system_mod(`GLOBALS_MODULE`, _, globals, sys ). +system_mod(`ARG_MODULE`, _, arg, sys ). +system_mod(`PROLOG_MODULE`, _ , prolog, sys ). +system_mod(`RANGE_MODULE`, _, range, user ). +system_mod(`SWI_MODULE`, _, swi, sys ). +system_mod(`OPERATING_SYSTEM_MODULE`, _, system , sys ). +system_mod(`TERMS_MODULE`, _, terms , sys). +system_mod(`SYSTEM_MODULE`, _, system, sys ). +system_mod(`IDB_MODULE`, _, idb, user ). +system_mod(`CHARSIO_MODULE`, _, charsio, sys ). +system_mod(`cm`, M, M, user ). call_c_files( File, Mod, _Fun, [CFile] ) :- search_file( CFile, File, c, F ), diff --git a/misc/sysgraph b/misc/sysgraph index b13692185..c6329bfbb 100755 --- a/misc/sysgraph +++ b/misc/sysgraph @@ -12,6 +12,9 @@ :- use_module(library(maplist)). :- use_module(library(system)). +:- use_module(library(analysis/graphs)). +:- use_module(library(analysis/load)). + :- initialization(main). :- style_check(all). @@ -22,18 +25,18 @@ :- dynamic node/4, edge/1, - public/2, - private/2, - module_on/3, - exported/1, - dir/2, - consulted/2, - op_export/3, - library/1, - undef/2, - c_dep/2, - do_comment/5, - module_file/2. + public/2, + private/2, + module_on/3, + exported/1, + dir/2, + consulted/2, + op_export/3, + library/1, + undef/2, + c_dep/2, + do_comment/5, + module_file/2. % @short node(?Module:module, ?Predicate:pred_indicator, ?File:file, ?Generator:atom) is nondet % @@ -55,26 +58,34 @@ main :- fail. main :- unix(argv([D])), - load( D/['C'-prolog, + Dirs = ['C'-prolog, 'os'-prolog, 'pl'-prolog, 'OPTYap'-prolog, 'library'-user, - 'swi/console'-prolog, - 'swi/library'-user, +% 'swi/console'-user 'packages'-user - ]), + ], +% maplist(distribute(D), Dirs, Paths), + load( D, Dirs ), + maplist( pl_graphs, Dirs ), fail. main :- %%% phase 4: construct graph retractall( consulted(_,_) ), -% maplist( pl_graphs, Dirs ), undefs, doubles, % pl_exported(pl). c_links, 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 :- retractall(dir(_)), 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/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.7.0'). user_skip( 'packages/gecode/3.7.1').