SWI-compatible for initialization/2·

This commit is contained in:
Vítor Manuel de Morais Santos Costa 2010-01-15 16:21:29 +00:00
parent 89e38cbcc0
commit 0c29616bc2
3 changed files with 73 additions and 0 deletions

View File

@ -1903,6 +1903,23 @@ other procedures.
The compiler will execute goals @var{G} after consulting the current
file.
@item initialization(+@var{Goal},+@var{When})
@findex initialization/2 (directive)
@snindex initialization/2 (directive)
@cnindex initialization/2 (directive)
Similar to @code{initialization/1}, but allows for specifying when
@var{Goal} is executed while loading the program-text:
@table @code
@item now
Execute @var{Goal} immediately.
@item after_load
Execute @var{Goal} after loading program-text. This is the same as initialization/1.
@item restore
Do not execute @var{Goal} while loading the program, but only when
restoring a state (not implemented yet).
@end table
@item library_directory(+@var{D})
@findex library_directory/1
@snindex library_directory/1

View File

@ -302,6 +302,59 @@ use_module(M,F,Is) :-
fail.
'$initialization'(_).
'$initialization'(G,OPT) :-
(
var(G)
->
'$do_error'(instantiation_error,initialization(G,OPT))
;
number(G)
->
'$do_error'(type_error(callable,G),initialization(G,OPT))
;
db_reference(G)
->
'$do_error'(type_error(callable,G),initialization(G,OPT))
;
var(OPT)
->
'$do_error'(instantiation_error,initialization(G,OPT))
;
atom(OPT)
->
(
OPT == now
->
fail
;
OPT == after_load
->
fail
;
OPT == restore
->
fail
;
'$do_error'(domain_error(initialization,OPT),initialization(OPT))
)
;
'$do_error'(type_error(OPT),initialization(G,OPT))
).
'$initialization'(G,now) :-
( '$notrace'(G) -> true ; format(user_error,':- ~w:~w failed.~n',[M,G]) ).
'$initialization'(G,after_load) :-
'$initialization'(G).
% ignore for now.
'$initialization'(G,restore).
'$initialization'(G) :-
'$show_consult_level'(Level1),
% it will be done after we leave the current consult level.
Level is Level1-1,
recorda('$initialisation',do(Level,G),_),
fail.
'$initialization'(_).
'$exec_initialisation_goals' :-
nb_setval('$initialization_goals',on),
fail.

View File

@ -38,6 +38,7 @@
'$directive'(if(_)).
'$directive'(include(_)).
'$directive'(initialization(_)).
'$directive'(initialization(_,_)).
'$directive'(meta_predicate(_)).
'$directive'(module(_,_)).
'$directive'(module(_,_,_)).
@ -75,6 +76,8 @@
'$discontiguous'(D,M).
'$exec_directive'(initialization(D), _, M) :-
'$initialization'(M:D).
'$exec_directive'(initialization(D,OPT), _, M) :-
'$initialization'(M:D, OPT).
'$exec_directive'(thread_initialization(D), _, M) :-
'$thread_initialization'(M:D).
'$exec_directive'(expects_dialect(D), _, _) :-