35:-
'$system_library_directories'/2
use_system_module(
'$_absf', []).
37:-
'$system_catch'/4
use_system_module(
'$_boot', []).
39:-
'$do_startup_reconsult'/1
use_system_module(
'$_consult', []).
41:-
'$run_atom_goal'/1
use_system_module(
'$_control', []).
43:-
'$do_error'/2
use_system_module(
'$_errors', []).
45:-
'$init_preds'/0
use_system_module(
'$_preds', []).
47:-
'$protect'/0
use_system_module(
'$_protect', []).
49:-
'$reinit_thread0'/0
use_system_module(
'$_threads', []).
51:-
'$extend_file_search_path'/1
use_system_module(
'$_yio', []).
84qsave_program
:qsave_program(
File)
:-
85 '$save_program_status'([], qsave_program(
File)),
86 open(
File, write,
S, [type(binary)]),
109 '$save_program_status'(
Opts, qsave_program(
File,
Opts)),
110 open(
File, write,
S, [type(binary)]),
122 recorda(
'$restore_goal',
Goal ,
_R),
134 qsave_program(
'startup.yss'),
137'$save_program_status'(
Flags,
G)
:-
138 findall(
F-V,
'$x_yap_flag'(
F,
V),
L),
140 '$cvt_qsave_flags'(
Flags,
G),
142'$save_program_status'(
_Flags,
_G).
144'$cvt_qsave_flags'(
Flags,
G)
:-
146 strip_module(
Flags,
M,
LFlags),
147 '$skip_list'(
_Len,
LFlags, []),
148 '$cvt_qsave_lflags'(
LFlags,
G,
M).
149'$cvt_qsave_flags'(
Flags,
G,
_OFlags)
:-
151 '$do_error'(instantiation_error,
G).
152'$cvt_qsave_flags'(
Flags,
G,
_OFlags)
:-
153 '$do_error'(type_error(list,
Flags),
G).
155'$cvt_qsave_lflags'([],
_,
_).
156'$cvt_qsave_lflags'([
Flag|Flags],
G,
M)
:-
157 '$cvt_qsave_flag'(
Flag,
G,
M),
158 '$cvt_qsave_lflags'(
Flags,
G,
M).
160'$cvt_qsave_flag'(
Flag,
G,
_)
:-
162 '$do_error'(instantiation_error,
G).
163'$cvt_qsave_flag'(local(
B),
G,
_)
:- '$cvt_qsave_flag',
166 B > 0 -> recordz(
'$restore_flag',local(
B),
_)
;
168 '$do_error'(domain_error(not_less_than_zero,
B),
G))
170 '$do_error'(type_error(integer,
B),
G)
172'$cvt_qsave_flag'(global(
B),
G,
_)
:- '$cvt_qsave_flag',
175 B > 0 -> recordz(
'$restore_flag',global(
B),
_)
;
177 '$do_error'(domain_error(not_less_than_zero,
B),
G))
179 '$do_error'(type_error(integer,
B),
G)
181'$cvt_qsave_flag'(stack(
B),
G,
_)
:- '$cvt_qsave_flag',
184 B > 0 -> recordz(
'$restore_flag',stack(
B),
_)
;
186 '$do_error'(domain_error(not_less_than_zero,
B),
G))
188 '$do_error'(type_error(integer,
B),
G)
190'$cvt_qsave_flag'(trail(
B),
G,
_)
:- '$cvt_qsave_flag',
193 B > 0 -> recordz(
'$restore_flag',trail(
B),
_)
;
195 '$do_error'(domain_error(not_less_than_zero,
B),
G))
197 '$do_error'(type_error(integer,
B),
G)
199'$cvt_qsave_flag'(goal(
B),
G,
M)
:- '$cvt_qsave_flag',
201 strip_module(
M:B,
M1,
G1),
202 recordz(
'$restore_flag',goal(
M1:G1),
_)
204 strip_module(
M:B,
M1,
G1),
205 '$do_error'(type_error(callable,
G1),
G)
207'$cvt_qsave_flag'(toplevel(
B),
G,
M)
:- '$cvt_qsave_flag',
209 strip_module(
M:B,
M1,
G1),
210 recordz(
'$restore_flag',toplevel(
M1:G1),
_)
212 strip_module(
M:B,
M1,
G1),
213 '$do_error'(type_error(callable,
G1),
G)
215'$cvt_qsave_flag'(init_file(
B),
G,
M)
:- '$cvt_qsave_flag',
217 recordz(
'$restore_flag', init_file(
M:B),
_)
219 '$do_error'(type_error(atom,
B),
G)
226'$cvt_qsave_flag'(
Opt,
G,
_M)
:-
227 '$do_error'(domain_error(qsave_program,
Opt),
G).
230'$x_yap_flag'(language,
V)
:-
232'$x_yap_flag'(
M:P,
V)
:-
235'$x_yap_flag'(
X,
V)
:-
252 absolute_file_name(
F0,
File, [expand(true),file_type(prolog),access(read),file_errors(fail),solutions(first)]),
254 '$qsave_file_'(
File,
State).
263 absolute_file_name(
F0,
File, [expand(true),file_type(prolog),access(read),file_errors(fail),solutions(first)]),
264 '$qsave_file_'(
File,
State).
267'$qsave_file_'(
File,
UserF,
_State)
:-
268 (
File == user_input
-> Age = 0 ; time_file64(
File,
Age) ),
269 '$current_module'(
M),
270 assert(user
:'$file_property'(
'$lf_loaded'(
UserF,
Age,
M) ) ),
271 '$set_owner_file'(
'$file_property'(
_ ), user,
File ),
273'$qsave_file_'(
File,
UserF,
_State)
:-
274 recorded(
'$lf_loaded',
'$lf_loaded'(
File,
M,
Reconsult,
UserFile,
OldF,
Line,
Opts),
_),
275 assert(user
:'$file_property'(
'$lf_loaded'(
UserF,
M,
Reconsult,
UserFile,
OldF,
Line,
Opts) ) ),
276 '$set_owner_file'(
'$file_property'(
_ ), user,
File ),
278'$qsave_file_'(
File,
_UserF,
_State)
:-
279 recorded(
'$directive',directive(
File,
M:G,
Mode,
VL,
Pos ),
_),
280 assert(user
:'$file_property'( directive(
M:G,
Mode,
VL,
Pos ) ) ),
281 '$set_owner_file'(
'$file_property'(
_ ), user,
File ),
283'$qsave_file_'(
File,
_UserF,
_State)
:-
284 '$fetch_multi_files_file'(
File,
MultiFiles),
285 assert(user
:'$file_property'(
multifile(
MultiFiles ) ) ),
286 '$set_owner_file'(
'$file_property'(
_ ), user,
File ),
288'$qsave_file_'(
File,
_UserF,
State )
:-
292 '$qsave_file_preds'(
State,
File)
294 open(
State, write,
S, [type(binary)]),
295 '$qsave_file_preds'(
S,
File),
298 user:'$file_property'/1
abolish().
300'$fetch_multi_files_file'(
File,
Multi_Files)
:-
301 setof(
Info,
'$fetch_multi_file_module'(
File,
Info),
Multi_Files).
303'$fetch_multi_file_file'(
FileName, (
M:G :- Body))
:-
304 recorded(
'$multifile_defs',
'$defined'(
FileName,
Name,
Arity,
M),
_),
306 clause(
M:G,
Body,
ClauseRef),
307 clause_property(
ClauseRef, file(
FileName) ).
315 recorded(
'$module',
'$module'(
_F,
Mod,
Source,
Exps,
L),
_),
316 '$fetch_parents_module'(
Mod,
Parents),
317 '$fetch_imports_module'(
Mod,
Imps),
318 '$fetch_multi_files_module'(
Mod,
MFs),
319 '$fetch_meta_predicates_module'(
Mod,
Metas),
320 '$fetch_module_transparents_module'(
Mod,
ModTransps),
321 '$fetch_term_expansions_module'(
Mod,
TEs),
322 '$fetch_foreigns_module'(
Mod,
Foreigns),
323 asserta(
Mod:'@mod_info'(
Source,
Exps,
MFs,
L,
Parents,
Imps,
Metas,
ModTransps,
Foreigns,
TEs)),
324 open(
OF, write,
S, [type(binary)]),
325 '$qsave_module_preds'(
S,
Mod),
339 atom_concat(
Mod,
'.qly',
OF),
348 open(
File, read,
S, [type(binary)]),
365 StartMsg = qload_module,
366 EndMsg = qload_module,
367 '$current_module'(
SourceModule,
Mod),
368 H0 is '$current_module',
'$cputime'(
T0,
_),
371 file_directory_name(
File,
Dir),
373 '$qload_module'(
Mod,
File,
SourceModule ),
374 H is '$qload_module'
-H0,
'$cputime'(
TF,
_),
T is TF-T0,
375 print_message(informational, loaded(
EndMsg,
File,
Mod,
T,
H)),
376 '$current_module'(
_,
SourceModule),
379'$qload_module'(
Mod,
S,
SourceModule)
:-
380 is_stream(
S ),
is_stream,
381 '$q_header'(
S,
Type ),
384 '$qload_module'(
S ,
Mod,
File,
SourceModule)
386 Type == '$qload_module'
->
387 '$qload_file'(
S,
File)
389'$qload_module'(
Mod,
File,
SourceModule)
:-
390 open(
File, read,
S, [type(binary)]),
392 '$q_header'(
S,
Type ),
'$q_header',
394 '$qload_module'(
S ,
Mod,
File,
SourceModule)
396 Type == '$qload_module'
->
397 '$qload_file'(
S,
File)
402'$qload_module'(
_S,
Mod,
_File,
_SourceModule)
:-
403 unload_module(
Mod ),
unload_module.
404'$qload_module'(
S,
_Mod,
_File,
_SourceModule)
:-
405 '$qload_module_preds'(
S),
'$qload_module_preds'.
408'$qload_module'(
_S,
Mod,
File,
SourceModule)
:-
409 Mod:'@mod_info'(
F,
Exps,
MFs,
Line,
Parents,
Imps,
Metas,
ModTransps,
Foreigns,
TEs),
411 recorda(
'$module',
'$module'(
File,
Mod,
F,
Exps,
Line),
_),
412 '$install_parents_module'(
Mod,
Parents),
413 '$install_imports_module'(
Mod,
Imps, []),
414 '$install_multi_files_module'(
Mod,
MFs),
415 '$install_meta_predicates_module'(
Mod,
Metas),
416 '$install_foreigns_module'(
Mod,
Foreigns),
417 '$install_module_transparents_module'(
Mod,
ModTransps),
418 '$install_term_expansions_module'(
Mod,
TEs),
421 '$convert_for_export'(all,
Exps,
Mod,
SourceModule,
TranslationTab,
_AllExports0),
422 '$add_to_imports'(
TranslationTab,
Mod,
SourceModule).
424'$fetch_imports_module'(
Mod,
Imports)
:-
425 findall(
Info,
'$fetch_import_module'(
Mod,
Info),
Imports).
428'$fetch_import_module'(
Mod,
'$impcort'(
Mod0,
Mod,
G0,
G,
N,
K)
- S)
:-
429 recorded(
'$import',
'$import'(
Mod0,
Mod,
G0,
G,
N,
K),
_),
430 (
recorded(
'$module',
'$module'(
_,
Mod0,
S,
_,
_),
_)
-> recorded
; S = recorded ).
432'$fetch_parents_module'(
Mod,
Parents)
:-
433 findall(
Parent, prolog
:'$parent_module'(
Mod,
Parent),
Parents).
435'$fetch_module_transparents_module'(
Mod,
Module_Transparents)
:-
436 findall(
Info,
'$fetch_module_transparent_module'(
Mod,
Info),
Module_Transparents).
439'$fetch_module_transparent_module'(
Mod,
'$module_transparent'(
F,
Mod,
N,
P))
:-
440 '$fetch_module_transparent_module'
:'$module_transparent'(
F,
Mod0,
N,
P),
Mod0 == Mod.
442'$fetch_meta_predicates_module'(
Mod,
Meta_Predicates)
:-
443 findall(
Info,
'$fetch_meta_predicate_module'(
Mod,
Info),
Meta_Predicates).
446'$fetch_meta_predicate_module'(
Mod,
meta_predicate(
Mod:P))
:-
447 recorded(
'$m',
meta_predicate(
M,
P),
_),
450'$fetch_multi_files_module'(
Mod,
Multi_Files)
:-
451 findall(
Info,
'$fetch_multi_file_module'(
Mod,
Info),
Multi_Files).
454'$fetch_multi_file_module'(
Mod,
'$defined'(
FileName,
Name,
Arity,
Mod))
:-
455 recorded(
'$multifile_defs',
'$defined'(
FileName,
Name,
Arity,
Mod),
_).
456'$fetch_multi_file_module'(
Mod,
'$mf_clause'(
FileName,
_Name,
_Arity,
Mod,
Clause),
_)
:-
457 recorded(
'$mf',
'$mf_clause'(
FileName,
_Name,
_Arity,
Mod,
ClauseRef),
_),
460'$fetch_term_expansions_module'(
Mod,
TEs)
:-
461 findall(
Info,
'$fetch_term_expansion_module'(
Mod,
Info),
TEs).
464'$fetch_term_expansion_module'(
Mod, ( user
:term_expansion(
G,
GI)
:- Bd ))
:-
465 clause( user
:term_expansion(
G,
GI),
Bd,
_),
466 strip_module(
G,
Mod,
_).
468'$fetch_term_expansion_module'(
Mod, ( system
:term_expansion(
G,
GI)
:- Bd ))
:-
469 clause( system
:term_expansion(
G,
GI),
Bd,
_),
470 strip_module(
G,
Mod,
_).
472'$fetch_term_expansion_module'(
Mod, ( user
:goal_expansion(
G,
CurMod,
GI)
:- Bd ))
:-
473 clause( user
:goal_expansion(
G,
CurMod,
GI),
Bd,
_),
476'$fetch_term_expansion_module'(
Mod, ( user
:goal_expansion(
G,
GI)
:- Bd ))
:-
477 clause( user
:goal_expansion(
G,
GI),
Bd,
_),
478 strip_module(
G,
Mod,
_).
480'$fetch_term_expansion_module'(
Mod, ( system
:goal_expansion(
G,
GI)
:- Bd ))
:-
481 clause( system
:goal_expansion(
G,
GI),
Bd,
_),
482 strip_module(
G,
Mod,
_).
484'$fetch_foreigns_module'(
Mod,
Foreigns)
:-
485 findall(
Info,
'$fetch_foreign_module'(
Mod,
Info),
Foreigns).
488'$fetch_foreign_module'(
Mod,
Foreign)
:-
489 recorded(
'$foreign',
Mod:Foreign,
_).
491'$install_term_expansions_module'(
_, []).
492'$install_term_expansions_module'(
Mod, [
TE|TEs])
:-
494 '$install_term_expansions_module'(
Mod,
TEs).
496'$install_imports_module'(
_, [],
Fs0)
:-
498 '$restore_load_files'(
Fs).
499'$install_imports_module'(
Mod, [
Import-F|Imports],
Fs0)
:-
502 '$install_imports_module'(
Mod,
Imports, [
M-F|Fs0]).
504'$restore_load_files'([]).
505'$restore_load_files'([
M-F0|Fs])
:-
507 absolute_file_name(
M,
_File, [expand(true),file_type(qly),access(read),file_errors(fail)])
514 '$restore_load_files'(
Fs).
516'$install_parents_module'(
_, []).
517'$install_parents_module'(
Mod, [
Parent|Parents])
:-
519 '$install_parents_module'(
Mod,
Parents).
521'$install_module_transparents_module'(
_, []).
522'$install_module_transparents_module'(
Mod, [
Module_Transparent|Module_Transparents])
:-
523 assert(prolog
:Module_Transparent),
524 '$install_module_transparents_module'(
Mod,
Module_Transparents).
526'$install_meta_predicates_module'(
_, []).
527'$install_meta_predicates_module'(
Mod, [
Meta_Predicate|Meta_Predicates])
:-
528 call(
Meta_Predicate),
529 '$install_meta_predicates_module'(
Mod,
Meta_Predicates).
531'$install_multi_files_module'(
_, []).
532'$install_multi_files_module'(
Mod, [
Multi_File|Multi_Files])
:-
533 recordz(
'$multifile_defs',
Multi_File,
_),
534 '$install_multi_files_module'(
Mod,
Multi_Files).
536'$install_foreigns_module'(
_, []).
537'$install_foreigns_module'(
Mod, [
Foreign|Foreigns])
:-
538 '$do_foreign'(
Foreign,
Foreigns),
539 '$install_foreigns_module'(
Mod,
Foreigns).
541'$do_foreign'(
'$foreign'(
Objs,
Libs,
Entry),
_)
:-
543'$do_foreign'(
'$swi_foreign'(
File,
Opts,
Handle),
More)
:-
544 open_shared_object(
File,
Opts,
Handle,
NewHandle),
545 '$init_foreigns'(
More,
NewHandle).
546'$do_foreign'(
'$swi_foreign'(
_,
_),
_More).
548'$init_foreigns'([],
_Handle,
_NewHandle).
549'$init_foreigns'([
'$swi_foreign'(
Handle,
Function )
|More],
Handle,
NewHandle)
:-
552 '$init_foreigns'(
More,
Handle,
NewHandle).
553'$init_foreigns'([
_|More],
Handle,
NewHandle)
:-
554 '$init_foreigns'(
More,
Handle,
NewHandle).
563 StartMsg = qload_file,
565 '$current_module'(
SourceModule ),
566 H0 is '$current_module',
576 unload_file(
FilePl ),
577 open(
File, read,
S, [type(binary)])
580 file_directory_name(
File,
DirName),
582 '$q_header'(
S,
Type ),
583 '$lf_option'(last_opt,
LastOpt),
584 functor(
TOpts, opt,
LastOpt ),
585 '$lf_default_opts'(
1,
LastOpt,
TOpts),
587 '$qload_module'(
S ,
Mod,
File,
SourceModule)
589 Type == '$qload_module'
->
590 '$qload_file'(
S,
SourceModule,
File,
FilePl,
F0, all,
TOpts)
594 H is working_directory
-H0,
'$cputime'(
TF,
_),
T is TF-T0,
595 '$current_module'(
Mod,
Mod ),
596 print_message(informational, loaded(
EndMsg,
File,
Mod,
T,
H)),
597 '$exec_initialization_goals'.
599'$qload_file'(
_S,
SourceModule,
_F,
FilePl,
_F0,
_ImportList,
_TOpts)
:-
600 recorded(
'$source_file',
'$source_file'(
FilePl,
_Age,
SourceModule),
_),
602'$qload_file'(
_S,
SourceModule,
_F,
FilePl,
_F0,
_ImportList,
_TOpts)
:-
603 (
FilePl == user_input
-> Age = 0 ; time_file64(
FilePl,
Age) ),
604 recordaifnot(
'$source_file',
'$source_file'(
FilePl,
Age,
SourceModule),
_),
606'$qload_file'(
S,
_SourceModule,
_File,
_FilePl,
_F0,
_ImportList,
_TOpts)
:-
607 '$qload_file_preds'(
S),
609'$qload_file'(
_S,
SourceModule,
F,
_FilePl,
_F0,
_ImportList,
_TOpts)
:-
610 '$qload_file'
:'$file_property'(
'$lf_loaded'(
F,
Age,
_ ) ),
611 recordaifnot(
'$source_file',
'$source_file'(
F,
Age,
SourceModule),
_),
613'$qload_file'(
_S,
_SourceModule,
_File,
FilePl,
F0,
_ImportList,
_TOpts)
:-
614 b_setval(
'$user_source_file',
F0 ),
615 '$ql_process_directives'(
FilePl ),
616 '$ql_process_directives'.
617'$qload_file'(
_S,
SourceModule,
_File,
FilePl,
_F0,
ImportList,
TOpts)
:-
618 '$import_to_current_module'(
FilePl,
SourceModule,
ImportList,
_,
TOpts).
620'$ql_process_directives'(
FilePl )
:-
621 '$ql_process_directives'
:'$file_property'(
'$lf_loaded'(
FilePl,
M,
Reconsult,
UserFile,
OldF,
Line,
Opts) ),
622 recorda(
'$lf_loaded',
'$lf_loaded'(
FilePl,
M,
Reconsult,
UserFile,
OldF,
Line,
Opts),
_),
624'$ql_process_directives'(
_FilePl )
:-
625 '$ql_process_directives'
:'$file_property'(
multifile(
List ) ),
626 '$file_property'
:member(
Clause,
List ),
629'$ql_process_directives'(
FilePl )
:-
630 '$ql_process_directives'
:'$file_property'( directive(
MG,
_Mode,
VL,
Pos ) ),
631 '$set_source'(
FilePl,
Pos ),
632 '$yap_strip_module'(
MG,
M,
G),
633 '$process_directive'(
G, reconsult,
M,
VL,
Pos),
634 '$process_directive'.
635'$ql_process_directives'(
_FilePl )
:-
636 user:'$file_property'/1
abolish().
639
absolute_file_name( -File:atom, +Path:atom, +Options:list)
must_be_callable( ?_Goal_ )
stream_property( Stream, Prop )
working_directory( ?_CurDir_,? NextDir)
yap_flag( ?Param, ?Value)
call_shared_object_function(+ Handle, + Function)
load_foreign_files( Files, Libs, InitRoutine)
current_module( ? Mod:atom)
'$cvt_qsave_flag'(autoload(_B), G, autoload(_B))
qsave_module(+ Module, +_State_)
YAP can save and read images of its current state to files, known as saved states.
prolog_flag_property(+ Flag,+ Prooperties)
print_message(+ Severity, +Term)
load_files(+_Files_, +_Options_)
member(?Element, ?Set) is true when Set is a list, and Element occurs in it