Logtalk 2.23.1 files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1260 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% Logtalk - Object oriented extension to Prolog
|
||||
% Release 2.23.0
|
||||
% Release 2.23.1
|
||||
%
|
||||
% Copyright (c) 1998-2005 Paulo Moura. All Rights Reserved.
|
||||
%
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
:- dynamic('$lgt_pp_warnings_top_argument_'/1). % '$lgt_pp_warnings_top_argument_'(Term)
|
||||
:- dynamic('$lgt_pp_comp_warnings_counter_'/1). % '$lgt_pp_comp_warnings_counter_'(Counter)
|
||||
:- dynamic('$lgt_pp_load_warnings_counter_'/1). % '$lgt_pp_comp_warnings_counter_'(Counter)
|
||||
:- dynamic('$lgt_pp_load_warnings_counter_'/1). % '$lgt_pp_load_warnings_counter_'(Counter)
|
||||
|
||||
|
||||
|
||||
@@ -180,15 +180,12 @@
|
||||
|
||||
|
||||
Obj::Pred :-
|
||||
'$lgt_ctx_ctx'(Ctx, user, user, Obj, '$lgt_po_user0_', []),
|
||||
'$lgt_tr_msg'(Pred, Obj, Call, Ctx),
|
||||
catch(
|
||||
(('$lgt_dbg_debugging_', '$lgt_debugging_'(Obj)) ->
|
||||
'$lgt_dbg_goal'(Obj::Pred, Call, Ctx)
|
||||
;
|
||||
call(Call)),
|
||||
Error,
|
||||
'$lgt_runtime_error_handler'(Error)).
|
||||
'$lgt_tr_msg'(Pred, Obj, Call, user),
|
||||
(('$lgt_dbg_debugging_', '$lgt_debugging_'(Obj)) ->
|
||||
'$lgt_ctx_ctx'(Ctx, user, user, Obj, '$lgt_po_user0_', []),
|
||||
catch('$lgt_dbg_goal'(Obj::Pred, Call, Ctx), Error, '$lgt_runtime_error_handler'(Error))
|
||||
;
|
||||
catch(Call, Error, '$lgt_runtime_error_handler'(Error))).
|
||||
|
||||
|
||||
|
||||
@@ -196,23 +193,40 @@ Obj::Pred :-
|
||||
%
|
||||
% top-level runtime error handler
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, TFunctor1/TArity1), TFunctor2/TArity2)) :-
|
||||
catch('$lgt_reverse_predicate_functor'(TFunctor1, TArity1, Entity, Type, Functor1, Arity1), _, fail),
|
||||
catch('$lgt_reverse_predicate_functor'(TFunctor2, TArity2, Entity, Type, Functor2, Arity2), _, fail),
|
||||
throw(error(existence_error(procedure, Functor1/Arity1), culprit(Type, Entity, Functor2/Arity2))).
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, TFunctor1/TArity1), context(TFunctor2/TArity2, _))) :- % SWI-Prolog
|
||||
'$lgt_reverse_predicate_functor'(TFunctor1, TArity1, Entity, Type, Functor1, Arity1),
|
||||
'$lgt_reverse_predicate_functor'(TFunctor2, TArity2, Entity, Type, Functor2, Arity2),
|
||||
throw(error(existence_error(procedure, Functor1/Arity1), context(Type, Entity, Functor2/Arity2))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, TFunctor1/TArity1), TFunctor2/TArity2)) :- % GNU Prolog
|
||||
'$lgt_reverse_predicate_functor'(TFunctor1, TArity1, Entity, Type, Functor1, Arity1),
|
||||
'$lgt_reverse_predicate_functor'(TFunctor2, TArity2, Entity, Type, Functor2, Arity2),
|
||||
throw(error(existence_error(procedure, Functor1/Arity1), context(Type, Entity, Functor2/Arity2))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, TFunctor/TArity), _)) :-
|
||||
catch('$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity), _, fail),
|
||||
throw(error(existence_error(procedure, Functor/Arity), culprit(Type, Entity, _))).
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, ModTFunctor/TArity), _)) :- % CIAO
|
||||
atom_concat('user:', TFunctor, ModTFunctor),
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, ':'(_, TFunctor/TArity)), _)) :-
|
||||
catch('$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity), _, fail),
|
||||
throw(error(existence_error(procedure, Functor/Arity), culprit(Type, Entity, _))).
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(existence_error(procedure, TCompound), _)) :-
|
||||
functor(TCompound, TFunctor, TArity),
|
||||
catch('$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity), _, fail),
|
||||
throw(error(existence_error(procedure, Functor/Arity), culprit(Type, Entity, _))).
|
||||
'$lgt_runtime_error_handler'(error(existence_error(_, _, procedure, ':'(_, TFunctor/TArity), _), _)) :- % SICStus Prolog
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(undefined_predicate(TFunctor, TArity, _), _, _)) :- % XSB
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(undefined_predicate(TFunctor/TArity)) :- % B-Prolog
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity),
|
||||
throw(error(existence_error(procedure, Functor/Arity), context(Type, Entity, _))).
|
||||
|
||||
'$lgt_runtime_error_handler'(error(logtalk_debugger_aborted)) :-
|
||||
write('Debugging session aborted by user. Debugger still on.'), nl,
|
||||
@@ -948,7 +962,7 @@ logtalk_compile(Entity, Flags) :-
|
||||
'$lgt_check_compiler_flags'(Flags),
|
||||
'$lgt_set_compiler_flags'(Flags),
|
||||
'$lgt_compile_entity'(Entity, Flags),
|
||||
'$lgt_report_warnings_counter'(logtalk_compile(Entity, Flags))),
|
||||
'$lgt_report_warning_numbers'(logtalk_compile(Entity, Flags))),
|
||||
Error,
|
||||
('$lgt_reset_warnings_counter',
|
||||
throw(error(Error, logtalk_compile(Entity, Flags))))).
|
||||
@@ -960,7 +974,7 @@ logtalk_compile(Entities, Flags) :-
|
||||
'$lgt_check_compiler_flags'(Flags),
|
||||
'$lgt_set_compiler_flags'(Flags),
|
||||
'$lgt_compile_entities'(Entities, Flags),
|
||||
'$lgt_report_warnings_counter'(logtalk_compile(Entities, Flags))),
|
||||
'$lgt_report_warning_numbers'(logtalk_compile(Entities, Flags))),
|
||||
Error,
|
||||
('$lgt_reset_warnings_counter',
|
||||
throw(error(Error, logtalk_compile(Entities, Flags))))).
|
||||
@@ -998,20 +1012,44 @@ logtalk_compile(Entities, Flags) :-
|
||||
asserta('$lgt_pp_load_warnings_counter_'(New)).
|
||||
|
||||
|
||||
'$lgt_report_warnings_counter'(Term) :-
|
||||
'$lgt_report_warning_numbers'(Term) :-
|
||||
retract('$lgt_pp_warnings_top_argument_'(Term)),
|
||||
retract('$lgt_pp_comp_warnings_counter_'(CCounter)),
|
||||
retract('$lgt_pp_load_warnings_counter_'(LCounter)),
|
||||
'$lgt_compiler_flag'(report, on),
|
||||
Counter is CCounter + LCounter,
|
||||
(Counter =:= 0 -> write('(0 warnings)');
|
||||
LCounter =:= 0 -> write('('), write(CCounter), write(' compilation warnings)');
|
||||
CCounter =:= 0 -> write('('), write(LCounter), write(' loading warnings)');
|
||||
write('('), write(CCounter), write(' compilation warnings and '),
|
||||
write(LCounter), write(' loading warnings)')), nl,
|
||||
'$lgt_write_warning_numbers'(Counter, CCounter, LCounter),
|
||||
!.
|
||||
|
||||
'$lgt_report_warnings_counter'(_).
|
||||
'$lgt_report_warning_numbers'(_).
|
||||
|
||||
|
||||
'$lgt_write_warning_numbers'(0, _, _) :-
|
||||
!,
|
||||
write('(0 warnings)'), nl.
|
||||
|
||||
'$lgt_write_warning_numbers'(_, 0, LCounter) :-
|
||||
!,
|
||||
write('('), write(LCounter), write(' loading '),
|
||||
'$lgt_write_warnings_word'(LCounter), write(')'), nl.
|
||||
|
||||
'$lgt_write_warning_numbers'(_, CCounter, 0) :-
|
||||
!,
|
||||
write('('), write(CCounter), write(' compilation '),
|
||||
'$lgt_write_warnings_word'(CCounter), write(')'), nl.
|
||||
|
||||
'$lgt_write_warning_numbers'(_, CCounter, LCounter) :-
|
||||
write('('), write(CCounter), write(' compilation '),
|
||||
'$lgt_write_warnings_word'(CCounter), write(' and '),
|
||||
write(LCounter), write(' loading '),
|
||||
'$lgt_write_warnings_word'(LCounter), write(')'), nl.
|
||||
|
||||
|
||||
'$lgt_write_warnings_word'(Number) :-
|
||||
Number =:= 1 ->
|
||||
write(warning)
|
||||
;
|
||||
write(warnings).
|
||||
|
||||
|
||||
|
||||
@@ -1166,7 +1204,7 @@ logtalk_load(Entity, Flags) :-
|
||||
'$lgt_check_compiler_flags'(Flags),
|
||||
'$lgt_set_compiler_flags'(Flags),
|
||||
'$lgt_load_entity'(Entity, Flags),
|
||||
'$lgt_report_warnings_counter'(logtalk_load(Entity, Flags))),
|
||||
'$lgt_report_warning_numbers'(logtalk_load(Entity, Flags))),
|
||||
Error,
|
||||
('$lgt_reset_warnings_counter',
|
||||
throw(error(Error, logtalk_load(Entity, Flags))))).
|
||||
@@ -1178,7 +1216,7 @@ logtalk_load(Entities, Flags) :-
|
||||
'$lgt_check_compiler_flags'(Flags),
|
||||
'$lgt_set_compiler_flags'(Flags),
|
||||
'$lgt_load_entities'(Entities, Flags),
|
||||
'$lgt_report_warnings_counter'(logtalk_load(Entities, Flags))),
|
||||
'$lgt_report_warning_numbers'(logtalk_load(Entities, Flags))),
|
||||
Error,
|
||||
('$lgt_reset_warnings_counter',
|
||||
throw(error(Error, logtalk_load(Entities, Flags))))).
|
||||
@@ -1249,7 +1287,7 @@ current_logtalk_flag(Flag, Value) :-
|
||||
'$lgt_default_flag'(Flag, Value),
|
||||
\+ '$lgt_current_flag_'(Flag, _).
|
||||
|
||||
current_logtalk_flag(version, version(2, 23, 0)).
|
||||
current_logtalk_flag(version, version(2, 23, 1)).
|
||||
|
||||
|
||||
|
||||
@@ -1298,42 +1336,22 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
nonvar(Arity),
|
||||
!,
|
||||
functor(Pred, Functor, Arity),
|
||||
'$lgt_current_object_'(Obj, _, Dcl, _, _, _),
|
||||
'$lgt_once'(Dcl, Pred, PScope, _, _, SCtn, _),
|
||||
once((\+ \+ PScope = Scope; Sender = SCtn)).
|
||||
once('$lgt_visible_predicate'(Obj, Pred, Sender, Scope)).
|
||||
|
||||
'$lgt_current_predicate'(Obj, Functor/Arity, Sender, Scope) :-
|
||||
'$lgt_current_object_'(Obj, _, Dcl, _, _, _),
|
||||
findall(
|
||||
Functor/Arity - (PScope, SCtn),
|
||||
('$lgt_call'(Dcl, Pred, PScope, _, _, SCtn, _),
|
||||
once((\+ \+ PScope = Scope; Sender = SCtn)),
|
||||
functor(Pred, Functor, Arity)),
|
||||
setof(
|
||||
Functor/Arity,
|
||||
(Pred, Scope)^('$lgt_visible_predicate'(Obj, Pred, Sender, Scope), functor(Pred, Functor, Arity)),
|
||||
Preds),
|
||||
'$lgt_cp_filter'(Preds, Filtered),
|
||||
'$lgt_member'(Functor/Arity - (PScope, SCtn), Filtered).
|
||||
'$lgt_member'(Functor/Arity, Preds).
|
||||
|
||||
|
||||
% '$lgt_cp_filter'(+list, -list)
|
||||
%
|
||||
% removes duplicated and redeclared predicates
|
||||
% '$lgt_visible_predicate'(@object_identifier, ?callable, @object_identifier, @term)
|
||||
|
||||
'$lgt_cp_filter'([], []).
|
||||
|
||||
'$lgt_cp_filter'([Data| Rest], [Data| Rest2]) :-
|
||||
'$lgt_cp_remove_all'(Rest, Data, Aux),
|
||||
'$lgt_cp_filter'(Aux, Rest2).
|
||||
|
||||
|
||||
'$lgt_cp_remove_all'([], _, []).
|
||||
|
||||
'$lgt_cp_remove_all'([F/A-_| Rest], F/A-D, List) :-
|
||||
!,
|
||||
'$lgt_cp_remove_all'(Rest, F/A-D, List).
|
||||
|
||||
'$lgt_cp_remove_all'([Data| Rest], Filter, [Data| Rest2]) :-
|
||||
!,
|
||||
'$lgt_cp_remove_all'(Rest, Filter, Rest2).
|
||||
'$lgt_visible_predicate'(Obj, Pred, Sender, Scope) :-
|
||||
'$lgt_current_object_'(Obj, _, Dcl, _, _, _),
|
||||
'$lgt_call'(Dcl, Pred, PScope, _, _, SCtn, _),
|
||||
once((\+ \+ PScope = Scope; Sender = SCtn)).
|
||||
|
||||
|
||||
|
||||
@@ -3112,14 +3130,14 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
'$lgt_load_entity'(Entity, Flags) :-
|
||||
'$lgt_compile_entity'(Entity, Flags),
|
||||
('$lgt_redefined_entity'(Entity, Type, Identifier) ->
|
||||
'$lgt_clean_lookup_caches',
|
||||
'$lgt_clean_redefined_entity'(Type, Identifier),
|
||||
'$lgt_report_redefined_entity'(Type, Identifier)
|
||||
;
|
||||
true),
|
||||
'$lgt_file_name'(prolog, Entity, File),
|
||||
'$lgt_load_prolog_code'(File),
|
||||
'$lgt_report_loaded_entity'(Entity),
|
||||
'$lgt_clean_lookup_caches'.
|
||||
'$lgt_report_loaded_entity'(Entity).
|
||||
|
||||
|
||||
|
||||
@@ -3154,15 +3172,16 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
'$lgt_clean_redefined_entity'(object, Entity) :-
|
||||
'$lgt_current_object_'(Entity, Prefix, _, _, _, _),
|
||||
'$lgt_call'(Prefix, _, Def, _, _, _, _, DDef, _),
|
||||
'$lgt_call'(Prefix, _, Def, _, _, _, DDcl, DDef, _),
|
||||
forall(
|
||||
('$lgt_call'(Def, _, _, _, _, Head),
|
||||
'$lgt_predicate_property'(Head, (dynamic))),
|
||||
retractall(Head)),
|
||||
('$lgt_call'(Def, _, _, _, _, DefHead), '$lgt_predicate_property'(DefHead, (dynamic))),
|
||||
retractall(DefHead)),
|
||||
DDefClause =.. [DDef, _, _, _, _, DDefHead],
|
||||
forall(
|
||||
('$lgt_call'(DDef, _, _, _, _, Head2),
|
||||
'$lgt_predicate_property'(Head2, (dynamic))),
|
||||
retractall(Head2)).
|
||||
retract(DDefClause),
|
||||
retractall(DDefHead)),
|
||||
DDclClause =.. [DDcl, _, _],
|
||||
retractall(DDclClause).
|
||||
|
||||
'$lgt_clean_redefined_entity'(protocol, _).
|
||||
|
||||
@@ -3387,7 +3406,7 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
'$lgt_tr_file'(Stream, Term)),
|
||||
Error,
|
||||
'$lgt_compiler_error_handler'(Stream, Error)),
|
||||
'$lgt_restores_op_table',
|
||||
'$lgt_restore_op_table',
|
||||
close(Stream),
|
||||
'$lgt_fix_redef_built_ins',
|
||||
'$lgt_report_misspelt_calls',
|
||||
@@ -3478,7 +3497,7 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
close(Stream)
|
||||
;
|
||||
true),
|
||||
'$lgt_restores_op_table',
|
||||
'$lgt_restore_op_table',
|
||||
'$lgt_report_compiler_error'(Error),
|
||||
throw(Error).
|
||||
|
||||
@@ -3591,29 +3610,29 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
'$lgt_save_op_table' :-
|
||||
current_op(Pr, Spec, Op),
|
||||
asserta('$lgt_pp_global_op_'(Pr, Spec, Op)),
|
||||
asserta('$lgt_pp_global_op_'(Pr, Spec, Op)),
|
||||
fail.
|
||||
|
||||
'$lgt_save_op_table'.
|
||||
|
||||
|
||||
|
||||
% '$lgt_restores_op_table'
|
||||
% '$lgt_restore_op_table'
|
||||
%
|
||||
% restores current operator table
|
||||
|
||||
'$lgt_restores_op_table' :-
|
||||
'$lgt_restore_op_table' :-
|
||||
retract('$lgt_pp_local_op_'(_, Spec, Op)),
|
||||
op(0, Spec, Op),
|
||||
op(0, Spec, Op),
|
||||
fail.
|
||||
|
||||
'$lgt_restores_op_table' :-
|
||||
'$lgt_restore_op_table' :-
|
||||
retractall('$lgt_pp_global_op_'(_, _, ',')), % ','/2 cannot be an argument to op/3
|
||||
retract('$lgt_pp_global_op_'(Pr, Spec, Op)),
|
||||
op(Pr, Spec, Op),
|
||||
op(Pr, Spec, Op),
|
||||
fail.
|
||||
|
||||
'$lgt_restores_op_table'.
|
||||
'$lgt_restore_op_table'.
|
||||
|
||||
|
||||
|
||||
@@ -4587,11 +4606,14 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
'$lgt_tr_body'(Obj::Pred, TPred, '$lgt_dbg_goal'(Obj::Pred, TPred, Ctx), Ctx) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_body'(::Pred, TPred, '$lgt_dbg_goal'(::Pred, TPred, Ctx), Ctx) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_body'(^^Pred, TPred, '$lgt_dbg_goal'(^^Pred, TPred, Ctx), Ctx) :-
|
||||
!,
|
||||
@@ -4871,7 +4893,7 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
functor(Pred, Functor, Arity),
|
||||
Functor \= (:-), % only facts allowed
|
||||
'$lgt_pp_dynamic_'(Functor, Arity),
|
||||
once((
|
||||
once(( % a scope directive must be present
|
||||
'$lgt_pp_public_'(Functor, Arity);
|
||||
'$lgt_pp_protected_'(Functor, Arity);
|
||||
'$lgt_pp_private_'(Functor, Arity))),
|
||||
@@ -4963,31 +4985,30 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
|
||||
|
||||
% '$lgt_tr_msg'(@term, @object, -term, +term)
|
||||
% '$lgt_tr_msg'(@term, @object_identifier, -nonvar, @object_identifier)
|
||||
%
|
||||
% translates the sending of a message to an object
|
||||
|
||||
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This) :-
|
||||
nonvar(Obj),
|
||||
((Obj = (_, _); Obj = (_; _)) ->
|
||||
!,
|
||||
'$lgt_tr_msg_broadcasting'(Obj, Pred, TPred, Ctx) % message broadcasting
|
||||
'$lgt_tr_msg_broadcasting'(Obj, Pred, TPred, This) % message broadcasting
|
||||
;
|
||||
(\+ callable(Obj) ->
|
||||
throw(type_error(object_identifier, Obj)) % invalid object identifier
|
||||
;
|
||||
\+ '$lgt_ctx_ctx'(Ctx, user, user, _, _, _), % not runtime message translation
|
||||
This \= user, % not runtime message translation
|
||||
assertz('$lgt_pp_referenced_object_'(Obj)), % remember object receiving message
|
||||
fail)).
|
||||
|
||||
|
||||
% translation performed at runtime
|
||||
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This) :-
|
||||
var(Pred),
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_compiler_flag'(events, on) ->
|
||||
TPred = '$lgt_send_to_object'(Obj, Pred, This)
|
||||
;
|
||||
@@ -5003,104 +5024,95 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
% control constructs
|
||||
|
||||
'$lgt_tr_msg'((Pred1, Pred2), Obj, (TPred1, TPred2), Ctx) :-
|
||||
'$lgt_tr_msg'((Pred1, Pred2), Obj, (TPred1, TPred2), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, Ctx),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, Ctx).
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, This),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, This).
|
||||
|
||||
'$lgt_tr_msg'((Pred1; Pred2), Obj, (TPred1; TPred2), Ctx) :-
|
||||
'$lgt_tr_msg'((Pred1; Pred2), Obj, (TPred1; TPred2), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, Ctx),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, Ctx).
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, This),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, This).
|
||||
|
||||
'$lgt_tr_msg'((Pred1 -> Pred2), Obj, (TPred1 -> TPred2), Ctx) :-
|
||||
'$lgt_tr_msg'((Pred1 -> Pred2), Obj, (TPred1 -> TPred2), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, Ctx),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, Ctx).
|
||||
'$lgt_tr_msg'(Pred1, Obj, TPred1, This),
|
||||
'$lgt_tr_msg'(Pred2, Obj, TPred2, This).
|
||||
|
||||
'$lgt_tr_msg'(\+ Pred, Obj, \+ TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(\+ Pred, Obj, \+ TPred, This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_msg'(!, Obj, ('$lgt_obj_exists'(Obj, !, This), !), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(!, Obj, ('$lgt_obj_exists'(Obj, !, This), !), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(true, Obj, ('$lgt_obj_exists'(Obj, true, This), true), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(true, Obj, ('$lgt_obj_exists'(Obj, true, This), true), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(fail, Obj, ('$lgt_obj_exists'(Obj, fail, This), fail), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(fail, Obj, ('$lgt_obj_exists'(Obj, fail, This), fail), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(repeat, Obj, ('$lgt_obj_exists'(Obj, repeat, This), repeat), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(repeat, Obj, ('$lgt_obj_exists'(Obj, repeat, This), repeat), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(call(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(call(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_msg'(once(Pred), Obj, once(TPred), Ctx) :-
|
||||
'$lgt_tr_msg'(once(Pred), Obj, once(TPred), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_msg'(catch(Goal, Catcher, Recovery), Obj, catch(TGoal, Catcher, TRecovery), Ctx) :-
|
||||
'$lgt_tr_msg'(catch(Goal, Catcher, Recovery), Obj, catch(TGoal, Catcher, TRecovery), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Goal, Obj, TGoal, Ctx),
|
||||
'$lgt_tr_msg'(Recovery, Obj, TRecovery, Ctx).
|
||||
'$lgt_tr_msg'(Goal, Obj, TGoal, This),
|
||||
'$lgt_tr_msg'(Recovery, Obj, TRecovery, This).
|
||||
|
||||
'$lgt_tr_msg'(throw(Error), Obj, ('$lgt_obj_exists'(Obj, throw(Error), This), throw(Error)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(throw(Error), Obj, ('$lgt_obj_exists'(Obj, throw(Error), This), throw(Error)), This) :-
|
||||
!.
|
||||
|
||||
|
||||
% built-in metapredicates
|
||||
|
||||
'$lgt_tr_msg'(bagof(Term, Pred, List), Obj, bagof(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_msg'(bagof(Term, Pred, List), Obj, bagof(Term, TPred, List), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_msg'(findall(Term, Pred, List), Obj, findall(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_msg'(findall(Term, Pred, List), Obj, findall(Term, TPred, List), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
'$lgt_tr_msg'(forall(Gen, Test), Obj, forall(TGen, TTest), Ctx) :-
|
||||
'$lgt_tr_msg'(forall(Gen, Test), Obj, forall(TGen, TTest), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Gen, Obj, TGen, Ctx),
|
||||
'$lgt_tr_msg'(Test, Obj, TTest, Ctx).
|
||||
'$lgt_tr_msg'(Gen, Obj, TGen, This),
|
||||
'$lgt_tr_msg'(Test, Obj, TTest, This).
|
||||
|
||||
'$lgt_tr_msg'(setof(Term, Pred, List), Obj, setof(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_msg'(setof(Term, Pred, List), Obj, setof(Term, TPred, List), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This).
|
||||
|
||||
|
||||
% "reflection" built-in predicates
|
||||
|
||||
'$lgt_tr_msg'(current_predicate(Pred), Obj, '$lgt_current_predicate'(Obj, Pred, This, p(p(p))), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(current_predicate(Pred), Obj, '$lgt_current_predicate'(Obj, Pred, This, p(p(p))), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(predicate_property(Pred, Prop), Obj, '$lgt_predicate_property'(Obj, Pred, Prop, This, p(p(p))), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(predicate_property(Pred, Prop), Obj, '$lgt_predicate_property'(Obj, Pred, Prop, This, p(p(p))), This) :-
|
||||
!.
|
||||
|
||||
|
||||
% database handling built-in predicates
|
||||
|
||||
'$lgt_tr_msg'(abolish(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(abolish(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_pred_ind_chk'(Pred) ->
|
||||
TPred = '$lgt_abolish'(Obj, Pred, This, p(p(p)))
|
||||
;
|
||||
'$lgt_compiler_db_pred_ind_chk'(Pred),
|
||||
TPred = '$lgt_abolish_chk'(Obj, Pred, This, p(p(p)))).
|
||||
|
||||
'$lgt_tr_msg'(asserta(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(asserta(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_asserta'(Obj, Pred, This, p(p(p)))
|
||||
;
|
||||
@@ -5110,9 +5122,8 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
;
|
||||
TPred = '$lgt_asserta_fact_chk'(Obj, Pred, This, p(p(p))))).
|
||||
|
||||
'$lgt_tr_msg'(assertz(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(assertz(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_assertz'(Obj, Pred, This, p(p(p)))
|
||||
;
|
||||
@@ -5122,18 +5133,16 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
;
|
||||
TPred = '$lgt_assertz_fact_chk'(Obj, Pred, This, p(p(p))))).
|
||||
|
||||
'$lgt_tr_msg'(clause(Head, Body), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(clause(Head, Body), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'((Head :- Body)) ->
|
||||
TPred = '$lgt_clause'(Obj, Head, Body, This, p(p(p)))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'((Head :- Body)),
|
||||
TPred = '$lgt_clause_chk'(Obj, Head, Body, This, p(p(p)))).
|
||||
|
||||
'$lgt_tr_msg'(retract(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(retract(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_retract'(Obj, Pred, This, p(p(p)))
|
||||
;
|
||||
@@ -5143,9 +5152,8 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
;
|
||||
TPred = '$lgt_retract_fact_chk'(Obj, Pred, This, p(p(p))))).
|
||||
|
||||
'$lgt_tr_msg'(retractall(Pred), Obj, TPred, Ctx) :-
|
||||
'$lgt_tr_msg'(retractall(Pred), Obj, TPred, This) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_retractall'(Obj, Pred, This, p(p(p)))
|
||||
;
|
||||
@@ -5155,25 +5163,21 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
% DCG predicates
|
||||
|
||||
'$lgt_tr_msg'(expand_term(Term, Clause), Obj, '$lgt_expand_term'(Obj, Term, Clause, This, p(p(p))), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(expand_term(Term, Clause), Obj, '$lgt_expand_term'(Obj, Term, Clause, This, p(p(p))), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(phrase(Ruleset, List), Obj, '$lgt_phrase'(Obj, Ruleset, List, This, p(p(p))), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(phrase(Ruleset, List), Obj, '$lgt_phrase'(Obj, Ruleset, List, This, p(p(p))), This) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_msg'(phrase(Ruleset, List, Rest), Obj, '$lgt_phrase'(Obj, Ruleset, List, Rest, This, p(p(p))), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_msg'(phrase(Ruleset, List, Rest), Obj, '$lgt_phrase'(Obj, Ruleset, List, Rest, This, p(p(p))), This) :-
|
||||
!.
|
||||
|
||||
|
||||
% message is not a built-in control construct or a call to a built-in
|
||||
% (meta-)predicate: translation performed at runtime
|
||||
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, Ctx) :-
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
(var(Obj) ->
|
||||
'$lgt_tr_msg'(Pred, Obj, TPred, This) :-
|
||||
var(Obj) ->
|
||||
('$lgt_compiler_flag'(events, on) ->
|
||||
TPred = '$lgt_send_to_object'(Obj, Pred, This)
|
||||
;
|
||||
@@ -5182,179 +5186,161 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
('$lgt_compiler_flag'(events, on) ->
|
||||
TPred = '$lgt_send_to_object_nv'(Obj, Pred, This)
|
||||
;
|
||||
TPred = '$lgt_send_to_object_ne_nv'(Obj, Pred, This))).
|
||||
TPred = '$lgt_send_to_object_ne_nv'(Obj, Pred, This)).
|
||||
|
||||
|
||||
|
||||
% '$lgt_tr_self_msg'(@term, -term, +term)
|
||||
% '$lgt_tr_self_msg'(@term, -nonvar, @object_identifier, @object_identifier)
|
||||
%
|
||||
% translates the sending of a message to self
|
||||
|
||||
|
||||
% translation performed at runtime
|
||||
|
||||
'$lgt_tr_self_msg'(Pred, '$lgt_send_to_self'(Self, Pred, This), Ctx) :-
|
||||
'$lgt_tr_self_msg'(Pred, '$lgt_send_to_self'(Self, Pred, This), This, Self) :-
|
||||
var(Pred),
|
||||
!,
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
'$lgt_ctx_self'(Ctx, Self).
|
||||
!.
|
||||
|
||||
|
||||
% invalid message
|
||||
|
||||
'$lgt_tr_self_msg'(Pred, _, _) :-
|
||||
'$lgt_tr_self_msg'(Pred, _, _, _) :-
|
||||
\+ callable(Pred),
|
||||
throw(type_error(callable, Pred)).
|
||||
|
||||
|
||||
% control constructs
|
||||
|
||||
'$lgt_tr_self_msg'((Pred1, Pred2), (TPred1, TPred2), Ctx) :-
|
||||
'$lgt_tr_self_msg'((Pred1, Pred2), (TPred1, TPred2), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, Ctx),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, This, Self),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(((Pred1; Pred2)), (TPred1; TPred2), Ctx) :-
|
||||
'$lgt_tr_self_msg'(((Pred1; Pred2)), (TPred1; TPred2), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, Ctx),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, This, Self),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'((Pred1 -> Pred2), (TPred1 -> TPred2), Ctx) :-
|
||||
'$lgt_tr_self_msg'((Pred1 -> Pred2), (TPred1 -> TPred2), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, Ctx),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred1, TPred1, This, Self),
|
||||
'$lgt_tr_self_msg'(Pred2, TPred2, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(\+ Pred, \+ TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(\+ Pred, \+ TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(!, !, _) :-
|
||||
'$lgt_tr_self_msg'(!, !, _, _) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(true, true, _) :-
|
||||
'$lgt_tr_self_msg'(true, true, _, _) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(fail, fail, _) :-
|
||||
'$lgt_tr_self_msg'(fail, fail, _, _) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(repeat, repeat, _) :-
|
||||
'$lgt_tr_self_msg'(repeat, repeat, _, _) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(call(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(call(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(once(Pred), once(TPred), Ctx) :-
|
||||
'$lgt_tr_self_msg'(once(Pred), once(TPred), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(catch(Goal, Catcher, Recovery), catch(TGoal, Catcher, TRecovery), Ctx) :-
|
||||
'$lgt_tr_self_msg'(catch(Goal, Catcher, Recovery), catch(TGoal, Catcher, TRecovery), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Goal, TGoal, Ctx),
|
||||
'$lgt_tr_self_msg'(Recovery, TRecovery, Ctx).
|
||||
'$lgt_tr_self_msg'(Goal, TGoal, This, Self),
|
||||
'$lgt_tr_self_msg'(Recovery, TRecovery, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(throw(Error), throw(Error), _) :-
|
||||
'$lgt_tr_self_msg'(throw(Error), throw(Error), _, _) :-
|
||||
!.
|
||||
|
||||
|
||||
% built-in metapredicates
|
||||
|
||||
'$lgt_tr_self_msg'(bagof(Term, Pred, List), bagof(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_self_msg'(bagof(Term, Pred, List), bagof(Term, TPred, List), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(findall(Term, Pred, List), findall(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_self_msg'(findall(Term, Pred, List), findall(Term, TPred, List), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(forall(Gen, Test), forall(TGen, TTest), Ctx) :-
|
||||
'$lgt_tr_self_msg'(forall(Gen, Test), forall(TGen, TTest), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Gen, TGen, Ctx),
|
||||
'$lgt_tr_self_msg'(Test, TTest, Ctx).
|
||||
'$lgt_tr_self_msg'(Gen, TGen, This, Self),
|
||||
'$lgt_tr_self_msg'(Test, TTest, This, Self).
|
||||
|
||||
'$lgt_tr_self_msg'(setof(Term, Pred, List), setof(Term, TPred, List), Ctx) :-
|
||||
'$lgt_tr_self_msg'(setof(Term, Pred, List), setof(Term, TPred, List), This, Self) :-
|
||||
!,
|
||||
'$lgt_tr_self_msg'(Pred, TPred, Ctx).
|
||||
'$lgt_tr_self_msg'(Pred, TPred, This, Self).
|
||||
|
||||
|
||||
% "reflection" built-in predicates
|
||||
|
||||
'$lgt_tr_self_msg'(current_predicate(Pred), '$lgt_current_predicate'(Self, Pred, This, p(_)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(current_predicate(Pred), '$lgt_current_predicate'(Self, Pred, This, p(_)), This, Self) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(predicate_property(Pred, Prop), '$lgt_predicate_property'(Self, Pred, Prop, This, p(_)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(predicate_property(Pred, Prop), '$lgt_predicate_property'(Self, Pred, Prop, This, p(_)), This, Self) :-
|
||||
!.
|
||||
|
||||
|
||||
% database handling built-in predicates
|
||||
|
||||
'$lgt_tr_self_msg'(abolish(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(abolish(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_pred_ind_chk'(Pred) ->
|
||||
TPred = '$lgt_abolish'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_pred_ind_chk'(Pred),
|
||||
TPred = '$lgt_abolish_chk'(Self, Pred, This, p(_))).
|
||||
|
||||
'$lgt_tr_self_msg'(asserta(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(asserta(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_asserta'(Self, Pred, This, p(_))
|
||||
TPred = '$lgt_asserta'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_asserta_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_asserta_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
TPred = '$lgt_asserta_fact_chk'(Self, Pred, This, p(_)))).
|
||||
TPred = '$lgt_asserta_fact_chk'(Self, Pred, This, p(_)))).
|
||||
|
||||
'$lgt_tr_self_msg'(assertz(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(assertz(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_assertz'(Self, Pred, This, p(_))
|
||||
TPred = '$lgt_assertz'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_assertz_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_assertz_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
TPred = '$lgt_assertz_fact_chk'(Self, Pred, This, p(_)))).
|
||||
TPred = '$lgt_assertz_fact_chk'(Self, Pred, This, p(_)))).
|
||||
|
||||
'$lgt_tr_self_msg'(clause(Head, Body), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(clause(Head, Body), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'((Head :- Body)) ->
|
||||
TPred = '$lgt_clause'(Self, Head, Body, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'((Head :- Body)),
|
||||
TPred = '$lgt_clause_chk'(Self, Head, Body, This, p(_))).
|
||||
|
||||
'$lgt_tr_self_msg'(retract(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(retract(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_retract'(Self, Pred, This, p(_))
|
||||
TPred = '$lgt_retract'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_retract_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
'$lgt_compiler_db_clause_chk'(Pred),
|
||||
(Pred = (_ :- _) ->
|
||||
TPred = '$lgt_retract_rule_chk'(Self, Pred, This, p(_))
|
||||
;
|
||||
TPred = '$lgt_retract_fact_chk'(Self, Pred, This, p(_)))).
|
||||
TPred = '$lgt_retract_fact_chk'(Self, Pred, This, p(_)))).
|
||||
|
||||
'$lgt_tr_self_msg'(retractall(Pred), TPred, Ctx) :-
|
||||
'$lgt_tr_self_msg'(retractall(Pred), TPred, This, Self) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This),
|
||||
('$lgt_runtime_db_clause_chk'(Pred) ->
|
||||
TPred = '$lgt_retractall'(Self, Pred, This, p(_))
|
||||
;
|
||||
@@ -5365,43 +5351,35 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
% DCG predicates
|
||||
|
||||
'$lgt_tr_self_msg'(expand_term(Term, Clause), '$lgt_expand_term'(Self, Term, Clause, This, p(_)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(expand_term(Term, Clause), '$lgt_expand_term'(Self, Term, Clause, This, p(_)), This, Self) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(phrase(Ruleset, List), '$lgt_phrase'(Self, Ruleset, List, This, p(_)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(phrase(Ruleset, List), '$lgt_phrase'(Self, Ruleset, List, This, p(_)), This, Self) :-
|
||||
!.
|
||||
|
||||
'$lgt_tr_self_msg'(phrase(Ruleset, List, Rest), '$lgt_phrase'(Self, Ruleset, List, Rest, This, p(_)), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(phrase(Ruleset, List, Rest), '$lgt_phrase'(Self, Ruleset, List, Rest, This, p(_)), This, Self) :-
|
||||
!.
|
||||
|
||||
|
||||
% message is not a built-in control construct or a call to a built-in
|
||||
% (meta-)predicate: translation performed at runtime
|
||||
|
||||
'$lgt_tr_self_msg'(Pred, '$lgt_send_to_self_nv'(Self, Pred, This), Ctx) :-
|
||||
!,
|
||||
'$lgt_ctx_self'(Ctx, Self),
|
||||
'$lgt_ctx_this'(Ctx, This).
|
||||
'$lgt_tr_self_msg'(Pred, '$lgt_send_to_self_nv'(Self, Pred, This), This, Self) :-
|
||||
!.
|
||||
|
||||
|
||||
|
||||
% message broadcasting
|
||||
|
||||
'$lgt_tr_msg_broadcasting'((Obj1, Obj2), Pred, (TP1, TP2), Ctx) :-
|
||||
'$lgt_tr_msg_broadcasting'((Obj1, Obj2), Pred, (TP1, TP2), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj1, TP1, Ctx),
|
||||
'$lgt_tr_msg'(Pred, Obj2, TP2, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj1, TP1, This),
|
||||
'$lgt_tr_msg'(Pred, Obj2, TP2, This).
|
||||
|
||||
'$lgt_tr_msg_broadcasting'((Obj1; Obj2), Pred, (TP1; TP2), Ctx) :-
|
||||
'$lgt_tr_msg_broadcasting'((Obj1; Obj2), Pred, (TP1; TP2), This) :-
|
||||
!,
|
||||
'$lgt_tr_msg'(Pred, Obj1, TP1, Ctx),
|
||||
'$lgt_tr_msg'(Pred, Obj2, TP2, Ctx).
|
||||
'$lgt_tr_msg'(Pred, Obj1, TP1, This),
|
||||
'$lgt_tr_msg'(Pred, Obj2, TP2, This).
|
||||
|
||||
|
||||
|
||||
@@ -5640,11 +5618,14 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
% save currently defined operators that might be
|
||||
% redefined when a list of operators is added
|
||||
|
||||
'$lgt_save_operators'(Ops, Saved) :-
|
||||
findall(
|
||||
op(Pr, Spec, Op),
|
||||
('$lgt_member'(op(_, _, Op), Ops), current_op(Pr, Spec, Op)),
|
||||
Saved).
|
||||
'$lgt_save_operators'([], []).
|
||||
|
||||
'$lgt_save_operators'([op(_, Spec, Op)| Ops], Saved) :-
|
||||
((current_op(Pr, SCSpec, Op), '$lgt_same_op_class'(Spec, SCSpec)) ->
|
||||
Saved = [op(Pr, SCSpec, Op)| Saved2]
|
||||
;
|
||||
Saved = Saved2),
|
||||
'$lgt_save_operators'(Ops, Saved2).
|
||||
|
||||
|
||||
|
||||
@@ -7509,6 +7490,8 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
% reverses the functor used for a compiled predicate
|
||||
|
||||
'$lgt_reverse_predicate_functor'(TFunctor, TArity, Entity, Type, Functor, Arity) :-
|
||||
atom(TFunctor),
|
||||
integer(TArity),
|
||||
Arity is TArity - 3, % subtract message execution context arguments
|
||||
Arity >= 0,
|
||||
number_codes(Arity, Codes),
|
||||
@@ -7845,6 +7828,34 @@ current_logtalk_flag(version, version(2, 23, 0)).
|
||||
|
||||
|
||||
|
||||
% '$lgt_same_op_class'(?atom, ?atom)
|
||||
|
||||
'$lgt_same_op_class'(fx, fx).
|
||||
'$lgt_same_op_class'(fx, fy).
|
||||
|
||||
'$lgt_same_op_class'(fy, fx).
|
||||
'$lgt_same_op_class'(fy, fy).
|
||||
|
||||
'$lgt_same_op_class'(xf, xf).
|
||||
'$lgt_same_op_class'(xf, yf).
|
||||
|
||||
'$lgt_same_op_class'(yf, xf).
|
||||
'$lgt_same_op_class'(yf, yf).
|
||||
|
||||
'$lgt_same_op_class'(xfx, xfx).
|
||||
'$lgt_same_op_class'(xfx, xfy).
|
||||
'$lgt_same_op_class'(xfx, yfx).
|
||||
|
||||
'$lgt_same_op_class'(xfy, xfx).
|
||||
'$lgt_same_op_class'(xfy, xfy).
|
||||
'$lgt_same_op_class'(xfy, yfx).
|
||||
|
||||
'$lgt_same_op_class'(yfx, xfx).
|
||||
'$lgt_same_op_class'(yfx, xfy).
|
||||
'$lgt_same_op_class'(yfx, yfx).
|
||||
|
||||
|
||||
|
||||
% '$lgt_valid_metapred_term'(@term)
|
||||
|
||||
'$lgt_valid_metapred_term'(Pred) :-
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% Logtalk - Object oriented extension to Prolog
|
||||
% Release 2.23.0
|
||||
% Release 2.23.1
|
||||
%
|
||||
% configuration file for YAP Prolog 4.3.23 and later versions
|
||||
%
|
||||
|
||||
Reference in New Issue
Block a user