diff --git a/pl/consult.yap b/pl/consult.yap index 0f2fd89c4..582925659 100755 --- a/pl/consult.yap +++ b/pl/consult.yap @@ -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,_,_),_). diff --git a/pl/modules.yap b/pl/modules.yap index 72dc309fc..b28e89ce1 100644 --- a/pl/modules.yap +++ b/pl/modules.yap @@ -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), diff --git a/pl/preds.yap b/pl/preds.yap index 815faea97..19a2d544f 100644 --- a/pl/preds.yap +++ b/pl/preds.yap @@ -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). diff --git a/pl/qly.yap b/pl/qly.yap index 8d38825aa..743f347c1 100755 --- a/pl/qly.yap +++ b/pl/qly.yap @@ -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),