SWI-compatible for initialization/2·
This commit is contained in:
parent
89e38cbcc0
commit
0c29616bc2
17
docs/yap.tex
17
docs/yap.tex
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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), _, _) :-
|
||||
|
Reference in New Issue
Block a user