module_property

This commit is contained in:
Vítor Santos Costa 2013-11-25 16:50:57 +01:00
parent def97602e2
commit b3ee389d5e
4 changed files with 39 additions and 35 deletions

View File

@ -310,7 +310,7 @@ use_module(M,F,Is) :-
'$use_module'(M,F,Is).
'$use_module'(M,F,Is) :- nonvar(M), !,
recorded('$module','$module'(F1,M,_),_),
recorded('$module','$module'(F1,M,_,_),_),
'$load_files'(F1, [if(not_loaded),must_be_module(true),imports(Is)], use_module(M,F,Is)),
( F1 = F -> true ; true ).
'$use_module'(M,F,Is) :-
@ -443,7 +443,7 @@ use_module(M,F,Is) :-
'$bind_module'(Mod, use_module(Mod)).
'$import_to_current_module'(File, ContextModule, Imports, RemainingImports, TOpts) :-
recorded('$module','$module'(File, Module, ModExports),_),
recorded('$module','$module'(File, Module, ModExports, _),_),
Module \= ContextModule, !,
'$lf_opt'('$call', TOpts, Call),
'$convert_for_export'(Imports, ModExports, Module, ContextModule, TranslationTab, RemainingImports, Goal),
@ -657,7 +657,7 @@ prolog_load_context(term_position, '$stream_position'(0,Line,0,0,0)) :-
'$import_to_current_module'(F1, M, Imports, _, TOpts).
'$ensure_file_loaded'(F, M, F1) :-
recorded('$module','$module'(F1,_NM,_P),_),
recorded('$module','$module'(F1,_NM,_P,_),_),
recorded('$lf_loaded','$lf_loaded'(F1,_),_),
same_file(F1,F), !.
'$ensure_file_loaded'(F, _M, F1) :-
@ -674,7 +674,7 @@ prolog_load_context(term_position, '$stream_position'(0,Line,0,0,0)) :-
'$import_to_current_module'(F1, M, Imports, _, TOpts).
'$ensure_file_unchanged'(F, M, F1) :-
recorded('$module','$module'(F1,_NM,_P),_),
recorded('$module','$module'(F1,_NM,_P,_),_),
recorded('$lf_loaded','$lf_loaded'(F1,Age),R),
same_file(F1,F), !,
'$file_is_unchanged'(F, R, Age).
@ -964,5 +964,5 @@ source_file_property( File0, Prop) :-
'$source_file_property'( F, modified(Age)) :-
recorded('$lf_loaded','$lf_loaded'( F, Age), _).
'$source_file_property'( F, module(M)) :-
recorded('$module','$module'(F,M,_),_).
recorded('$module','$module'(F,M,_,_),_).

View File

