This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/pl/boot.yap

317 lines
7.7 KiB
Prolog

/*************************************************************************
* *
* YAP Prolog *
* *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2014 *
* *
**************************************************************************
* *
* File: boot.yap *
* Last rev: 8/2/88 *
* mods: *
* commen ts: boot file for Prolog *
* *
*************************************************************************/
/**
@file boot.yap
@brief YAP bootstrap
@addtogroup TopLevel Top-Level and Boot Predicates
@ingroup builtins
@{
*/
/**
* @pred system_module( _Mod_, _ListOfPublicPredicates, ListOfPrivatePredicates *
* Define a system module _Mod_. _ListOfPublicPredicates_ . Currentlt, all
* predicates are in the 'prolog' module. The first
* are visible outside the Prolog module, all others are hidden at the end of booting.
*
*/
system_module(Mod, SysExps) :-
system_module(Mod, SysExps, []).
system_module(_Mod, _SysExps, _Decls) :- !.
system_module(_Mod, _SysExps, _Decls) :-
% '$new_system_predicates'(SysExps),
fail.
system_module(_Mod, _SysExps, _Decls) :-
stream_property(loop_stream,[file_name(File)]),
!,
recordz(system_file, File, _ ).
system_module(_Mod, _SysExps, _Decls) :-
recordz(system_file, loop_stream, _ ).
'$new_system_predicates'([]).
'$new_system_predicates'([N/Ar|_Ps]) :-
'$new_system_predicate'(N, Ar, prolog).
'$new_system_predicates'([_P|Ps]) :-
'$new_system_predicates'(Ps).
use_system_module(_Module, _SysExps).
private(_).
%
% boootstrap predicates.
%
:- system_module( '$_boot', [
bootstrap/1,
call/1,
catch/3,
catch_ball/2,
expand_term/2,
print_message/2,
import_system_module/2,
system_module/2,
private/1,
incore/1,
(not)/1,
repeat/0,
throw/1,
true/0]).
:- system_module( '$_init', [!/0,
':-'/1,
'?-'/1,
[]/0,
extensions_to_present_answer/1,
fail/0,
false/0,
goal_expansion/2,
goal_expansion/3,
otherwise/0,
term_expansion/2,
version/2],
[
'$do_log_upd_clause'/6,
'$do_log_upd_clause0'/6,
'$do_log_upd_clause_erase'/6,
'$do_static_clause'/5],
'$system_module'/1]).
:- use_system_module( '$_boot', ['$cut_by'/1]).
% be careful here not to generate an undefined exception..
print_message(informational,_) :-
yap_flag(verbose, silent),
!.
print_message(informational,E) :-
format('informational message ~q.~n',[E]),
!.
%%
% boot:print_message( Type, Error )
%
print_message(Type,error(_,exception(Desc))) :-
'$get_exception'(Desc),
print_boot_message(Type,Error,Desc),
'$print_exception'(Desc),
print_message(Type,warning(_,exception(Desc))) :-
'$get_exception'(Desc),
print_boot_message(Type,Error,Desc),
'$print_exception'(Desc),
!.
print_message(Type,Error) :-
format( user_error, '~w while bootstraping: event is ~q~n',[Type,Error]).
print_boot_message(Type,Error,Desc) :-
'$query_exception'(parserFile, Desc, File),
'$query_exception'(parserLine, Desc, FilePos),
!,
format(user_error,'~a:~d: ~a: ~q~n', [File,FilePos,Type,Error]).
print_boot_message(Type,Error,Desc) :-
'$query_exception'(prologPredFile, Desc, File),
'$query_exception'(prologPredLine, Desc, FilePos),
format(user_error,'~a:~d: ~a: ~q~n', [File,FilePos,Type,Error]).
print_boot_message(Type,Error,Desc) :-
'$query_exception'(errorFile, Desc, File),
'$query_exception'(errorLine, Desc, FilePos),
format(user_error,'~a:~d: ~a: ~q~n', [File,FilePos,Type,Error]).
'$undefp0'([M|G], _Action) :-
functor(G,N,A),
print_message( error, error(error(unknown, M:N/A),M:G)),
fail.
:- '$undefp_handler'('$undefp0'(_,_),prolog).
/**
* @pred $system_meta_predicates'( +L )
*
* @param L declare a set of system meta-predicates
*
* @return system predicates
*/
'$system_meta_predicates'([]).
'$system_meta_predicates'([P|L]) :-
functor(P,N,A),
'$new_meta_pred'(P, prolog),
G = ('$meta_predicate'(N,_M2,A,P) :- true),
'$compile'(G, assertz, G, prolog, _R),
'$system_meta_predicates'(L).
:- '$mk_dynamic'( prolog_file_type(_Ext, _NType), user).
:- '$new_multifile'( prolog_file_type(_Ext, _NType), user).
:- '$mk_dynamic'( '$meta_predicate'(_N,_M,_A,_P), prolog).
:- '$new_multifile'( '$meta_predicate'(_N,_M,_A,_P), prolog).
:- '$new_multifile'('$full_clause_optimisation'(_H, _M, _B0, _BF), prolog).
:- '$new_multifile'('$exec_directive'(_,_,_,_,_), prolog).
%:- start_low_level_trace.
% This is the YAP init file
% should be consulted first step after booting
:- yap_flag(prolog:unknown, error).
:- c_compile('top.yap').
% These are pseudo declarations
% so that the user will get a redefining system predicate
% just create a choice-point
% the 6th argument marks the time-stamp.
'$do_log_upd_clause'(_,_,_,_,_,_).
'$do_log_upd_clause'(A,B,C,D,E,_) :-
'$continue_log_update_clause'(A,B,C,D,E).
'$do_log_upd_clause'(_,_,_,_,_,_).
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
'$do_log_upd_clause_erase'(A,B,C,D,E,_) :-
'$continue_log_update_clause_erase'(A,B,C,D,E).
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
'$do_log_upd_clause0'(_,_,_,_,_,_).
'$do_log_upd_clause0'(A,B,C,D,_,_) :-
'$continue_log_update_clause'(A,B,C,D).
'$do_log_upd_clause0'(_,_,_,_,_,_).
'$do_static_clause'(_,_,_,_,_).
'$do_static_clause'(A,B,C,D,E) :-
'$continue_static_clause'(A,B,C,D,E).
'$do_static_clause'(_,_,_,_,_).
:- c_compile('directives.yap').
:- c_compile('init.yap').
'$command'(C,VL,Pos,Con) :-
current_prolog_flag(strict_iso, true), !, /* strict_iso on */
'$yap_strip_module'(C, EM, EG),
'$execute_command'(EG,EM,VL,Pos,Con,_Source).
'$command'(C,VL,Pos,Con) :-
( (Con = top ; var(C) ; C = [_|_]) ->
'$yap_strip_module'(C, EM, EG),
'$execute_command'(EG,EM,VL,Pos,Con,C) ;
% do term expansion
'$expand_term'(C, Con, EC),
( nonvar(EC) ->
'$yap_strip_module'(EC, EM2, EG2)
;
'$yap_strip_module'(C, EM2, EG2)
),
% execute a list of commands
'$execute_commands'(EG2,EM2,VL,Pos,Con,_Source)
),
% succeed only if the *original* was at end of file.
C == end_of_file.
:- c_compile('arith.yap').
%:- stop_low_level_trace.
:- compile_expressions.
:- c_compile('imports.yap').
:- c_compile('bootutils.yap').
:- c_compile('bootlists.yap').
:- c_compile('consult.yap').
:- c_compile('preddecls.yap').
:- c_compile('meta.yap').
:- c_compile('metadecls.yap').
:- c_compile('preddyns.yap').
:- c_compile('builtins.yap').
:- c_compile('newmod.yap').
:- c_compile('atoms.yap').
:- c_compile('os.yap').
:- c_compile('errors.yap').
%%
% @pred initialize_prolog
%
% User-interface to Prolog bootstrap routine.
%
initialize_prolog :-
'$init_prolog'.
:- set_prolog_flag(verbose, silent).
%:- set_prolog_flag(verbose_file_search, true ).
%:- yap_flag(write_strings,on).
:- c_compile( 'preds.yap' ).
:- c_compile( 'modules.yap' ).
:- c_compile( 'grammar.yap' ).
:- c_compile( 'protect.yap' ).
:- ['absf.yap'].
:- use_module('error.yap').
:- [
'utils.yap',
'control.yap',
'flags.yap'
].
:- [
% lists is often used.
'../os/yio.yap',
'debug.yap',
'checker.yap',
'depth_bound.yap',
'ground.yap',
'listing.yap',
'arithpreds.yap',
% modules must be after preds, otherwise we will have trouble
% with meta-predicate expansion being invoked
% must follow grammar
'eval.yap',
'signals.yap',
'profile.yap',
'callcount.yap',
'load_foreign.yap',
% 'save.yap',
'setof.yap',
'sort.yap',
'statistics.yap',
'strict_iso.yap',
'tabling.yap',
'threads.yap',
'eam.yap',
'yapor.yap',
'qly.yap',
'spy.yap',
'udi.yap',
'boot2.yap'].
%% @}