flags, etc

This commit is contained in:
Vítor Santos Costa 2015-06-19 01:11:30 +01:00
parent c3487d0fc0
commit b93f10fe07
8 changed files with 161 additions and 1068 deletions

View File

@ -324,7 +324,7 @@ do_continuation(Continuation, Module1) :-
execute_continuation(Continuation, Module1) :-
'$undefined'(Continuation, Module1), !,
'$current_module'( M ),
'$swi_current_prolog_flag'( M:unknown, Default ),
current_prolog_flag( M:unknown, Default ),
'$undefp'([Module1|Continuation] , Default ).
execute_continuation(Continuation, Mod) :-
% do not do meta-expansion nor any fancy stuff.

View File

@ -308,14 +308,14 @@ true :- true.
'$init_system'.
'$do_live' :-
repeat,
'$current_module'(Module),
( Module==user ->
'$compile_mode'(_,0)
;
format(user_error,'[~w]~n', [Module])
),
'$system_catch'('$enter_top_level',Module,Error,user:'$Error'(Error)).
repeat,
'$current_module'(Module),
( Module==user ->
'$compile_mode'(_,0)
;
format(user_error,'[~w]~n', [Module])
),
'$system_catch'('$enter_top_level',Module,Error,user:'$Error'(Error)).
'$init_system' :-
@ -324,20 +324,14 @@ true :- true.
set_value('$yap_inited', true),
% do catch as early as possible
(
'$access_yap_flags'(15, 0),
'$access_yap_flags'(22, 0),
\+ '$uncaught_throw'
current_prolog_flag(halt_after_consult, false),
current_prolog_flag(verbose, normal),
\+ '$uncaught_throw'
->
'$version'
;
true
),
(
'$access_yap_flags'(22, 0) ->
'$swi_set_prolog_flag'(verbose, normal)
;
'$swi_set_prolog_flag'(verbose, silent)
),
% '$init_preds', % needs to be done before library_directory
% (
% retractall(user:library_directory(_)),
@ -347,17 +341,16 @@ true :- true.
% ;
% true
% ),
'$swi_current_prolog_flag'(file_name_variables, OldF),
'$swi_set_prolog_flag'(file_name_variables, true),
current_prolog_flag(file_name_variables, OldF),
set_prolog_flag(file_name_variables, true),
'$init_consult',
'$swi_set_prolog_flag'(file_name_variables, OldF),
'$init_win_graphics',
set_prolog_flag(file_name_variables, OldF),
'$init_globals',
'$swi_set_prolog_flag'(fileerrors, true),
set_prolog_flag(fileerrors, true),
set_value('$gc',on),
('$exit_undefp' -> true ; true),
prompt1(' ?- '),
'$swi_set_prolog_flag'(debug, false),
set_prolog_flag(debug, false),
% simple trick to find out if this is we are booting from Prolog.
% boot from a saved state
(
@ -369,7 +362,7 @@ true :- true.
->
bootstrap(X),
module( user ),
qsave_program( "startup.yss")
qsave_program( 'startup.yss')
;
true
)
@ -385,7 +378,7 @@ true :- true.
'$run_at_thread_start'.
'$init_globals' :-
% '$swi_set_prolog_flag'(break_level, 0),
% set_prolog_flag(break_level, 0),
% '$set_read_error_handler'(error), let the user do that
nb_setval('$chr_toplevel_show_store',false).
@ -433,8 +426,9 @@ true :- true.
/* main execution loop */
'$read_toplevel'(Goal, Bindings) :-
fail,
'$pred_exists'(read_history(_,_,_,_,_,_), user),
'$swi_current_prolog_flag'(readline, true), !,
current_prolog_flag(readline, true), !,
read_history(h, '!h',
[trace, end_of_file],
Prompt, Goal, Bindings), !,
@ -446,34 +440,24 @@ true :- true.
'$read_toplevel'(Goal, Bindings) :-
prompt1('?- '),
prompt(_,'|: '),
(print_message(error, E),
'$handle_toplevel_error'(Line, E))),
(
'$pred_exists'(rl_add_history(_), user)
->
format(atom(CompleteLine), '~W~W',
[ Line, [partial(true)],
'.', [partial(true)]
]),
user:rl_add_history(CompleteLine)
;
true
),
'$system_catch'(
atom_to_term(Line, Goal, Bindings), prolog, E,
( print_message(error, E),
fail
)
), !.
'$system_catch'(read_term(user_input,
Goal,
[variable_names(Bindings)]),
prolog, E, '$handle_toplevel_error'( E) ).
'$handle_toplevel_error'(_, syntax_error(_)) :-
'$handle_toplevel_error'( syntax_error(_)) :-
!,
fail.
'$handle_toplevel_error'(end_of_file, error(io_error(read,user_input),_)) :-
'$handle_toplevel_error'( error(io_error(read,user_input),_)) :-
!.
'$handle_toplevel_error'(_, E) :-
throw(E).
/** @pred stream_property( _Stream_, _Prop_)
*/
% reset alarms when entering top-level.
'$enter_top_level' :-
'$alarm'(0, 0, _, _),
@ -482,8 +466,8 @@ true :- true.
'$clean_up_dead_clauses',
fail.
'$enter_top_level' :-
'$swi_current_prolog_flag'(break_level, BreakLevel),
'$swi_current_prolog_flag'(debug, DBON),
current_prolog_flag(break_level, BreakLevel),
current_prolog_flag(debug, DBON),
(
'$nb_getval'('$trace', on, fail)
->
@ -501,7 +485,7 @@ true :- true.
get_value('$top_level_goal',GA), GA \= [], !,
set_value('$top_level_goal',[]),
'$run_atom_goal'(GA),
'$swi_current_prolog_flag'(break_level, BreakLevel),
current_prolog_flag(break_level, BreakLevel),
(
Breaklevel \= 0
->
@ -523,7 +507,7 @@ true :- true.
nb_setval('$debug_run',off),
nb_setval('$debug_jump',off),
'$command'(Command,Varnames,_Pos,top),
'$swi_current_prolog_flag'(break_level, BreakLevel),
current_prolog_flag(break_level, BreakLevel),
(
BreakLevel \= 0
->
@ -545,17 +529,13 @@ true :- true.
'$erase_sets'.
'$version' :-
get_value('$version_name',VersionName),
print_message(help, version(VersionName)),
get_value('$myddas_version_name',MYDDASVersionName),
MYDDASVersionName \== [],
print_message(help, myddas_version(MYDDASVersionName)),
fail.
'$version' :-
recorded('$version',VersionName,_),
print_message(help, VersionName),
fail.
'$version'.
current_prolog_flag(version_git,VersionGit),
current_prolog_flag(compiled_at,AT),
current_prolog_flag(version_data, yap(Mj, Mi, Patch, _) ),
sub_atom( VersionGit, 0, 8, _, VERSIONGIT ),
format(user_error, '% YAP ~d.~d.~d-~a (compiled ~a)~n', [Mj,Mi, Patch, VERSIONGIT, AT]),
fail.
'$version'.
/** @pred repeat is iso
Succeeds repeatedly.
@ -604,7 +584,7 @@ number of steps.
recorda('$result',going,_).
'$command'(C,VL,Pos,Con) :-
'$access_yap_flags'(9,1), !,
current_prolog_flag(strict_iso, true), !, /* strict_iso on */
'$execute_command'(C,VL,Pos,Con,C).
'$command'(C,VL,Pos,Con) :-
( (Con = top ; var(C) ; C = [_|_]) ->
@ -675,7 +655,7 @@ number of steps.
% YAP accepts everything everywhere
%
'$process_directive'(G, top, M, VL, Pos) :-
'$access_yap_flags'(8, 0), !, % YAP mode, go in and do it,
current_prolog_flag(language_mode, yap), !, /* strict_iso on */
'$process_directive'(G, consult, M, VL, Pos).
'$process_directive'(G, top, _, _, _) :- !,
'$do_error'(context_error((:- G),clause),query).
@ -694,8 +674,8 @@ number of steps.
%
% ISO does not allow goals (use initialization).
%
'$process_directive'(D, _, M, VL, Pos) :-
'$access_yap_flags'(8, 1), !, % ISO Prolog mode, go in and do it,
'$process_directive'(D, _, M, VL, Pos) :-
current_prolog_flag(language_mode, iso), !, % ISO Prolog mode, go in and do it,
'$do_error'(context_error((:- M:D),query),directive).
%
% but YAP and SICStus does.
@ -718,7 +698,7 @@ number of steps.
'$go_compile_clause'(G,V,Pos,5,Source),
fail.
'$continue_with_command'(consult,V,Pos,G,Source) :-
'$go_compile_clause'(G,V,Pos,13,Source),
'$go_compile_clause'(G,V,Pos,13,Source),
fail.
'$continue_with_command'(top,V,_,G,_) :-
'$query'(G,V).
@ -754,18 +734,16 @@ number of steps.
% process an input clause
'$$compile'(G, G0, L, Mod) :-
'$head_and_body'(G,H,_),
'$flags'(H, Mod, Fl, Fl),
is(NFl, /\, Fl, 0x00002000),
(
NFl \= 0
'$is_dynamic'(H, Mod)
->
'$assertz_dynamic'(L,G,G0,Mod)
'$assertz_dynamic'(L, G, G0, Mod)
;
'$nb_getval'('$assert_all',on,fail)
->
functor(H,N,A),
'$dynamic'(N/A,Mod),
'$assertz_dynamic'(L,G,G0,Mod)
'$assertz_dynamic'(L, G, G0, Mod)
;
'$not_imported'(H, Mod),
'$compile'(G, L, G0, Mod)
@ -897,7 +875,7 @@ number of steps.
flush_output,
fail.
'$present_answer'((?-), Answ) :-
'$swi_current_prolog_flag'(break_level, BL ),
current_prolog_flag(break_level, BL ),
( BL \= 0 -> format(user_error, '[~p] ',[BL]) ;
true ),
( recorded('$print_options','$toplevel'(Opts),_) ->
@ -1139,7 +1117,7 @@ incore(G) :- '$execute'(G).
).
'$enable_debugging' :-
'$swi_current_prolog_flag'(debug, false), !.
current_prolog_flag(debug, false), !.
'$enable_debugging' :-
'$nb_getval'('$trace', on, fail), !,
'$creep'.
@ -1334,12 +1312,12 @@ bootstrap(F) :-
% '$open'(F, '$csult', Stream, 0, 0, F),
% '$file_name'(Stream,File),
open(F, read, Stream),
stream_property(Stream, file_name(File)),
stream_property(Stream, [file_name(File)]),
'$start_consult'(consult, File, LC),
file_directory_name(File, Dir),
working_directory(OldD, Dir),
(
'$swi_current_prolog_flag'(verbose_load, silent)
current_prolog_flag(verbose_load, silent)
->
true
;
@ -1351,7 +1329,7 @@ bootstrap(F) :-
'$current_module'(_, prolog),
'$end_consult',
(
'$swi_current_prolog_flag'(verbose_load, silent)
current_prolog_flag(verbose_load, silent)
->
true
;
@ -1388,7 +1366,7 @@ bootstrap(F) :-
!.
'$enter_command'(Stream,Mod,Status) :-
read_clause(Stream, Command, [variable_names(Vars), term_position(Pos), syntax_errors(dec10) ]),
read_term(Stream, Command, [variable_names(Vars), term_position(Pos), syntax_errors(dec10) ]),
'$command'(Command,Vars,Pos,Status).
'$abort_loop'(Stream) :-
@ -1426,7 +1404,7 @@ bootstrap(F) :-
'$module_expansion'(Term, Expanded0, ExpandedI, HeadMod, BodyMod, SourceMod), !,
%format(' -> ~w~n',[Expanded0]),
(
'$access_yap_flags'(9,1) /* strict_iso on */
current_prolog_flag(strict_iso, true) /* strict_iso on */
->
Expanded = ExpandedI,
'$check_iso_strict_clause'(Expanded0)
@ -1571,7 +1549,7 @@ catch_ball(Ball, V) :-
catch_ball(C, C).
'$run_toplevel_hooks' :-
'$swi_current_prolog_flag'(break_level, 0 ),
current_prolog_flag(break_level, 0 ),
recorded('$toplevel_hooks',H,_),
H \= fail, !,
( call(user:H1) -> true ; true).

View File

@ -214,8 +214,8 @@ load_files(Files,Opts) :-
'$lf_option'(silent, 8, _).
'$lf_option'(skip_unix_header, 9, true).
'$lf_option'(compilation_mode, 10, Flag) :-
'$access_yap_flags'(11,YF),
( YF == 0 -> Flag = compact ; Flag = source ).
current_prolog_flag(source, YFlag),
( YFlag == false -> Flag = compact ; Flag = source ).
'$lf_option'(consult, 11, reconsult).
'$lf_option'(stream, 12, _).
'$lf_option'(register, 13, true).
@ -227,7 +227,8 @@ load_files(Files,Opts) :-
'$lf_option'('$location', 19, _).
'$lf_option'(dialect, 20, yap).
'$lf_option'(format, 21, source).
'$lf_option'(redefine_module, 22, false).
'$lf_option'(redefine_module, 22, Warn) :-
( var(Warn) -> current_prolog_flag( redefine_warnings, Redefine ), Redefine = Warn ; true )).
'$lf_option'(reexport, 23, false).
'$lf_option'(sandboxed, 24, false).
'$lf_option'(scope_settings, 25, false).
@ -436,13 +437,15 @@ load_files(Files,Opts) :-
;
stream_property(Stream, file_name(Y))
), !,
( '$size_stream'(Stream, Pos) -> true ; Pos = 0),
% start_low_level_trace,
( file_size(Stream, Pos) -> true ; Pos = 0),
'$set_lf_opt'('$source_pos', TOpts, Pos),
'$lf_opt'(reexport, TOpts, Reexport),
'$lf_opt'(if, TOpts, If),
( var(If) -> If = true ; true ),
'$lf_opt'(imports, TOpts, Imports),
'$start_lf'(If, Mod, Stream, TOpts, File, Y, Reexport, Imports),
% stop_low_level_trace,
close(Stream).
'$lf'(X, _, Call, _) :-
'$do_error'(permission_error(input,stream,X),Call).
@ -461,6 +464,7 @@ load_files(Files,Opts) :-
'$reexport'( TOpts, ParentF, Reexport, Imports, File ).
'$start_lf'(_, Mod, PlStream, TOpts, _UserFile, File, Reexport, ImportList) :-
% check if there is a qly file
% start_low_level_trace,
'$absolute_file_name'(File,[access(read),file_type(qly),file_errors(fail),solutions(first),expand(true)],F,qload_file(File)),
open( F, read, Stream , [type(binary)] ),
H0 is heapused, '$cputime'(T0,_),
@ -483,6 +487,7 @@ load_files(Files,Opts) :-
'$lf_opt'('$location', TOpts, ParentF:_Line),
'$reexport'( TOpts, ParentF, Reexport, ImportList, File ),
print_message(Verbosity, loaded( loaded, F, M, T, H)),
% stop_low_level_trace,
'$exec_initialisation_goals'
;
close( Stream),
@ -503,7 +508,7 @@ loaded, otherwise advertises the user about the existing name clashes
are not public remain invisible.
When the files are not module files, ensure_loaded/1 loads them
if they have not been loaded before, and naes nothing otherwise.
if they have not been loaded before, and does nothing otherwise.
_F_ must be a list containing the names of the files to load.
*/
@ -543,7 +548,7 @@ consult(Fs) :-
'$consult'(Fs, M0).
'$consult'(Fs,Module) :-
'$access_yap_flags'(8, 2), % SICStus Prolog compatibility
current_prolog_flag(language_mode, iso), % SICStus Prolog compatibility
!,
'$load_files'(Module:Fs,[],consult(Fs)).
'$consult'(Fs, Module) :-
@ -646,6 +651,9 @@ db_files(Fs) :-
'$do_lf'(ContextModule, Stream, UserFile, File, TOpts) :-
stream_property(OldStream, alias(loop_stream) ),
'$lf_opt'(encoding, TOpts, Encoding),
set_stream( Stream, [alias(loop_stream), encoding(Encoding)] ),
'$lf_opt'('$context_module', TOpts, ContextModule),
'$lf_opt'(reexport, TOpts, Reexport),
'$msg_level'( TOpts, Verbosity),
@ -653,8 +661,6 @@ db_files(Fs) :-
'$nb_getval'('$qcompile', ContextQCompiling, ContextQCompiling = never),
nb_setval('$qcompile', QCompiling),
% format( 'I=~w~n', [Verbosity=UserFile] ),
'$lf_opt'(encoding, TOpts, Encoding),
'$set_encoding'(Stream, Encoding),
% export to process
b_setval('$lf_status', TOpts),
'$reset_if'(OldIfLevel),
@ -666,8 +672,7 @@ db_files(Fs) :-
'$loaded'(File, UserFile, SourceModule, ParentF, Line, Reconsult0, Reconsult, Dir, Opts),
working_directory(OldD, Dir),
H0 is heapused, '$cputime'(T0,_),
'$set_current_loop_stream'(OldStream, Stream),
'$swi_current_prolog_flag'(generate_debug_info, GenerateDebug),
current_prolog_flag(generate_debug_info, GenerateDebug),
'$lf_opt'(compilation_mode, TOpts, CompMode),
'$comp_mode'(OldCompMode, CompMode),
recorda('$initialisation','$',_),
@ -705,8 +710,8 @@ db_files(Fs) :-
;
true
),
'$set_current_loop_stream'(Stream, OldStream),
'$swi_set_prolog_flag'(generate_debug_info, GenerateDebug),
set_stream( OldStream, alias(loop_stream) ),
set_prolog_flag(generate_debug_info, GenerateDebug),
'$comp_mode'(_CompMode, OldCompMode),
working_directory(_,OldD),
% surely, we were in run mode or we would not have included the file!
@ -735,13 +740,13 @@ db_files(Fs) :-
'$msg_level'( TOpts, Verbosity) :-
'$lf_opt'(autoload, TOpts, AutoLoad),
AutoLoad == true,
'$swi_current_prolog_flag'(verbose_autoload, false), !,
current_prolog_flag(verbose_autoload, false), !,
Verbosity = silent.
'$msg_level'( _TOpts, Verbosity) :-
'$swi_current_prolog_flag'(verbose_load, false), !,
current_prolog_flag(verbose_load, false), !,
Verbosity = silent.
'$msg_level'( _TOpts, Verbosity) :-
'$swi_current_prolog_flag'(verbose, silent), !,
current_prolog_flag(verbose, silent), !,
Verbosity = silent.
'$msg_level'( TOpts, Verbosity) :-
'$lf_opt'(silent, TOpts, Silent),
@ -845,17 +850,16 @@ db_files(Fs) :-
true ;
'$do_error'(permission_error(input,stream,Y),include(X))
),
'$set_current_loop_stream'(OldStream, Stream),
H0 is heapused, '$cputime'(T0,_),
working_directory(Dir, Dir),
'$lf_opt'(encoding, TOpts, Encoding),
set_stream(Stream, [encoding(Encoding),alias(loop_stream)] ),
'$loaded'(Y, X, Mod, OldY, L, include, _, Dir, []),
( '$nb_getval'('$included_file', OY, fail ) -> true ; OY = [] ),
'$lf_opt'(encoding, TOpts, Encoding),
'$set_encoding'(Stream, Encoding),
nb_setval('$included_file', Y),
print_message(Verbosity, loading(including, Y)),
'$loop'(Stream,Status),
'$set_current_loop_stream'(Stream, OldStream),
set_stream(OldStream, alias(loop_stream) ),
close(Stream),
H is heapused-H0, '$cputime'(TF,_), T is TF-T0,
print_message(Verbosity, loaded(included, Y, Mod, T, H)),
@ -870,16 +874,16 @@ db_files(Fs) :-
'$init_win_graphics',
fail.
'$do_startup_reconsult'(X) :-
( '$access_yap_flags'(15, 0) ->
( current_prolog_flag(language_mode, yap) ->
'$system_catch'(load_files(X, [silent(true)]), Module, Error, '$Error'(Error))
;
'$swi_set_prolog_flag'(verbose, silent),
set_prolog_flag(verbose, silent),
'$system_catch'(load_files(X, [silent(true),skip_unix_header(true)]),Module,_,fail)
;
true
),
!,
( '$access_yap_flags'(15, 0) -> true ; halt).
( current_prolog_flag(language_mode, yap) -> true ; halt).
'$do_startup_reconsult'(_).
'$skip_unix_header'(Stream) :-
@ -993,8 +997,7 @@ prolog_load_context(stream, Stream) :-
'$nb_getval'('$consulting_file', _, fail),
'$current_loop_stream'(Stream).
prolog_load_context(term_position, Position) :-
'$current_loop_stream'(Stream),
stream_property(Stream, position(Position) ).
stream_property( Stream, [alias(loop_stream),position(Position)] ).
% if the file exports a module, then we can
@ -1075,13 +1078,6 @@ prolog_load_context(term_position, Position) :-
true ),
recorda('$lf_loaded','$lf_loaded'( F, M, Reconsult, UserFile, OldF, Line, Opts), _).
'$set_encoding'(Encoding) :-
'$current_loop_stream'(Stream),
'$set_encoding'(Stream, Encoding).
'$set_encoding'(Stream, Encoding) :-
( Encoding == default -> true ; set_stream(Stream, encoding(Encoding)) ).
/** @pred make is det
SWI-Prolog originally included this built-in as a Prolog version of the Unix `make`
@ -1099,14 +1095,6 @@ make.
make_library_index(_Directory).
'$file_name'(Stream,F) :-
stream_property(Stream, file_name(F)), !.
'$file_name'(user_input,user_input) :- !.
'$file_name'(user_output,user_ouput) :- !.
'$file_name'(user_error,user_error) :- !.
'$file_name'(_,[]).
'$fetch_stream_alias'(OldStream,Alias) :-
stream_property(OldStream, alias(Alias)), !.
@ -1116,22 +1104,6 @@ make_library_index(_Directory).
assert_static(Clause).
'$set_current_loop_stream'(OldStream, Stream) :-
'$current_loop_stream'(OldStream), !,
'$new_loop_stream'(Stream).
'$set_current_loop_stream'(_OldStream, Stream) :-
'$new_loop_stream'(Stream).
'$new_loop_stream'(Stream) :-
(var(Stream) ->
nb_delete('$loop_stream')
;
nb_setval('$loop_stream',Stream)
).
'$current_loop_stream'(Stream) :-
'$nb_getval'('$loop_stream',Stream, fail).
exists_source(File) :-
'$full_filename'(File, _AbsFile, exists_source(File)).
@ -1664,15 +1636,15 @@ End of conditional compilation.
nb_setval('$assert_all',on).
'$comp_mode'(OldCompMode, source) :-
'$fetch_comp_status'(OldCompMode),
'$set_yap_flags'(11,1).
set_prolog_flag(source, true).
'$comp_mode'(OldCompMode, compact) :-
'$fetch_comp_status'(OldCompMode),
'$set_yap_flags'(11,0).
set_prolog_flag(source, false).
'$fetch_comp_status'(assert_all) :-
'$nb_getval'('$assert_all',on, fail), !.
'$fetch_comp_status'(source) :-
'$access_yap_flags'(11,1), !.
current_prolog_flag(source, true), !.
'$fetch_comp_status'(compact).
consult_depth(LV) :- '$show_consult_level'(LV).

View File

@ -148,8 +148,8 @@ mode and the existing spy-points, when the debugger is on.
).
'$do_suspy'(S, F, N, T, M) :-
'$system_predicate'(T,M),
'$flags'(T,M,F,F),
F /\ 0x118dd080 =\= 0,
'$predicate_flags'(T,M,F,F),
F /\ 0x118dd080 =\= 0,
( S = spy ->
'$do_error'(permission_error(access,private_procedure,T),spy(M:F/N))
;
@ -243,16 +243,16 @@ debug :-
'$start_debugging'(Mode) :-
(Mode == on ->
'$swi_set_prolog_flag'(debug, true)
set_prolog_flag(debug, true)
;
'$swi_set_prolog_flag'(debug, false)
set_prolog_flag(debug, false)
),
nb_setval('$debug_run',off),
nb_setval('$debug_jump',false).
nodebug :-
'$init_debugger',
'$swi_set_prolog_flag'(debug, false),
set_prolog_flag(debug, false),
nb_setval('$trace',off),
print_message(informational,debug(off)).
@ -402,7 +402,7 @@ debugging :-
'$init_debugger',
prolog:debug_action_hook(nospyall), !.
debugging :-
( '$swi_current_prolog_flag'(debug, true) ->
( current_prolog_flag(debug, true) ->
print_message(help,debug(debug))
;
print_message(help,debug(off))
@ -572,7 +572,7 @@ top-level. YAP disactivates debug mode, but spypoints are not removed.
+ `n` - nodebug
stop debugging and continue execution. The command will not clear active
spy-points.
§spy-points.
+ `e` - exit
@ -667,7 +667,7 @@ be lost.
%
% $spy may be called from user code, so be careful.
'$spy'([Mod|G]) :-
'$swi_current_prolog_flag'(debug, false), !,
current_prolog_flag(debug, false), !,
'$execute_nonstop'(G,Mod).
'$spy'([Mod|G]) :-
CP is '$last_choice_pt',
@ -917,7 +917,7 @@ be lost.
'$spycall_expanded'(G, M, CalledFromDebugger, InRedo).
'$spycall_expanded'(G, M, _CalledFromDebugger, InRedo) :-
'$flags'(G,M,F,F),
'$predicate_flags'(G,M,F,F),
F /\ 0x08402000 =\= 0, !, % dynamic procedure, logical semantics, or source
% use the interpreter
CP is '$last_choice_pt',
@ -955,7 +955,7 @@ be lost.
).
'$tabled_predicate'(G,M) :-
'$flags'(G,M,F,F),
'$predicate_flags'(G,M,F,F),
F /\ 0x00000040 =\= 0.
%'$trace'(P,G,Module,L,Deterministic) :-
@ -964,7 +964,7 @@ be lost.
% at this point we are done with leap or skip
nb_setval('$debug_run',off),
% make sure we run this code outside debugging mode.
'$swi_set_prolog_flag'(debug, false),
set_prolog_flag(debug, false),
repeat,
'$trace_msg'(P,G,Module,L,Deterministic),
(
@ -977,13 +977,13 @@ be lost.
),
(Debug = on
->
'$swi_set_prolog_flag'(debug, true)
set_prolog_flag(debug, true)
;
Debug = zip
->
'$swi_set_prolog_flag'(debug, true)
set_prolog_flag(debug, true)
;
'$swi_set_prolog_flag'(debug, false)
set_prolog_flag(debug, false)
),
!.
@ -1027,10 +1027,10 @@ be lost.
'$action'(0'!,_,_,_,_,_) :- !, % ! 'g execute
read(debugger_input, G),
% don't allow yourself to be caught by creep.
'$swi_current_prolog_flag'(debug, OldDeb),
'$swi_set_prolog_flag'(debug, false),
current_prolog_flag(debug, OldDeb),
set_prolog_flag(debug, false),
( '$execute'(G) -> true ; true),
'$swi_set_prolog_flag'(debug, OldDeb),
set_prolog_flag(debug, OldDeb),
% '$skipeol'(0'!), % '
fail.
'$action'(0'<,_,_,_,_,_) :- !, % <'Depth
@ -1109,7 +1109,7 @@ be lost.
nodebug.
'$action'(0'r,_,CallId,_,_,_) :- !, % 'r retry
'$scan_number'(0'r,CallId,ScanNumber), % '
'$swi_set_prolog_flag'(debug, true),
set_prolog_flag(debug, true),
throw(error('$retry_spy'(ScanNumber),[])).
'$action'(0's,P,CallNumber,_,_,on) :- !, % 's skip
'$skipeol'(0's), % '

View File

@ -115,8 +115,8 @@
'$exec_directive'(G, Mode, M, VL, Pos).
'$save_directive'(G, Mode, M, VL, Pos) :-
prolog_load_context(file, FileName), !,
recordz('$directive', directive(FileName,M:G, Mode, VL, Pos),_).
prolog_load_context(file, FileName), !,
recordz('$directive', directive(FileName,M:G, Mode, VL, Pos),_).
'$exec_directive'(multifile(D), _, M, _, _) :-
'$system_catch'('$multifile'(D, M), M,

View File

@ -26,623 +26,6 @@
yap_flag/2,
yap_flag/3], []).
/** @defgroup Flags YAP Execution Flags
@ingroup builtins
@{
*/
:- use_system_module( '$_boot', ['$prompt_alternatives_on'/1]).
:- use_system_module( '$_checker', ['$syntax_check_discontiguous'/2,
'$syntax_check_multiple'/2,
'$syntax_check_single_var'/2]).
:- use_system_module( '$_control', ['$set_toplevel_hook'/1]).
:- use_system_module( '$_errors', ['$do_error'/2]).
:- use_system_module( '$_yio', ['$default_expand'/1,
'$set_default_expand'/1]).
yap_flag(V,Out) :-
'$user_defined_flag'(V,_,_,_),
(nonvar(V) ->
!
;
true
),
'$user_flag_value'(V, Out).
yap_flag(V,Out) :-
( var(V) ->
'$swi_current_prolog_flag'(V, Out)
;
'$swi_current_prolog_flag'(V, Current)
->
(var(Out) ->
Current = Out
;
'$swi_set_prolog_flag'(V, Out)
)
).
yap_flag(V,Out) :-
var(V), !,
'$show_yap_flag_opts'(V,Out).
% do or do not machine code
yap_flag(fast,on) :- set_value('$fast',true).
yap_flag(fast,off) :- !, set_value('$fast',[]).
% hide/unhide atoms
yap_flag(hide,Atom) :- !, hide(Atom).
yap_flag(unhide,Atom) :- !, unhide(Atom).
% control garbage collection
yap_flag(gc,V) :-
var(V), !,
( get_value('$gc',[]) -> V = off ; V = on).
yap_flag(gc,on) :- !, set_value('$gc',true).
yap_flag(gc,off) :- !, set_value('$gc',[]).
yap_flag(gc_margin,N) :-
( var(N) ->
get_value('$gc_margin',N)
;
integer(N), N >=0 ->
set_value('$gc_margin',N)
;
'$do_error'(domain_error(flag_value,gc_margin+X),yap_flag(gc_margin,X))
).
yap_flag(gc_trace,V) :-
var(V), !,
get_value('$gc_trace',N1),
get_value('$gc_verbose',N2),
get_value('$gc_very_verbose',N3),
'$yap_flag_show_gc_tracing'(N1, N2, N3, V).
yap_flag(gc_trace,on) :- !,
set_value('$gc_trace',true),
set_value('$gc_verbose',[]),
set_value('$gc_very_verbose',[]).
yap_flag(gc_trace,verbose) :- !,
set_value('$gc_trace',[]),
set_value('$gc_verbose',true),
set_value('$gc_very_verbose',[]).
yap_flag(gc_trace,very_verbose) :- !,
set_value('$gc_trace',[]),
set_value('$gc_verbose',true),
set_value('$gc_very_verbose',true).
yap_flag(gc_trace,off) :-
set_value('$gc_trace',[]),
set_value('$gc_verbose',[]),
set_value('$gc_very_verbose',[]).
yap_flag(syntax_errors, V) :- var(V), !,
'$get_read_error_handler'(V).
yap_flag(syntax_errors, Option) :-
'$set_read_error_handler'(Option).
% compatibility flag
yap_flag(enhanced,on) :- !, set_value('$enhanced',true).
yap_flag(enhanced,off) :- set_value('$enhanced',[]).
% compatibility flag
yap_flag(agc_margin,Margin) :-
'$agc_threshold'(Margin).
%
% show state of $
%
yap_flag(dollar_as_lower_case,V) :-
var(V), !,
'$type_of_char'(36,T),
(T = 3 -> V = on ; V = off).
%
% make $a a legit atom
%
yap_flag(dollar_as_lower_case,on) :- !,
'$change_type_of_char'(36,3).
%
% force quoting of '$a'
%
yap_flag(dollar_as_lower_case,off) :-
'$change_type_of_char'(36,7).
yap_flag(call_counting,X) :- (var(X); X = on; X = off), !,
'$is_call_counted'(X).
:- set_value('$associate',yap).
yap_flag(associate,X) :-
var(X), !,
get_value('$associate',X).
yap_flag(associate,X) :-
atom(X), !,
set_value('$associate',X).
yap_flag(associate,X) :-
'$do_error'(type_error(atom,X),associate(X)).
% do or do not indexation
yap_flag(index,X) :- var(X),
'$access_yap_flags'(19, X1),
'$transl_to_index_mode'(X1,X), !.
yap_flag(index,X) :-
'$transl_to_index_mode'(X1,X), !,
'$set_yap_flags'(19,X1).
yap_flag(index,X) :-
'$do_error'(domain_error(flag_value,index+X),yap_flag(index,X)).
% do or do not indexation
yap_flag(index_sub_term_search_depth,X) :-
var(X),
'$access_yap_flags'(23, X), !.
yap_flag(index_sub_term_search_depth,X) :-
integer(X),
X > 0,
'$set_yap_flags'(23,X).
yap_flag(index_sub_term_search_depth,X) :-
\+ integer(X),
'$do_error'(type_error(integer,X),yap_flag(index_sub_term_search_depth,X)).
yap_flag(index_sub_term_search_depth,X) :-
'$do_error'(domain_error(out_of_range,index_sub_term_search_depth+X),yap_flag(index_sub_term_search_depth,X)).
% tabling mode
yap_flag(tabling_mode,Options) :-
var(Options), !,
'$access_yap_flags'(20,Options).
yap_flag(tabling_mode,[]) :- !,
yap_flag(tabling_mode,default).
yap_flag(tabling_mode,[HOption|TOption]) :- !,
yap_flag(tabling_mode,TOption),
yap_flag(tabling_mode,HOption).
yap_flag(tabling_mode,Option) :-
'$transl_to_yap_flag_tabling_mode'(Flag,Option), !,
'$set_yap_flags'(20,Flag).
yap_flag(tabling_mode,Options) :-
'$do_error'(domain_error(flag_value,tabling_mode+Options),yap_flag(tabling_mode,Options)).
yap_flag(informational_messages,X) :- var(X), !,
yap_flag(verbose, X).
yap_flag(version,X) :-
var(X), !,
get_value('$version_name',X).
yap_flag(version,X) :-
'$do_error'(permission_error(modify,flag,version),yap_flag(version,X)).
/* ISO Core Revision DTR: new float flags
yap_flag(float_mantissa_digits,X) :-
var(X), !,
?????
yap_flag(float_mantissa_digits,X) :-
integer(X), X > 0, !,
'$do_error'(permission_error(modify,flag,float_mantissa_digits),yap_flag(float_mantissa_digits,X)).
yap_flag(float_mantissa_digits,X) :-
'$do_error'(domain_error(flag_value,float_mantissa_digits+X),yap_flag(float_mantissa_digits,X)).
yap_flag(float_epsilon,X) :-
var(X), !,
?????
yap_flag(float_epsilon,X) :-
float(X), X > 0, !,
'$do_error'(permission_error(modify,flag,float_epsilon),yap_flag(float_epsilon,X)).
yap_flag(float_epsilon,X) :-
'$do_error'(domain_error(flag_value,float_epsilon+X),yap_flag(float_epsilon,X)).
yap_flag(float_min_exponent,X) :-
var(X), !,
?????
yap_flag(float_min_exponent,X) :-
integer(X), X > 0, !,
'$do_error'(permission_error(modify,flag,float_min_exponent),yap_flag(float_min_exponent,X)).
yap_flag(float_epsilon,X) :-
'$do_error'(domain_error(flag_value,float_min_exponent+X),yap_flag(float_min_exponent,X)).
yap_flag(float_max_exponent,X) :-
var(X), !,
?????
yap_flag(float_max_exponent,X) :-
integer(X), X > 0, !,
'$do_error'(permission_error(modify,flag,float_max_exponent),yap_flag(flo
at_max_exponent,X)).
yap_flag(float_max_exponent,X) :-
'$do_error'(domain_error(flag_value,float_max_exponent+X),yap_flag(float_max_exponent,X)).
*/
yap_flag(n_of_integer_keys_in_db,X) :-
var(X), !,
'$resize_int_keys'(X).
yap_flag(n_of_integer_keys_in_db,X) :- integer(X), X > 0, !,
'$resize_int_keys'(X).
yap_flag(n_of_integer_keys_in_db,X) :-
'$do_error'(domain_error(flag_value,n_of_integer_keys_in_db+X),yap_flag(n_of_integer_keys_in_db,X)).
yap_flag(n_of_integer_keys_in_bb,X) :-
var(X), !,
'$resize_bb_int_keys'(X).
yap_flag(n_of_integer_keys_in_bb,X) :- integer(X), X > 0, !,
'$resize_bb_int_keys'(X).
yap_flag(n_of_integer_keys_in_bb,X) :-
'$do_error'(domain_error(flag_value,n_of_integer_keys_in_bb+X),yap_flag(n_of_integer_keys_in_bb,X)).
yap_flag(profiling,X) :- (var(X); X = on; X = off), !,
'$is_profiled'(X).
yap_flag(strict_iso,OUT) :-
var(OUT), !,
'$access_yap_flags'(9,X),
'$transl_to_on_off'(X,OUT).
yap_flag(strict_iso,on) :- !,
yap_flag(language,iso),
'$transl_to_on_off'(X,on),
'$set_yap_flags'(9,X).
yap_flag(strict_iso,off) :- !,
'$transl_to_on_off'(X,off),
'$set_yap_flags'(9,X).
yap_flag(strict_iso,X) :-
'$do_error'(domain_error(flag_value,strict_iso+X),yap_flag(strict_iso,X)).
yap_flag(variable_names_may_end_with_quotes,OUT) :-
var(OUT), !,
'$access_yap_flags'(21,X),
'$transl_to_on_off'(X,OUT).
yap_flag(variable_names_may_end_with_quotes,on) :- !,
'$transl_to_on_off'(X,on),
'$set_yap_flags'(21,X).
yap_flag(variable_names_may_end_with_quotes,off) :- !,
'$transl_to_on_off'(X,off),
'$set_yap_flags'(21,X).
yap_flag(variable_names_may_end_with_quotes,X) :-
'$do_error'(domain_error(flag_value,strict_iso+X),yap_flag(strict_iso,X)).
yap_flag(language,X) :-
var(X), !,
'$access_yap_flags'(8, X1),
'$trans_to_lang_flag'(X1,X).
yap_flag(language,X) :-
'$trans_to_lang_flag'(N,X), !,
'$set_yap_flags'(8,N),
'$adjust_language'(X).
yap_flag(language,X) :-
'$do_error'(domain_error(flag_value,language+X),yap_flag(language,X)).
yap_flag(discontiguous_warnings,X) :-
var(X), !,
style_check(?(Disc)),
( Disc = +discontiguous,
X = on
;
Disc = -discontiguous,
X = off
), !.
yap_flag(discontiguous_warnings,X) :-
'$transl_to_on_off'(_,X), !,
(X == on ->
style_check(discontiguous)
;
style_check(-discontiguous)
).
yap_flag(discontiguous_warnings,X) :-
'$do_error'(domain_error(flag_value,discontiguous_warnings+X),yap_flag(discontiguous_warnings,X)).
yap_flag(redefine_warnings,X) :-
var(X), !,
style_check(?(Disc)),
( Disc = +multiple,
X = on
;
Disc = -multiple,
X = off
), !.
yap_flag(redefine_warnings,X) :-
'$transl_to_on_off'(_,X), !,
(X == on ->
style_check(multiple)
;
style_check(-multiple)
).
yap_flag(redefine_warnings,X) :-
'$do_error'(domain_error(flag_value,redefine_warnings+X),yap_flag(redefine_warnings,X)).
yap_flag(chr_toplevel_show_store,X) :-
var(X), !,
'$nb_getval'('$chr_toplevel_show_store', X, fail).
yap_flag(chr_toplevel_show_store,X) :-
(X = true ; X = false), !,
nb_setval('$chr_toplevel_show_store',X).
yap_flag(chr_toplevel_show_store,X) :-
'$do_error'(domain_error(flag_value,chr_toplevel_show_store+X),yap_flag(chr_toplevel_show_store,X)).
yap_flag(qcompile,X) :-
var(X), !,
'$nb_getval'('$qcompile', X, X=never).
yap_flag(qcompile,X) :-
(X == never ; X == auto ; X == large ; X == part), !,
nb_setval('$qcompile',X).
yap_flag(qcompile,X) :-
'$do_error'(domain_error(flag_value,qcompile+X),yap_flag(qcompile,X)).
yap_flag(source,X) :-
var(X), !,
source_mode( X, X ).
yap_flag(source,X) :-
(X == off -> true ; X == on), !,
source_mode( _, X ).
yap_flag(source,X) :-
'$do_error'(domain_error(flag_value,source+X),yap_flag(source,X)).
yap_flag(open_expands_filename,Expand) :-
var(Expand), !,
'$default_expand'(Expand).
yap_flag(open_expands_filename,Expand) :-
'$set_default_expand'(Expand).
yap_flag(single_var_warnings,X) :-
var(X), !,
style_check(?(Disc)),
( Disc = +singletons,
X = on
;
Disc = -singletons,
X = off
), !.
yap_flag(single_var_warnings,X) :-
'$transl_to_on_off'(_,X), !,
(X == on ->
style_check(single_var)
;
style_check(-single_var)
).
yap_flag(single_var_warnings,X) :-
'$do_error'(domain_error(flag_value,single_var_warnings+X),yap_flag(single_var_warnings,X)).
yap_flag(system_options,X) :-
'$system_options'(X).
yap_flag(update_semantics,X) :-
var(X), !,
( '$log_upd'(I) -> '$convert_upd_sem'(I,X) ).
yap_flag(update_semantics,logical) :- !,
'$switch_log_upd'(1).
yap_flag(update_semantics,logical_assert) :- !,
'$switch_log_upd'(2).
yap_flag(update_semantics,immediate) :- !,
'$switch_log_upd'(0).
yap_flag(update_semantics,X) :-
'$do_error'(domain_error(flag_value,update_semantics+X),yap_flag(update_semantics,X)).
yap_flag(toplevel_hook,G) :-
var(G), !,
( recorded('$toplevel_hooks',G,_) -> G ; G = fail ).
yap_flag(toplevel_hook,G) :- !,
'$set_toplevel_hook'(G).
yap_flag(typein_module,X) :-
var(X), !,
'$current_module'(X).
yap_flag(typein_module,X) :-
module(X).
yap_flag(write_strings,OUT) :-
var(OUT), !,
'$access_yap_flags'(13,X),
'$transl_to_on_off'(X,OUT).
yap_flag(write_strings,on) :- !,
'$transl_to_on_off'(X,on),
'$set_yap_flags'(13,X).
yap_flag(write_strings,off) :- !,
'$transl_to_on_off'(X,off),
'$set_yap_flags'(13,X).
yap_flag(write_strings,X) :-
'$do_error'(domain_error(flag_value,write_strings+X),yap_flag(write_strings,X)).
yap_flag(arithmetic_exceptions,OUT) :-
var(OUT), !,
'$access_yap_flags'(12,X),
'$transl_to_true_false'(X,OUT).
yap_flag(arithmetic_exceptions,true) :- !,
'$transl_to_true_false'(X,true),
'$set_yap_flags'(12,X).
yap_flag(arithmetic_exceptions,false) :- !,
'$transl_to_true_false'(X,false),
'$set_yap_flags'(12,X).
yap_flag(arithmetic_exceptions,X) :-
'$do_error'(domain_error(flag_value,arithmetic_exceptions+X),yap_flag(arithmetic_exceptions,[true,false])).
yap_flag(prompt_alternatives_on,OUT) :-
var(OUT), !,
'$prompt_alternatives_on'(OUT).
yap_flag(prompt_alternatives_on,determinism) :- !,
'$purge_clauses'('$prompt_alternatives_on'(_),prolog),
'$compile'('$prompt_alternatives_on'(determinism),0,'$prompt_alternatives_on'(determinism),prolog).
yap_flag(prompt_alternatives_on,groundness) :- !,
'$purge_clauses'('$prompt_alternatives_on'(_),prolog),
'$compile'('$prompt_alternatives_on'(groundness),0,'$prompt_alternatives_on'(groundness),prolog).
yap_flag(prompt_alternatives_on,X) :-
'$do_error'(domain_error(flag_value,prompt_alternatives_on+X),yap_flag(prompt_alternatives_on,X)).
yap_flag(stack_dump_on_error,OUT) :-
var(OUT), !,
'$access_yap_flags'(17,X),
'$transl_to_on_off'(X,OUT).
yap_flag(stack_dump_on_error,on) :- !,
'$transl_to_on_off'(X,on),
'$set_yap_flags'(17,X).
yap_flag(stack_dump_on_error,off) :- !,
'$transl_to_on_off'(X,off),
'$set_yap_flags'(17,X).
yap_flag(stack_dump_on_error,X) :-
'$do_error'(domain_error(flag_value,stack_dump_on_error+X),yap_flag(stack_dump_on_error,X)).
yap_flag(user_input,OUT) :-
var(OUT), !,
stream_property(OUT,alias(user_input)).
yap_flag(user_input,Stream) :-
set_stream(Stream, alias(user_input)).
yap_flag(user_output,OUT) :-
var(OUT), !,
stream_property(OUT,alias(user_output)).
yap_flag(user_output,Stream) :-
set_stream(Stream, alias(user_output)).
yap_flag(user_error,OUT) :-
var(OUT), !,
stream_property(OUT,alias(user_error)).
yap_flag(user_error,Stream) :-
set_stream(Stream, alias(user_error)).
yap_flag(debugger_print_options,OUT) :-
var(OUT),
recorded('$print_options','$debugger'(OUT),_), !.
yap_flag(debugger_print_options,Opts) :-
recorda('$print_options','$debugger'(Opts),_).
:- recorda('$print_options','$debugger'([quoted(true),numbervars(true),portrayed(true),max_depth(10)]),_).
yap_flag(toplevel_print_options,OUT) :-
var(OUT),
recorded('$print_options','$toplevel'(OUT),_), !.
yap_flag(toplevel_print_options,Opts) :-
recorda('$print_options','$toplevel'(Opts),_).
:- recorda('$print_options','$toplevel'([quoted(true),numbervars(true),portrayed(true)]),_).
yap_flag(host_type,X) :-
'$host_type'(X).
yap_flag(host_type,X) :-
'$host_type'(X).
yap_flag(argv,X) :-
'$argv'(X).
yap_flag(os_argv,X) :-
'$os_argv'(X).
yap_flag(float_format,X) :-
var(X), !,
'$float_format'(X).
yap_flag(float_format,X) :-
atom(X), !,
'$float_format'(X).
yap_flag(float_format,X) :-
'$do_error'(type_error(atom,X),yap_flag(float_format,X)).
yap_flag(max_workers,X) :-
var(X), !,
'$max_workers'(X).
yap_flag(max_workers,X) :-
integer(X), X > 0, !,
'$do_error'(permission_error(modify,flag,max_workers),yap_flag(max_workers,X)).
yap_flag(max_workers,X) :-
'$do_error'(domain_error(flag_value,max_workers+X),yap_flag(max_workers,X)).
yap_flag(max_threads,X) :-
var(X), !,
'$max_threads'(X).
yap_flag(max_threads,X) :-
integer(X), X > 0, !,
'$do_error'(permission_error(modify,flag,max_threads),yap_flag(max_threads,X)).
yap_flag(max_threads,X) :-
'$do_error'(domain_error(flag_value,max_threads+X),yap_flag(max_threads,X)).
% should match definitions in Yap.h
'$transl_to_index_mode'(0, off).
'$transl_to_index_mode'(1, single).
'$transl_to_index_mode'(2, compact).
'$transl_to_index_mode'(3, multi).
'$transl_to_index_mode'(3, on). % default is multi argument indexing
'$transl_to_index_mode'(4, max).
% should match with code in stdpreds.c
'$transl_to_yap_flag_tabling_mode'(0,default).
'$transl_to_yap_flag_tabling_mode'(1,batched).
'$transl_to_yap_flag_tabling_mode'(2,local).
'$transl_to_yap_flag_tabling_mode'(3,exec_answers).
'$transl_to_yap_flag_tabling_mode'(4,load_answers).
'$transl_to_yap_flag_tabling_mode'(5,local_trie).
'$transl_to_yap_flag_tabling_mode'(6,global_trie).
'$transl_to_yap_flag_tabling_mode'(7,coinductive).
'$system_options'(big_numbers) :-
'$has_bignums'.
'$system_options'(coroutining) :-
'$yap_has_coroutining'.
'$system_options'(depth_limit) :-
\+ '$undefined'(get_depth_limit(_), prolog).
'$system_options'(low_level_tracer) :-
\+ '$undefined'(start_low_level_trace, prolog).
'$system_options'(or_parallelism) :-
\+ '$undefined'('$c_yapor_start', prolog).
'$system_options'(rational_trees) :-
'$yap_has_rational_trees'.
'$system_options'(readline) :-
'$swi_current_prolog_flag'(readline, true).
'$system_options'(tabling) :-
\+ '$undefined'('$c_table'(_,_,_), prolog).
'$system_options'(threads) :-
\+ '$undefined'('$thread_join'(_), prolog).
'$system_options'(wam_profiler) :-
\+ '$undefined'(reset_op_counters, prolog).
'$yap_system_flag'(agc_margin).
'$yap_system_flag'(arithmetic_exceptions).
'$yap_system_flag'(argv).
'$yap_system_flag'(chr_toplevel_show_store).
'$yap_system_flag'(debugger_print_options).
'$yap_system_flag'(discontiguous_warnings).
'$yap_system_flag'(dollar_as_lower_case).
% V = fast ;
% '$yap_system_flag'(file_name_variables).
% '$yap_system_flag'(fileerrors ).
'$yap_system_flag'(float_format).
% V = float_mantissa_digits ;
% V = float_epsilon ;
% V = float_min_exponent ;
% V = float_max_exponent ;
'$yap_system_flag'(gc ).
'$yap_system_flag'(gc_margin ).
'$yap_system_flag'(gc_trace ).
% V = hide ;
'$yap_system_flag'(host_type ).
'$yap_system_flag'(index).
'$yap_system_flag'(index_sub_term_search_depth).
'$yap_system_flag'(tabling_mode).
'$yap_system_flag'(informational_messages).
'$yap_system_flag'(language).
'$yap_system_flag'(max_workers).
'$yap_system_flag'(max_threads).
'$yap_system_flag'(n_of_integer_keys_in_db).
'$yap_system_flag'(open_expands_filename).
'$yap_system_flag'(os_argv).
'$yap_system_flag'(profiling).
'$yap_system_flag'(prompt_alternatives_on).
'$yap_system_flag'(redefine_warnings).
'$yap_system_flag'(single_var_warnings).
'$yap_system_flag'(source).
'$yap_system_flag'(stack_dump_on_error).
'$yap_system_flag'(strict_iso).
'$yap_system_flag'(syntax_errors).
'$yap_system_flag'(system_options).
'$yap_system_flag'(toplevel_hook).
'$yap_system_flag'(toplevel_print_options).
'$yap_system_flag'(typein_module).
'$yap_system_flag'(update_semantics).
'$yap_system_flag'(user_error).
'$yap_system_flag'(user_input).
'$yap_system_flag'(user_output).
'$yap_system_flag'(variable_names_may_end_with_quotes).
'$yap_system_flag'(version).
'$yap_system_flag'(write_strings).
'$show_yap_flag_opts'(V,Out) :-
'$yap_system_flag'(V),
yap_flag(V, Out).
'$trans_to_lang_flag'(0,cprolog).
'$trans_to_lang_flag'(1,iso).
'$trans_to_lang_flag'(2,sicstus).
'$adjust_language'(cprolog) :-
% '$switch_log_upd'(0),
@ -686,218 +69,20 @@ yap_flag(max_threads,X) :-
unknown(_,error).
'$convert_upd_sem'(0,immediate).
'$convert_upd_sem'(1,logical).
'$convert_upd_sem'(2,logical_assert).
'$transl_to_true_false'(0,false).
'$transl_to_true_false'(1,true).
'$transl_to_on_off'(0,off).
'$transl_to_on_off'(1,on).
'$transl_to_rounding_function'(0,toward_zero).
'$transl_to_rounding_function'(1,down).
'$yap_flag_show_gc_tracing'(true, _, _, on) :- !.
'$yap_flag_show_gc_tracing'(_, true, _, verbose) :- !.
'$yap_flag_show_gc_tracing'(_, _, on, very_verbose) :- !.
'$yap_flag_show_gc_tracing'(_, _, _, off).
'$flag_check_alias'(OUT, Alias) :-
stream_property(OUT,alias(Alias)), !.
/** @pred current_prolog_flag(? _Flag_,- _Value_) is iso
Obtain the value for a YAP Prolog flag. Equivalent to calling
yap_flag/2 with the second argument unbound, and unifying the
returned second argument with _Value_.
*/
current_prolog_flag(V,Out) :-
var(V), !,
yap_flag(V,NOut),
NOut = Out.
current_prolog_flag(V,Out) :-
atom(V), !,
yap_flag(V,NOut),
NOut = Out.
current_prolog_flag(M:V,Out) :-
current_module(M), atom(V), !,
yap_flag(M:V,NOut),
NOut = Out.
current_prolog_flag(V,Out) :-
'$do_error'(type_error(atom,V),current_prolog_flag(V,Out)).
/** @pred set_prolog_flag(+ _Flag_,+ _Value_) is iso
Set the value for YAP Prolog flag `Flag`. Equivalent to
calling yap_flag/2 with both arguments bound.
*/
set_prolog_flag(F,V) :-
var(F), !,
'$do_error'(instantiation_error,set_prolog_flag(F,V)).
set_prolog_flag(F,V) :-
var(V), !,
'$do_error'(instantiation_error,set_prolog_flag(F,V)).
set_prolog_flag(M:V,Out) :-
current_module(M), atom(V), !,
'$swi_set_prolog_flag'(M:V,Out).
set_prolog_flag(F,V) :-
\+ atom(F), !,
'$do_error'(type_error(atom,F),set_prolog_flag(F,V)).
set_prolog_flag(F, Val) :-
'$swi_current_prolog_flag'(F, _), !,
'$swi_set_prolog_flag'(F, Val).
set_prolog_flag(F,V) :-
'$yap_system_flag'(F), !,
yap_flag(F,V).
set_prolog_flag(F,V) :-
'$swi_current_prolog_flag'(user_flags, UFlag),
(
UFlag = silent ->
create_prolog_flag(F, V, [])
;
UFlag = warning ->
print_message(warning,existence_error(prolog_flag, F)),
create_prolog_flag(F, V, [])
;
UFlag = error ->
'$do_error'(existence_error(prolog_flag, F),set_prolog_flag(F,V))
).
/** @pred prolog_flag(? _Flag_,- _OldValue_,+ _NewValue_)
Obtain the value for a YAP Prolog flag and then set it to a new
value. Equivalent to first calling current_prolog_flag/2 with the
second argument _OldValue_ unbound and then calling
set_prolog_flag/2 with the third argument _NewValue_.
*/
prolog_flag(F, Old, New) :-
var(F), !,
'$do_error'(instantiation_error,prolog_flag(F,Old,New)).
prolog_flag(F, Old, New) :-
current_prolog_flag(F, Old),
set_prolog_flag(F, New).
prolog_flag(F, Old) :-
current_prolog_flag(F, Old).
/** @pred create_prolog_flag(+ _Flag_,+ _Value_,+ _Options_)
Create a new YAP Prolog flag. _Options_ include
* `type(+_Type_)` with _Type_ one of `boolean`, `integer`, `float`, `atom`
and `term` (that is, any ground term)
Create a new YAP Prolog flag. _Options_ include `type(+Type)` and `access(+Access)` with _Access_
one of `read_only` or `read_write` and _Type_ one of `boolean`, `integer`, `float`, `atom`
and `term` (that is, no type).
* `access(+_Access_)` with _Access_ one of `read_only` or `read_write`
* `keeep(+_Keep_) protect existing flag.
*/
create_prolog_flag(Name, Value, Options) :-
'$check_flag_name'(Name, create_prolog_flag(Name, Value, Options)),
'$check_flag_options'(Options, Domain, RW, create_prolog_flag(Name, Value, Options)),
'$check_flag_value'(Value, Domain, create_prolog_flag(Name, Value, Options)),
retractall(prolog:'$user_defined_flag'(Name,_,_,_)),
assert(prolog:'$user_defined_flag'(Name,Domain,RW,Value)).
'$check_flag_name'(V, G) :-
var(V),
'$do_error'(instantiation_error,G).
'$check_flag_name'(Name, _) :-
atom(Name), !.
'$check_flag_name'(Name, G) :-
'$do_error'(type_error(atom,Name),G).
'$check_flag_options'(O, _, _, G) :-
var(O),
'$do_error'(instantiation_error,G).
'$check_flag_options'([], _, read_write, _) :- !.
'$check_flag_options'([O1|Os], Domain, RW, G) :- !,
'$check_flag_optionsl'([O1|Os], Domain, RW, G).
'$check_flag_options'(O, _, _, G) :-
'$do_error'(type_error(list,O),G).
'$check_flag_optionsl'([], _, read_write, _G).
'$check_flag_optionsl'([V|_Os], _Domain, _RW, G) :-
var(V),
'$do_error'(instantiation_error,G).
'$check_flag_optionsl'([type(Type)|Os], Domain, RW, G) :- !,
'$check_flag_type'(Type, Domain, G),
'$check_flag_optionsl'(Os, _, RW, G).
'$check_flag_optionsl'([access(Access)|Os], Domain, RW, G) :- !,
'$check_flag_access'(Access, RW, G),
'$check_flag_optionsl'(Os, Domain, _, G).
'$check_flag_optionsl'(Os, _Domain, _RW, G) :-
'$do_error'(domain_error(create_prolog_flag,Os),G).
'$check_flag_type'(V, _, G) :-
var(V),
'$do_error'(instantiation_error,G).
'$check_flag_type'(boolean, boolean, _) :- !.
'$check_flag_type'(integer, integer, _) :- !.
'$check_flag_type'(float, float, _) :- !.
'$check_flag_type'(atom, atom, _) :- !.
'$check_flag_type'(term, term, _) :- !.
'$check_flag_type'(Atom, _, G) :-
'$do_error'(domain_error(create_prolog_flag_option(type),Atom),G).
'$check_flag_access'(V, _, G) :-
var(V),
'$do_error'(instantiation_error,G).
'$check_flag_access'(read_write, read_write, _) :- !.
'$check_flag_access'(read_only, read_only, _) :- !.
'$check_flag_access'(Atom, _, G) :-
'$do_error'(domain_error(create_prolog_flag_option(access),Atom),G).
'$user_flag_value'(F, Val) :-
var(Val), !,
'$user_defined_flag'(F,_,_,Val).
'$user_flag_value'(F, Val) :-
atomic(Val), !,
prolog:'$user_defined_flag'(F,Domain,RW,V0),
(
Val == V0
->
true
;
RW = read_only
->
'$do_error'(permission_error(modify,flag,F),yap_flag(F,Val))
;
'$check_flag_value'(Val, Domain, yap_flag(F,Val)),
retractall(prolog:'$user_defined_flag'(F,_,_,_)),
assert(prolog:'$user_defined_flag'(F,Domain,RW,Val))
).
'$user_flag_value'(F, Val) :-
'$do_error'(type_error(atomic,Val),yap_flag(F,Val)).
'$check_flag_value'(Value, _, G) :-
\+ ground(Value), !,
'$do_error'(instantiation_error,G).
'$check_flag_value'(Value, Domain, _G) :-
var(Domain), !,
'$flag_domain_from_value'(Value, Domain).
'$check_flag_value'(_, term, _) :- !.
'$check_flag_value'(Value, atom, _) :-
atom(Value), !.
'$check_flag_value'(Value, integer, _) :-
integer(Value), !.
'$check_flag_value'(Value, float, _) :-
float(Value), !.
'$check_flag_value'(true, boolean, _) :- !.
'$check_flag_value'(false, boolean, _) :- !.
'$check_flag_value'(Value, Domain, G) :-
'$do_error'(domain_error(Domain,Value),G).
'$flag_domain_from_value'( Value, Type ),
'$create_prolog_flag'(Name, Value, [type(Type)|Options]).
'$flag_domain_from_value'(true, boolean) :- !.
'$flag_domain_from_value'(false, boolean) :- !.
@ -906,47 +91,6 @@ create_prolog_flag(Name, Value, Options) :-
'$flag_domain_from_value'(Value, atom) :- atom(Value), !.
'$flag_domain_from_value'(_, term).
/**
@pred source_mode(- _O_,+ _N_)
The state of source mode can either be on or off. When the source mode
is on, all clauses are kept both as compiled code and in a "hidden"
database. _O_ is unified with the previous state and the mode is set
according to _N_.
*/
% if source_mode is on, then the source for the predicates
% is stored with the code
source_mode(Old,New) :-
'$access_yap_flags'(11,X),
'$transl_to_on_off'(X,Old),
'$transl_to_on_off'(XN,New),
'$set_yap_flags'(11,XN).
/** @pred source
After executing this goal, YAP keeps information on the source
of the predicates that will be consulted. This enables the use of
[listing/0](@ref listing), `listing/1` and [clause/2](@ref clause) for those
clauses.
The same as `source_mode(_,on)` or as declaring all newly defined
static procedures as `public`.
*/
source :- '$set_yap_flags'(11,1).
/** @pred no_source
The opposite to `source`.
The same as `source_mode(_,off)`.
*/
no_source :- '$set_yap_flags'(11,0).
/**
@}
*/

View File

@ -22,7 +22,6 @@
@{
*/
:- system_module( '$_init', [!/0,
(:-)/1,
(?-)/1,
@ -109,17 +108,20 @@ otherwise.
:- '$handle_throw'(_,_,_), !.
:- $all_current_modules(M), yap_flag(M:unknown, error) ; true.
:- bootstrap('errors.yap').
:- bootstrap('lists.yap').
:- bootstrap('consult.yap').
:- bootstrap('preddecls.yap').
:- bootstrap('preddyns.yap').
:- bootstrap('atoms.yap').
:- bootstrap('os.yap').
:- bootstrap('absf.yap').
:-'$swi_set_prolog_flag'(verbose, normal).
:-set_prolog_flag(verbose, normal).
:- [ 'directives.yap',
'utils.yap',
@ -127,7 +129,7 @@ otherwise.
'arith.yap',
'flags.yap'
].
:- [ 'preds.yap',
'modules.yap'
].
@ -185,6 +187,41 @@ version(yap,[6,3]).
:- ['undefined.yap'].
:- multifile user:portray_message/2.
:- dynamic user:portray_message/2.
/** @pred _CurrentModule_:goal_expansion(+ _G_,+ _M_,- _NG_), user:goal_expansion(+ _G_,+ _M_,- _NG_)
YAP now supports goal_expansion/3. This is an user-defined
procedure that is called after term expansion when compiling or
asserting goals for each sub-goal in a clause. The first argument is
bound to the goal and the second to the module under which the goal
_G_ will execute. If goal_expansion/3 succeeds the new
sub-goal _NG_ will replace _G_ and will be processed in the same
way. If goal_expansion/3 fails the system will use the default
rules.
*/
:- multifile user:goal_expansion/3.
:- dynamic user:goal_expansion/3.
:- multifile user:goal_expansion/2.
:- dynamic user:goal_expansion/2.
:- multifile system:goal_expansion/2.
:- dynamic system:goal_expansion/2.
:- multifile goal_expansion/2.
:- dynamic goal_expansion/2.
:- use_module('messages.yap').
:- use_module('hacks.yap').
:- use_module('attributes.yap').
@ -197,13 +234,11 @@ version(yap,[6,3]).
:- use_module('../swi/library/menu.pl').
:- use_module('../library/ypp.yap').
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
:- '$change_type_of_char'(36,7). % Make $ a symbol character
:- '$swi_set_prolog_flag'(generate_debug_info,true).
:- set_prolog_flag(generate_debug_info,true).
:- recorda('$dialect',yap,_).
@ -233,36 +268,6 @@ yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
:- module(user).
/** @pred _CurrentModule_:goal_expansion(+ _G_,+ _M_,- _NG_), user:goal_expansion(+ _G_,+ _M_,- _NG_)
YAP now supports goal_expansion/3. This is an user-defined
procedure that is called after term expansion when compiling or
asserting goals for each sub-goal in a clause. The first argument is
bound to the goal and the second to the module under which the goal
_G_ will execute. If goal_expansion/3 succeeds the new
sub-goal _NG_ will replace _G_ and will be processed in the same
way. If goal_expansion/3 fails the system will use the default
rules.
*/
:- multifile goal_expansion/3.
:- dynamic goal_expansion/3.
:- multifile goal_expansion/2.
:- dynamic goal_expansion/2.
:- multifile system:goal_expansion/2.
:- dynamic system:goal_expansion/2.
:- multifile goal_expansion/2.
:- dynamic goal_expansion/2.
/** @pred _CurrentModule_:term_expansion( _T_,- _X_), user:term_expansion( _T_,- _X_)
@ -312,10 +317,6 @@ modules defining clauses for it too.
:- dynamic user:message_hook/3.
:- multifile user:portray_message/2.
:- dynamic user:portray_message/2.
/** @pred exception(+ _Exception_, + _Context_, - _Action_)
@ -338,12 +339,10 @@ If this hook predicate succeeds it must instantiate the _Action_ argument to th
:- dynamic user:exception/3.
:- yap_flag(unknown,error).
:- yap_flag(user:unknown,error).
:- stream_property(user_input, tty(true)) -> set_prolog_flag(readline, true) ; true.
/**
@}
*/

View File

@ -117,7 +117,7 @@ listing(Stream, [MV|MVs]) :- !,
).
%
% at this point we are ground and wew know who we want to list.
% at this point we are ground and we know who we want to list.
%
'$listing'(Name, Arity, M, Stream) :-
% skip by default predicates starting with $
@ -131,7 +131,7 @@ listing(Stream, [MV|MVs]) :- !,
'$do_error'(domain_error(predicate_spec,Name),listing(Name)).
'$list_clauses'(Stream, M, Pred) :-
'$flags'(Pred,M,Flags,Flags),
'$predicate_flags'(Pred,M,Flags,Flags),
(Flags /\ 0x48602000 =\= 0
->
nl(Stream),
@ -192,7 +192,7 @@ listing(Stream, [MV|MVs]) :- !,
nl( Stream ),
fail.
'$list_clauses'(Stream, M, Pred) :-
'$flags'(Pred,M,Flags,Flags),
'$predicate_flags'(Pred,M,Flags,Flags),
% has to be dynamic, source, or log update.
Flags /\ 0x08402000 =\= 0,
'$clause'(Pred, M, Body, _),