@ -77,21 +77,22 @@ module(N) :-
'$add_module_on_file'(N, F, Ps).
'$add_module_on_file'(Mod, F, Exports) :-
recorded('$module','$module'(F0,Mod,_),R), !,
recorded('$module','$module'(F0,Mod,_,_),R), !,
'$add_preexisting_module_on_file'(F, F0, Mod, Exports, R).
'$add_module_on_file'(Module, F, Exports) :-
'$convert_for_export'(all, Exports, Module, Module, TranslationTab, AllExports0, load_files),
'$add_to_imports'(TranslationTab, Module, Module), % insert ops, at least for now
sort( AllExports0, AllExports ),
recorda('$module','$module'(F,Module,AllExports),_).
( source_location(_, Line) -> true ; Line = 0 ),
recorda('$module','$module'(F,Module,AllExports, Line),_).
'$extend_exports'(Module, NewExports) :-
'$convert_for_export'(all, NewExports, Module, Module, _TranslationTab, NewExports1, load_files),
recorded('$module','$module'(F,Module,OriginalExports),R),
recorded('$module','$module'(F,Module,OriginalExports,Line),R),
'$add_exports'( NewExports1, OriginalExports, Exports ),
erase(R),
sort( Exports, AllExports ),
recorda('$module','$module'(F,Module,AllExports),_),
recorda('$module','$module'(F,Module,AllExports,Line),_),
fail.
'$extend_exports'(_F, _Module, _NewExports).
@ -105,7 +106,8 @@ module(N) :-
'$add_preexisting_module_on_file'(F, F, Mod, Exports, R) :- !,
erase(R),
( recorded('$import','$import'(Mod,_,_,_,_,_),R), erase(R), fail; true),
recorda('$module','$module'(F,Mod,Exports),_).
( source_location(_, Line) -> true ; Line = 0 ),
recorda('$module','$module'(F,Mod,Exports, Line),_).
'$add_preexisting_module_on_file'(F,F0,Mod,Exports,R) :-
repeat,
format(user_error, "The module ~a is being redefined.~n Old file: ~a~n New file: ~a~nDo you really want to redefine it? (y or n)",[Mod,F0,F]),
@ -505,7 +507,7 @@ current_module(Mod) :-
current_module(Mod,TFN) :-
'$all_current_modules'(Mod),
( recorded('$module','$module'(TFN,Mod,_Publics),_) -> true ; TFN = user ).
( recorded('$module','$module'(TFN,Mod,_Publics, _),_) -> true ; TFN = user ).
source_module(Mod) :-
'$current_module'(Mod).
@ -617,7 +619,7 @@ source_module(Mod) :-
% get rid of a module and of all predicates included in the module.
%
abolish_module(Mod) :-
recorded('$module','$module'(_,Mod,_),R), erase(R),
recorded('$module','$module'(_,Mod,_,_),R), erase(R),
fail.
abolish_module(Mod) :-
recorded('$import','$import'(Mod,_,_,_,_,_),R), erase(R),
@ -644,23 +646,23 @@ export_resource(Resource) :-
export_resource(P) :-
P = F/N, atom(F), number(N), N >= 0, !,
'$current_module'(Mod),
( recorded('$module','$module'(File,Mod,ExportedPreds),R) ->
( recorded('$module','$module'(File,Mod,ExportedPreds,Line),R) ->
erase(R),
recorda('$module','$module'(File,Mod,[P|ExportedPreds]),_)
recorda('$module','$module'(File,Mod,[P|ExportedPreds],Line),_)
; prolog_load_context(file, File) ->
recorda('$module','$module'(File,Mod,[P]),_)
; recorda('$module','$module'(user_input,Mod,[P]),_)
recorda('$module','$module'(File,Mod,[P],Line),_)
; recorda('$module','$module'(user_input,Mod,[P],1),_)
).
export_resource(P0) :-
P0 = F//N, atom(F), number(N), N >= 0, !,
N1 is N+2, P = F/N1,
'$current_module'(Mod),
( recorded('$module','$module'(File,Mod,ExportedPreds),R) ->
( recorded('$module','$module'(File,Mod,ExportedPreds,Line),R) ->
erase(R),
recorda('$module','$module'(File,Mod,[P|ExportedPreds]),_)
recorda('$module','$module'(File,Mod,[P|ExportedPreds],Line ),_)
; prolog_load_context(file, File) ->
recorda('$module','$module'(File,Mod,[P]),_)
; recorda('$module','$module'(user_input,Mod,[P]),_)
recorda('$module','$module'(File,Mod,[P],Line),_)
; recorda('$module','$module'(user_input,Mod,[P],1),_)
).
export_resource(op(Prio,Assoc,Name)) :- !,
op(Prio,Assoc,prolog:Name).
@ -668,7 +670,7 @@ export_resource(Resource) :-
'$do_error'(type_error(predicate_indicator,Resource),export(Resource)).
export_list(Module, List) :-
recorded('$module','$module'(_,Module,List),_).
recorded('$module','$module'(_,Module,List,_),_).
'$convert_for_export'(all, Exports, _Module, _ContextModule, Tab, MyExports, _) :-
'$simple_conversion'(Exports, Tab, MyExports).
@ -792,7 +794,7 @@ export_list(Module, List) :-
op(Prio,Assoc,ContextMod:Name).
'$do_import'(N0/K0-N0/K0, Mod, Mod) :- !.
'$do_import'(_N/K-N1/K, _Mod, ContextMod) :-
recorded('$module','$module'(_F, ContextMod, MyExports),_),
recorded('$module','$module'(_F, ContextMod, MyExports,_),_),
once(lists:member(N1/K, MyExports)),
functor(S, N1, K),
% reexport predicates if they are undefined in the current module.
@ -838,7 +840,7 @@ export_list(Module, List) :-
( C =:= 0'e -> halt(1) ;
C =:= 0'y ).
'$redefine_action'(true, M1, _, _, _) :- !,
recorded('$module','$module'(F, M1, _MyExports),_),
recorded('$module','$module'(F, M1, _MyExports,_Line),_),
unload_file(F).
'$redefine_action'(false, M1,M2, M, N/K) :-
'$do_error'(permission_error(import,M1:N/K,redefined,M2),module(M)).
@ -944,10 +946,12 @@ Start a new (source-)module
'$declare_module'(Name, _Test, Context, _File, _Line) :-
add_import_module(Name, Context, start).
module_property(Mod, line_count(L)) :-
recorded('$module','$module'(_F,Mod,_,L),_).
module_property(Mod, file(F)) :-
recorded('$module','$module'(F,Mod,_),_).
recorded('$module','$module'(F,Mod,_,_),_).
module_property(Mod, exports(Es)) :-
recorded('$module','$module'(_,Mod,Es),_).
recorded('$module','$module'(_,Mod,Es,_),_).
ls_imports :-
recorded('$import','$import'(M0,M,G0,G,_N,_K),_R),

View File

@ -897,7 +897,7 @@ predicate_property(Pred,Prop) :-
'$is_public'(P,M).
'$predicate_property'(P,M,M,exported) :-
functor(P,N,A),
once(recorded('$module','$module'(_TFN,M,Publics),_)),
once(recorded('$module','$module'(_TFN,M,Publics,_L),_)),
lists:memberchk(N/A,Publics).
'$predicate_property'(P,Mod,_,number_of_clauses(NCl)) :-
'$number_of_clauses'(P,Mod,NCl).

View File

@ -299,34 +299,34 @@ writeln(M:B),
qsave_file(File) :-
recorded('$module', '$module'(F,Mod,Exps), _),
recorded('$module', '$module'(F,Mod,Exps,Line), _),
'$fetch_parents_module'(Mod, Parents),
'$fetch_imports_module'(Mod, Imps),
'$fetch_multi_files_module'(Mod, MFs),
'$fetch_meta_predicates_module'(Mod, Metas),
'$fetch_module_transparents_module'(Mod, ModTransps),
asserta(Mod:'@mod_info'(F, Exps, Parents, Imps, Metas, ModTransps)),
asserta(Mod:'@mod_info'(F, Exps, Line, Parents, Imps, Metas, ModTransps)),
atom_concat(Mod,'.qly',OF),
open(OF, write, S, [type(binary)]),
'$qsave_module_preds'(S, Mod),
close(S),
abolish(Mod:'@mod_info'/6),
abolish(Mod:'@mod_info'/7),
fail.
qsave_file(_).
qsave_module(Mod) :-
recorded('$module', '$module'(F,Mod,Exps), _),
recorded('$module', '$module'(F,Mod,Exps,L), _),
'$fetch_parents_module'(Mod, Parents),
'$fetch_imports_module'(Mod, Imps),
'$fetch_multi_files_module'(Mod, MFs),
'$fetch_meta_predicates_module'(Mod, Metas),
'$fetch_module_transparents_module'(Mod, ModTransps),
asserta(Mod:'@mod_info'(F, Exps, Parents, Imps, Metas, ModTransps)),
asserta(Mod:'@mod_info'(F, Exps, L, Parents, Imps, Metas, ModTransps)),
atom_concat(Mod,'.qly',OF),
open(OF, write, S, [type(binary)]),
'$qsave_module_preds'(S, Mod),
close(S),
abolish(Mod:'@mod_info'/6),
abolish(Mod:'@mod_info'/7),
fail.
qsave_module(_).
@ -345,9 +345,9 @@ qload_module(Mod) :-
'$complete_read'(Mod).
'$complete_read'(Mod) :-
retract(Mod:'@mod_info'(F, Exps, Parents, Imps, Metas, ModTransps)),
abolish(Mod:'$mod_info'/6),
recorda('$module', '$module'(F,Mod,Exps), _),
retract(Mod:'@mod_info'(F, Exps, Line,Parents, Imps, Metas, ModTransps)),
abolish(Mod:'$mod_info'/7),
recorda('$module', '$module'(F,Mod,Exps,Line), _),
'$install_parents_module'(Mod, Parents),
'$install_imports_module'(Mod, Imps),
'$install_multi_files_module'(Mod, MFs),