Merge branch 'master' of ssh://yap.git.sourceforge.net/gitroot/yap/yap-6.3
This commit is contained in:
commit
94cd7466a1
@ -3282,7 +3282,7 @@ compact_heap( USES_REGS1 )
|
|||||||
fprintf(Yap_stderr,"%% Bad Dest (%lu): %p should be %p\n",
|
fprintf(Yap_stderr,"%% Bad Dest (%lu): %p should be %p\n",
|
||||||
(unsigned long int)LOCAL_GcCalls,
|
(unsigned long int)LOCAL_GcCalls,
|
||||||
dest,
|
dest,
|
||||||
start_from);
|
start_from-1);
|
||||||
if (LOCAL_total_marked != found_marked)
|
if (LOCAL_total_marked != found_marked)
|
||||||
fprintf(Yap_stderr,"%% Upward (%lu): %lu total against %lu found\n",
|
fprintf(Yap_stderr,"%% Upward (%lu): %lu total against %lu found\n",
|
||||||
(unsigned long int)LOCAL_GcCalls,
|
(unsigned long int)LOCAL_GcCalls,
|
||||||
|
40
C/index.c
40
C/index.c
@ -6656,6 +6656,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
CELL *s_reg = NULL;
|
CELL *s_reg = NULL;
|
||||||
Term t = TermNil;
|
Term t = TermNil;
|
||||||
|
int blob_term = FALSE;
|
||||||
yamop *start_pc = ipc;
|
yamop *start_pc = ipc;
|
||||||
choiceptr b0 = NULL;
|
choiceptr b0 = NULL;
|
||||||
yamop **jlbl = NULL;
|
yamop **jlbl = NULL;
|
||||||
@ -6974,6 +6975,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
/* instructions type e */
|
/* instructions type e */
|
||||||
case _switch_on_type:
|
case _switch_on_type:
|
||||||
t = Deref(ARG1);
|
t = Deref(ARG1);
|
||||||
|
blob_term = FALSE;
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
jlbl = &(ipc->u.llll.l4);
|
jlbl = &(ipc->u.llll.l4);
|
||||||
ipc = ipc->u.llll.l4;
|
ipc = ipc->u.llll.l4;
|
||||||
@ -6993,6 +6995,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _switch_list_nl:
|
case _switch_list_nl:
|
||||||
t = Deref(ARG1);
|
t = Deref(ARG1);
|
||||||
|
blob_term = FALSE;
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
jlbl = &(ipc->u.ollll.l4);
|
jlbl = &(ipc->u.ollll.l4);
|
||||||
ipc = ipc->u.ollll.l4;
|
ipc = ipc->u.ollll.l4;
|
||||||
@ -7013,6 +7016,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _switch_on_arg_type:
|
case _switch_on_arg_type:
|
||||||
t = Deref(XREGS[arg_from_x(ipc->u.xllll.x)]);
|
t = Deref(XREGS[arg_from_x(ipc->u.xllll.x)]);
|
||||||
|
blob_term = FALSE;
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
jlbl = &(ipc->u.xllll.l4);
|
jlbl = &(ipc->u.xllll.l4);
|
||||||
ipc = ipc->u.xllll.l4;
|
ipc = ipc->u.xllll.l4;
|
||||||
@ -7032,6 +7036,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _switch_on_sub_arg_type:
|
case _switch_on_sub_arg_type:
|
||||||
t = Deref(s_reg[ipc->u.sllll.s]);
|
t = Deref(s_reg[ipc->u.sllll.s]);
|
||||||
|
blob_term = FALSE;
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
jlbl = &(ipc->u.sllll.l4);
|
jlbl = &(ipc->u.sllll.l4);
|
||||||
ipc = ipc->u.sllll.l4;
|
ipc = ipc->u.sllll.l4;
|
||||||
@ -7051,6 +7056,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _if_not_then:
|
case _if_not_then:
|
||||||
t = Deref(ARG1);
|
t = Deref(ARG1);
|
||||||
|
blob_term = FALSE;
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
jlbl = &(ipc->u.clll.l3);
|
jlbl = &(ipc->u.clll.l3);
|
||||||
ipc = ipc->u.clll.l3;
|
ipc = ipc->u.clll.l3;
|
||||||
@ -7086,14 +7092,17 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
t = AbsAppl(s_reg-1);
|
t = AbsAppl(s_reg-1);
|
||||||
|
blob_term = FALSE;
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
case _index_blob:
|
case _index_blob:
|
||||||
t = Yap_DoubleP_key(s_reg);
|
t = Yap_DoubleP_key(s_reg);
|
||||||
|
blob_term = TRUE;
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
case _index_long:
|
case _index_long:
|
||||||
t = Yap_IntP_key(s_reg);
|
t = Yap_IntP_key(s_reg);
|
||||||
|
blob_term = TRUE;
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
case _switch_on_cons:
|
case _switch_on_cons:
|
||||||
@ -7114,8 +7123,13 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
case _expand_index:
|
case _expand_index:
|
||||||
case _expand_clauses:
|
case _expand_clauses:
|
||||||
XREGS[ap->ArityOfPE+1] = (CELL)s_reg;
|
if (blob_term) { /* protect garbage collector */
|
||||||
XREGS[ap->ArityOfPE+2] = (CELL)t;
|
XREGS[ap->ArityOfPE+1] = (CELL)&XREGS[ap->ArityOfPE+1];
|
||||||
|
XREGS[ap->ArityOfPE+2] = TermNil;
|
||||||
|
} else {
|
||||||
|
XREGS[ap->ArityOfPE+1] = (CELL)s_reg;
|
||||||
|
XREGS[ap->ArityOfPE+2] = t;
|
||||||
|
}
|
||||||
XREGS[ap->ArityOfPE+3] = Terms[0];
|
XREGS[ap->ArityOfPE+3] = Terms[0];
|
||||||
XREGS[ap->ArityOfPE+4] = Terms[1];
|
XREGS[ap->ArityOfPE+4] = Terms[1];
|
||||||
XREGS[ap->ArityOfPE+5] = Terms[2];
|
XREGS[ap->ArityOfPE+5] = Terms[2];
|
||||||
@ -7126,8 +7140,11 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ipc = ExpandIndex(ap, 5, cp_pc PASS_REGS);
|
ipc = ExpandIndex(ap, 5, cp_pc PASS_REGS);
|
||||||
s_reg = (CELL *)XREGS[ap->ArityOfPE+1];
|
if (!blob_term) { /* protect garbage collector */
|
||||||
t = XREGS[ap->ArityOfPE+2];
|
s_reg = (CELL *)XREGS[ap->ArityOfPE+1];
|
||||||
|
t = XREGS[ap->ArityOfPE+2];
|
||||||
|
}
|
||||||
|
blob_term = FALSE;
|
||||||
Terms[0] = XREGS[ap->ArityOfPE+3];
|
Terms[0] = XREGS[ap->ArityOfPE+3];
|
||||||
Terms[1] = XREGS[ap->ArityOfPE+4];
|
Terms[1] = XREGS[ap->ArityOfPE+4];
|
||||||
Terms[2] = XREGS[ap->ArityOfPE+5];
|
Terms[2] = XREGS[ap->ArityOfPE+5];
|
||||||
@ -7151,15 +7168,22 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case _index_pred:
|
case _index_pred:
|
||||||
XREGS[ap->ArityOfPE+1] = (CELL)s_reg;
|
if (blob_term) { /* protect garbage collector */
|
||||||
XREGS[ap->ArityOfPE+2] = (CELL)t;
|
XREGS[ap->ArityOfPE+1] = (CELL)&XREGS[ap->ArityOfPE+1];
|
||||||
|
XREGS[ap->ArityOfPE+2] = TermNil;
|
||||||
|
} else {
|
||||||
|
XREGS[ap->ArityOfPE+1] = (CELL)s_reg;
|
||||||
|
XREGS[ap->ArityOfPE+2] = t;
|
||||||
|
}
|
||||||
XREGS[ap->ArityOfPE+3] = Terms[0];
|
XREGS[ap->ArityOfPE+3] = Terms[0];
|
||||||
XREGS[ap->ArityOfPE+4] = Terms[1];
|
XREGS[ap->ArityOfPE+4] = Terms[1];
|
||||||
XREGS[ap->ArityOfPE+5] = Terms[2];
|
XREGS[ap->ArityOfPE+5] = Terms[2];
|
||||||
Yap_IPred(ap, 5, cp_pc);
|
Yap_IPred(ap, 5, cp_pc);
|
||||||
start_pc = ipc = ap->cs.p_code.TrueCodeOfPred;
|
start_pc = ipc = ap->cs.p_code.TrueCodeOfPred;
|
||||||
s_reg = (CELL *)XREGS[ap->ArityOfPE+1];
|
if (!blob_term) { /* protect garbage collector */
|
||||||
t = XREGS[ap->ArityOfPE+2];
|
s_reg = (CELL *)XREGS[ap->ArityOfPE+1];
|
||||||
|
t = XREGS[ap->ArityOfPE+2];
|
||||||
|
}
|
||||||
Terms[0] = XREGS[ap->ArityOfPE+3];
|
Terms[0] = XREGS[ap->ArityOfPE+3];
|
||||||
Terms[1] = XREGS[ap->ArityOfPE+4];
|
Terms[1] = XREGS[ap->ArityOfPE+4];
|
||||||
Terms[2] = XREGS[ap->ArityOfPE+5];
|
Terms[2] = XREGS[ap->ArityOfPE+5];
|
||||||
|
Reference in New Issue
Block a user