fix bug in current_predicate/2
fix bug in c_interface. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2221 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
89bdffe91e
commit
f1d5e84918
@ -10,8 +10,11 @@
|
|||||||
* File: c_interface.c *
|
* File: c_interface.c *
|
||||||
* comments: c_interface primitives definition *
|
* comments: c_interface primitives definition *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2008-04-11 16:30:27 $,$Author: ricroc $ *
|
* Last rev: $Date: 2008-04-28 23:02:32 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.115 2008/04/11 16:30:27 ricroc
|
||||||
|
* *** empty log message ***
|
||||||
|
*
|
||||||
* Revision 1.114 2008/04/04 13:35:41 vsc
|
* Revision 1.114 2008/04/04 13:35:41 vsc
|
||||||
* fix duplicate dependency frame at entry
|
* fix duplicate dependency frame at entry
|
||||||
*
|
*
|
||||||
@ -1305,6 +1308,8 @@ run_emulator(YAP_dogoalinfo *dgi)
|
|||||||
ASP = (CELL *)(B+1);
|
ASP = (CELL *)(B+1);
|
||||||
B = B->cp_b;
|
B = B->cp_b;
|
||||||
HB = B->cp_h;
|
HB = B->cp_h;
|
||||||
|
} else {
|
||||||
|
Yap_StartSlots();
|
||||||
}
|
}
|
||||||
P = dgi->p;
|
P = dgi->p;
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
|
26
C/cdmgr.c
26
C/cdmgr.c
@ -11,8 +11,11 @@
|
|||||||
* File: cdmgr.c *
|
* File: cdmgr.c *
|
||||||
* comments: Code manager *
|
* comments: Code manager *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2008-04-11 16:30:27 $,$Author: ricroc $ *
|
* Last rev: $Date: 2008-04-28 23:02:32 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.227 2008/04/11 16:30:27 ricroc
|
||||||
|
* *** empty log message ***
|
||||||
|
*
|
||||||
* Revision 1.226 2008/04/01 22:28:41 vsc
|
* Revision 1.226 2008/04/01 22:28:41 vsc
|
||||||
* put YAPOR back to life.
|
* put YAPOR back to life.
|
||||||
*
|
*
|
||||||
@ -2886,6 +2889,22 @@ p_is_source(void)
|
|||||||
return(out);
|
return(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_mk_d(void)
|
||||||
|
{ /* '$is_dynamic'(+P) */
|
||||||
|
PredEntry *pe;
|
||||||
|
|
||||||
|
pe = get_pred(Deref(ARG1), Deref(ARG2), "$is_source");
|
||||||
|
if (EndOfPAEntr(pe))
|
||||||
|
return FALSE;
|
||||||
|
LOCK(pe->PELock);
|
||||||
|
if (pe->OpcodeOfPred == UNDEF_OPCODE) {
|
||||||
|
pe->OpcodeOfPred = FAIL_OPCODE;
|
||||||
|
}
|
||||||
|
UNLOCK(pe->PELock);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_is_dynamic(void)
|
p_is_dynamic(void)
|
||||||
{ /* '$is_dynamic'(+P) */
|
{ /* '$is_dynamic'(+P) */
|
||||||
@ -3049,14 +3068,14 @@ p_kill_dynamic(void)
|
|||||||
LOCK(pe->PELock);
|
LOCK(pe->PELock);
|
||||||
if (!(pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) {
|
if (!(pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) {
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (pe->cs.p_code.LastClause != pe->cs.p_code.FirstClause) {
|
if (pe->cs.p_code.LastClause != pe->cs.p_code.FirstClause) {
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
pe->cs.p_code.LastClause = pe->cs.p_code.FirstClause = NULL;
|
pe->cs.p_code.LastClause = pe->cs.p_code.FirstClause = NULL;
|
||||||
pe->OpcodeOfPred = UNDEF_OPCODE;
|
pe->OpcodeOfPred = FAIL_OPCODE;
|
||||||
pe->cs.p_code.TrueCodeOfPred = pe->CodeOfPred = (yamop *)(&(pe->OpcodeOfPred));
|
pe->cs.p_code.TrueCodeOfPred = pe->CodeOfPred = (yamop *)(&(pe->OpcodeOfPred));
|
||||||
pe->PredFlags = pe->PredFlags & GoalExPredFlag;
|
pe->PredFlags = pe->PredFlags & GoalExPredFlag;
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
@ -6106,6 +6125,7 @@ Yap_InitCdMgr(void)
|
|||||||
Yap_InitCPred("$is_expand_goal_or_meta_predicate", 2, p_is_expandgoalormetapredicate, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$is_expand_goal_or_meta_predicate", 2, p_is_expandgoalormetapredicate, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$is_log_updatable", 2, p_is_log_updatable, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$is_log_updatable", 2, p_is_log_updatable, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$is_source", 2, p_is_source, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$is_source", 2, p_is_source, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
|
Yap_InitCPred("$mk_d", 2, p_mk_d, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$pred_exists", 2, p_pred_exists, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$pred_exists", 2, p_pred_exists, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$number_of_clauses", 3, p_number_of_clauses, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$number_of_clauses", 3, p_number_of_clauses, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$undefined", 2, p_undefined, SafePredFlag|TestPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$undefined", 2, p_undefined, SafePredFlag|TestPredFlag|HiddenPredFlag);
|
||||||
|
@ -17,6 +17,9 @@ xb
|
|||||||
|
|
||||||
<h2>Yap-5.1.3:</h2>
|
<h2>Yap-5.1.3:</h2>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li> FIXED: should init_slots when sucessfully exiting (obs from
|
||||||
|
Trevor Walker).</li>
|
||||||
|
<li> FIXED: predicate_property should work for empty dynamic predicates.</li>
|
||||||
<li> FIXED: scanning very large numbers (obs from Ryszard Szopa).</li>
|
<li> FIXED: scanning very large numbers (obs from Ryszard Szopa).</li>
|
||||||
<li> FIXED: regexp core-dump (obs from Ryszard Szopa).</li>
|
<li> FIXED: regexp core-dump (obs from Ryszard Szopa).</li>
|
||||||
<li> FIXED: handle message_queue_create/1 with vars right (obs from
|
<li> FIXED: handle message_queue_create/1 with vars right (obs from
|
||||||
|
@ -687,6 +687,12 @@ absolute_file_name(File,Opts,TrueFileName) :-
|
|||||||
% all must try search in path
|
% all must try search in path
|
||||||
'$find_in_path'(user,_,user_input, _) :- !.
|
'$find_in_path'(user,_,user_input, _) :- !.
|
||||||
'$find_in_path'(user_input,_,user_input, _) :- !.
|
'$find_in_path'(user_input,_,user_input, _) :- !.
|
||||||
|
'$find_in_path'(library(F),_,_, _) :-
|
||||||
|
% make sure library_directory is open.
|
||||||
|
\+ clause(user:library_directory(_),_),
|
||||||
|
'$system_library_directories'(D),
|
||||||
|
assert(user:library_directory(D)),
|
||||||
|
fail.
|
||||||
'$find_in_path'(library(File),Opts,NewFile, Call) :- !,
|
'$find_in_path'(library(File),Opts,NewFile, Call) :- !,
|
||||||
'$dir_separator'(D),
|
'$dir_separator'(D),
|
||||||
atom_codes(A,[D]),
|
atom_codes(A,[D]),
|
||||||
|
16
pl/preds.yap
16
pl/preds.yap
@ -712,10 +712,10 @@ dynamic(X) :-
|
|||||||
integer(N), atom(A), !,
|
integer(N), atom(A), !,
|
||||||
functor(T,A,N), '$flags'(T,Mod,F,F),
|
functor(T,A,N), '$flags'(T,Mod,F,F),
|
||||||
% LogUpd,BinaryTest,Safe,C,Dynamic,Compiled,Standard,Asm,
|
% LogUpd,BinaryTest,Safe,C,Dynamic,Compiled,Standard,Asm,
|
||||||
( F/\ 0x19D1FA80 =:= 0, '$undefined'(T,Mod) -> NF is F \/ 0x00002000, '$flags'(T, Mod, F, NF);
|
( F/\ 0x19D1FA80 =:= 0, '$undefined'(T,Mod) -> NF is F \/ 0x00002000, '$flags'(T, Mod, F, NF), '$mk_d'(T,Mod);
|
||||||
F /\ 0x00002000 =:= 0x00002000 -> true; % dynamic
|
F /\ 0x00002000 =:= 0x00002000 -> '$mk_d'(T,Mod); % dynamic
|
||||||
F /\ 0x08000000 =:= 0x08000000 -> true ; % LU
|
F /\ 0x08000000 =:= 0x08000000 -> '$mk_d'(T,Mod) ; % LU
|
||||||
F /\ 0x00000400 =:= 0x00000400, '$undefined'(T,Mod) -> F1 is F /\ \(0x400), N1F is F1 \/ 0x00002000, NF is N1F /\ \(0x00400000), '$flags'(T,Mod,F,NF);
|
F /\ 0x00000400 =:= 0x00000400, '$undefined'(T,Mod) -> F1 is F /\ \(0x400), N1F is F1 \/ 0x00002000, NF is N1F /\ \(0x00400000), '$flags'(T,Mod,F,NF), '$mk_d'(T,Mod);
|
||||||
'$do_error'(permission_error(modify,static_procedure,A/N),dynamic(Mod:A/N))
|
'$do_error'(permission_error(modify,static_procedure,A/N),dynamic(Mod:A/N))
|
||||||
).
|
).
|
||||||
'$dynamic2'(X,Mod) :-
|
'$dynamic2'(X,Mod) :-
|
||||||
@ -725,10 +725,10 @@ dynamic(X) :-
|
|||||||
'$logical_updatable'(A/N,Mod) :- integer(N), atom(A), !,
|
'$logical_updatable'(A/N,Mod) :- integer(N), atom(A), !,
|
||||||
functor(T,A,N), '$flags'(T,Mod,F,F),
|
functor(T,A,N), '$flags'(T,Mod,F,F),
|
||||||
(
|
(
|
||||||
F/\ 0x19D1FA80 =:= 0, '$undefined'(T,Mod) -> NF is F \/ 0x08000400, '$flags'(T,Mod,F,NF);
|
F/\ 0x19D1FA80 =:= 0, '$undefined'(T,Mod) -> NF is F \/ 0x08000400, '$flags'(T,Mod,F,NF), '$mk_d'(T,Mod);
|
||||||
F /\ 0x08000000 =:= 0x08000000 -> true ; % LU
|
F /\ 0x08000000 =:= 0x08000000 -> '$mk_d'(T,Mod) ; % LU
|
||||||
F /\ 0x00002000 =:= 0x00002000 -> true; % dynamic
|
F /\ 0x00002000 =:= 0x00002000 -> '$mk_d'(T,Mod); % dynamic
|
||||||
F /\ 0x00000400 =:= 0x00000400 , '$undefined'(T,Mod) -> N1F is F \/ 0x08000000, NF is N1F /\ \(0x00400000), '$flags'(T,Mod,F,NF);
|
F /\ 0x00000400 =:= 0x00000400 , '$undefined'(T,Mod) -> N1F is F \/ 0x08000000, NF is N1F /\ \(0x00400000), '$flags'(T,Mod,F,NF), '$mk_d'(T,Mod);
|
||||||
'$do_error'(permission_error(modify,static_procedure,A/N),dynamic(Mod:A/N))
|
'$do_error'(permission_error(modify,static_procedure,A/N),dynamic(Mod:A/N))
|
||||||
).
|
).
|
||||||
'$logical_updatable'(X,Mod) :-
|
'$logical_updatable'(X,Mod) :-
|
||||||
|
Reference in New Issue
Block a user