get rid of type punning warnings.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1873 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
b15193885e
commit
d79a6f8dcf
133
C/index.c
133
C/index.c
@ -11,8 +11,11 @@
|
|||||||
* File: index.c *
|
* File: index.c *
|
||||||
* comments: Indexing a Prolog predicate *
|
* comments: Indexing a Prolog predicate *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2007-03-26 15:18:43 $,$Author: vsc $ *
|
* Last rev: $Date: 2007-05-02 11:01:37 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.184 2007/03/26 15:18:43 vsc
|
||||||
|
* debugging and clause/3 over tabled predicates would kill YAP.
|
||||||
|
*
|
||||||
* Revision 1.183 2007/03/21 23:23:46 vsc
|
* Revision 1.183 2007/03/21 23:23:46 vsc
|
||||||
* fix excessive trail cleaning in gc tr overflow.
|
* fix excessive trail cleaning in gc tr overflow.
|
||||||
*
|
*
|
||||||
@ -514,7 +517,7 @@ recover_from_failed_susp_on_cls(struct intermediates *cint, UInt sz)
|
|||||||
int cases = cpc->rnd1, i;
|
int cases = cpc->rnd1, i;
|
||||||
|
|
||||||
for (i = 0; i < cases; i++) {
|
for (i = 0; i < cases; i++) {
|
||||||
sz = cleanup_sw_on_clauses(target[i].Label, sz, ecls);
|
sz = cleanup_sw_on_clauses(target[i].u.Label, sz, ecls);
|
||||||
}
|
}
|
||||||
if (log_upd_pred) {
|
if (log_upd_pred) {
|
||||||
LogUpdIndex *lcl = ClauseCodeToLogUpdIndex(cpc->rnd2);
|
LogUpdIndex *lcl = ClauseCodeToLogUpdIndex(cpc->rnd2);
|
||||||
@ -536,7 +539,7 @@ recover_from_failed_susp_on_cls(struct intermediates *cint, UInt sz)
|
|||||||
int cases = cpc->rnd1, i;
|
int cases = cpc->rnd1, i;
|
||||||
|
|
||||||
for (i = 0; i < cases; i++) {
|
for (i = 0; i < cases; i++) {
|
||||||
sz = cleanup_sw_on_clauses(target[i].Label, sz, ecls);
|
sz = cleanup_sw_on_clauses(target[i].u.Label, sz, ecls);
|
||||||
}
|
}
|
||||||
if (log_upd_pred) {
|
if (log_upd_pred) {
|
||||||
LogUpdIndex *lcl = ClauseCodeToLogUpdIndex(cpc->rnd2);
|
LogUpdIndex *lcl = ClauseCodeToLogUpdIndex(cpc->rnd2);
|
||||||
@ -3542,7 +3545,7 @@ emit_switch_space(UInt n, UInt item_size, struct intermediates *cint)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static AtomSwiEntry *
|
static AtomSwiEntry *
|
||||||
emit_cswitch(int n, UInt fail_l, struct intermediates *cint)
|
emit_cswitch(int n, yamop *fail_l, struct intermediates *cint)
|
||||||
{
|
{
|
||||||
compiler_vm_op op;
|
compiler_vm_op op;
|
||||||
AtomSwiEntry *target;
|
AtomSwiEntry *target;
|
||||||
@ -3556,7 +3559,7 @@ emit_cswitch(int n, UInt fail_l, struct intermediates *cint)
|
|||||||
target = (AtomSwiEntry *)emit_switch_space(n, sizeof(AtomSwiEntry), cint);
|
target = (AtomSwiEntry *)emit_switch_space(n, sizeof(AtomSwiEntry), cint);
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
target[i].Tag = Zero;
|
target[i].Tag = Zero;
|
||||||
target[i].Label = fail_l;
|
target[i].u.labp = fail_l;
|
||||||
}
|
}
|
||||||
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
||||||
} else {
|
} else {
|
||||||
@ -3566,10 +3569,10 @@ emit_cswitch(int n, UInt fail_l, struct intermediates *cint)
|
|||||||
target = (AtomSwiEntry *)emit_switch_space(n+1, sizeof(AtomSwiEntry), cint);
|
target = (AtomSwiEntry *)emit_switch_space(n+1, sizeof(AtomSwiEntry), cint);
|
||||||
|
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
target[i].Label = fail_l;
|
target[i].u.labp = fail_l;
|
||||||
}
|
}
|
||||||
target[n].Tag = Zero;
|
target[n].Tag = Zero;
|
||||||
target[n].Label = fail_l;
|
target[n].u.labp = fail_l;
|
||||||
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
||||||
}
|
}
|
||||||
return target;
|
return target;
|
||||||
@ -3609,7 +3612,7 @@ fetch_centry(AtomSwiEntry *cebase, Term wt, int i, int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static FuncSwiEntry *
|
static FuncSwiEntry *
|
||||||
emit_fswitch(int n, UInt fail_l, struct intermediates *cint)
|
emit_fswitch(int n, yamop *fail_l, struct intermediates *cint)
|
||||||
{
|
{
|
||||||
compiler_vm_op op;
|
compiler_vm_op op;
|
||||||
FuncSwiEntry *target;
|
FuncSwiEntry *target;
|
||||||
@ -3623,7 +3626,7 @@ emit_fswitch(int n, UInt fail_l, struct intermediates *cint)
|
|||||||
target = (FuncSwiEntry *)emit_switch_space(n, sizeof(FuncSwiEntry), cint);
|
target = (FuncSwiEntry *)emit_switch_space(n, sizeof(FuncSwiEntry), cint);
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
target[i].Tag = NULL;
|
target[i].Tag = NULL;
|
||||||
target[i].Label = fail_l;
|
target[i].u.labp = fail_l;
|
||||||
}
|
}
|
||||||
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
||||||
} else {
|
} else {
|
||||||
@ -3632,10 +3635,10 @@ emit_fswitch(int n, UInt fail_l, struct intermediates *cint)
|
|||||||
op = if_f_op;
|
op = if_f_op;
|
||||||
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
|
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
target[i].Label = fail_l;
|
target[i].u.labp = fail_l;
|
||||||
}
|
}
|
||||||
target[n].Tag = NULL;
|
target[n].Tag = NULL;
|
||||||
target[n].Label = fail_l;
|
target[n].u.labp = fail_l;
|
||||||
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
Yap_emit(op, Unsigned(n), (CELL)target, cint);
|
||||||
}
|
}
|
||||||
return target;
|
return target;
|
||||||
@ -3952,7 +3955,7 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
|
|||||||
n = count_consts(grp);
|
n = count_consts(grp);
|
||||||
lbl = new_label(cint);
|
lbl = new_label(cint);
|
||||||
Yap_emit(label_op, lbl, Zero, cint);
|
Yap_emit(label_op, lbl, Zero, cint);
|
||||||
cs = emit_cswitch(n, (UInt)FAILCODE, cint);
|
cs = emit_cswitch(n, FAILCODE, cint);
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
AtomSwiEntry *ics;
|
AtomSwiEntry *ics;
|
||||||
ClauseDef *max = min;
|
ClauseDef *max = min;
|
||||||
@ -3965,24 +3968,24 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
|
|||||||
if (sreg != NULL) {
|
if (sreg != NULL) {
|
||||||
if (ap->PredFlags & LogUpdatePredFlag && max > min) {
|
if (ap->PredFlags & LogUpdatePredFlag && max > min) {
|
||||||
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
} else {
|
} else {
|
||||||
ics->Label = suspend_indexing(min, max, ap, cint);
|
ics->u.Label = suspend_indexing(min, max, ap, cint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_compound_index(min, max, sreg, cint, compound_term, arity, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
ics->u.Label = do_compound_index(min, max, sreg, cint, compound_term, arity, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
||||||
}
|
}
|
||||||
} else if (ap->PredFlags & LogUpdatePredFlag) {
|
} else if (ap->PredFlags & LogUpdatePredFlag) {
|
||||||
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
} else {
|
} else {
|
||||||
ics->Label = suspend_indexing(min, max, cint->CurrentPred, cint);
|
ics->u.Label = suspend_indexing(min, max, cint->CurrentPred, cint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
||||||
}
|
}
|
||||||
grp->FirstClause = min = max+1;
|
grp->FirstClause = min = max+1;
|
||||||
}
|
}
|
||||||
@ -4000,7 +4003,7 @@ do_blobs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
PredEntry *ap = cint->CurrentPred;
|
PredEntry *ap = cint->CurrentPred;
|
||||||
|
|
||||||
n = count_blobs(grp);
|
n = count_blobs(grp);
|
||||||
cs = emit_cswitch(n, nxtlbl, cint);
|
cs = emit_cswitch(n, (yamop *)nxtlbl, cint);
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
AtomSwiEntry *ics;
|
AtomSwiEntry *ics;
|
||||||
ClauseDef *max = min;
|
ClauseDef *max = min;
|
||||||
@ -4012,12 +4015,12 @@ do_blobs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
if (min != max &&
|
if (min != max &&
|
||||||
(ap->PredFlags & LogUpdatePredFlag)) {
|
(ap->PredFlags & LogUpdatePredFlag)) {
|
||||||
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
} else {
|
} else {
|
||||||
ics->Label = suspend_indexing(min, max, ap, cint);
|
ics->u.Label = suspend_indexing(min, max, ap, cint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
ics->u.Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
||||||
}
|
}
|
||||||
grp->FirstClause = min = max+1;
|
grp->FirstClause = min = max+1;
|
||||||
}
|
}
|
||||||
@ -4039,7 +4042,7 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
lbl = new_label(cint);
|
lbl = new_label(cint);
|
||||||
Yap_emit(label_op, lbl, Zero, cint);
|
Yap_emit(label_op, lbl, Zero, cint);
|
||||||
/* generate a switch */
|
/* generate a switch */
|
||||||
fs = emit_fswitch(n, (UInt)FAILCODE, cint);
|
fs = emit_fswitch(n, FAILCODE, cint);
|
||||||
for (i = 0; i < n ; i++) {
|
for (i = 0; i < n ; i++) {
|
||||||
Functor f = (Functor)RepAppl(min->Tag);
|
Functor f = (Functor)RepAppl(min->Tag);
|
||||||
FuncSwiEntry *ifs;
|
FuncSwiEntry *ifs;
|
||||||
@ -4052,14 +4055,14 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
/* delay non-trivial indexing
|
/* delay non-trivial indexing
|
||||||
if (min != max &&
|
if (min != max &&
|
||||||
!IsExtensionFunctor(f)) {
|
!IsExtensionFunctor(f)) {
|
||||||
ifs->Label = suspend_indexing(min, max, ap, cint);
|
ifs->u.Label = suspend_indexing(min, max, ap, cint);
|
||||||
} else
|
} else
|
||||||
*/
|
*/
|
||||||
if (IsExtensionFunctor(f)) {
|
if (IsExtensionFunctor(f)) {
|
||||||
if (f == FunctorDBRef)
|
if (f == FunctorDBRef)
|
||||||
ifs->Label = do_dbref_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
ifs->u.Label = do_dbref_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
||||||
else
|
else
|
||||||
ifs->Label = do_blob_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
ifs->u.Label = do_blob_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
CELL *sreg;
|
CELL *sreg;
|
||||||
@ -4069,7 +4072,7 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
} else {
|
} else {
|
||||||
sreg = NULL;
|
sreg = NULL;
|
||||||
}
|
}
|
||||||
ifs->Label = do_compound_index(min, max, sreg, cint, 0, ArityOfFunctor(f), argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
ifs->u.Label = do_compound_index(min, max, sreg, cint, 0, ArityOfFunctor(f), argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
||||||
}
|
}
|
||||||
grp->FirstClause = min = max+1;
|
grp->FirstClause = min = max+1;
|
||||||
}
|
}
|
||||||
@ -5512,9 +5515,9 @@ expand_index(struct intermediates *cint) {
|
|||||||
} else {
|
} else {
|
||||||
fe = lookup_f(f,ipc->u.sssl.l,ipc->u.sssl.s);
|
fe = lookup_f(f,ipc->u.sssl.l,ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
newpc = (yamop *)(fe->Label);
|
newpc = fe->u.labp;
|
||||||
|
|
||||||
labp = (yamop **)&(fe->Label);
|
labp = &(fe->u.labp);
|
||||||
if (newpc == e_code) {
|
if (newpc == e_code) {
|
||||||
/* we found it */
|
/* we found it */
|
||||||
parentcl = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
parentcl = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
||||||
@ -5538,14 +5541,14 @@ expand_index(struct intermediates *cint) {
|
|||||||
ae = lookup_c(t,ipc->u.sssl.l,ipc->u.sssl.s);
|
ae = lookup_c(t,ipc->u.sssl.l,ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
|
|
||||||
labp = (yamop **)(&(ae->Label));
|
labp = &(ae->u.labp);
|
||||||
if (ae->Label == (CELL)e_code) {
|
if (ae->u.labp == e_code) {
|
||||||
/* we found it */
|
/* we found it */
|
||||||
parentcl = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
parentcl = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
||||||
ipc = NULL;
|
ipc = NULL;
|
||||||
} else {
|
} else {
|
||||||
ClausePointer npar = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
ClausePointer npar = code_to_indexcl(ipc->u.sssl.l,is_lu);
|
||||||
ipc = (yamop *)(ae->Label);
|
ipc = ae->u.labp;
|
||||||
parentcl = index_jmp(npar, parentcl, ipc, is_lu, e_code);
|
parentcl = index_jmp(npar, parentcl, ipc, is_lu, e_code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6113,10 +6116,10 @@ expand_ctable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Term at)
|
|||||||
n = 1;
|
n = 1;
|
||||||
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
|
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
|
||||||
if (tmp->Tag != Zero) n++;
|
if (tmp->Tag != Zero) n++;
|
||||||
else fail_l = tmp->Label;
|
else fail_l = tmp->u.Label;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fail_l = old_ae[n].Label;
|
fail_l = old_ae[n].u.Label;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
if (n > MIN_HASH_ENTRIES) {
|
if (n > MIN_HASH_ENTRIES) {
|
||||||
@ -6132,14 +6135,14 @@ expand_ctable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Term at)
|
|||||||
pc->u.sssl.s = cases;
|
pc->u.sssl.s = cases;
|
||||||
for (i=0; i<cases; i++) {
|
for (i=0; i<cases; i++) {
|
||||||
target[i].Tag = Zero;
|
target[i].Tag = Zero;
|
||||||
target[i].Label = fail_l;
|
target[i].u.Label = fail_l;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pc->opc = Yap_opcode(_if_cons);
|
pc->opc = Yap_opcode(_if_cons);
|
||||||
pc->u.sssl.s = n;
|
pc->u.sssl.s = n;
|
||||||
target = (AtomSwiEntry *)emit_switch_space(n+1, sizeof(AtomSwiEntry), cint);
|
target = (AtomSwiEntry *)emit_switch_space(n+1, sizeof(AtomSwiEntry), cint);
|
||||||
target[n].Tag = Zero;
|
target[n].Tag = Zero;
|
||||||
target[n].Label = fail_l;
|
target[n].u.Label = fail_l;
|
||||||
}
|
}
|
||||||
for (i = 0; i < i0; i++,old_ae++) {
|
for (i = 0; i < i0; i++,old_ae++) {
|
||||||
Term tag = old_ae->Tag;
|
Term tag = old_ae->Tag;
|
||||||
@ -6147,7 +6150,7 @@ expand_ctable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Term at)
|
|||||||
if (tag != Zero) {
|
if (tag != Zero) {
|
||||||
AtomSwiEntry *ics = fetch_centry(target, tag, i, n);
|
AtomSwiEntry *ics = fetch_centry(target, tag, i, n);
|
||||||
ics->Tag = tag;
|
ics->Tag = tag;
|
||||||
ics->Label = old_ae->Label;
|
ics->u.Label = old_ae->u.Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* support for threads */
|
/* support for threads */
|
||||||
@ -6172,10 +6175,10 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
|
|||||||
n = 1;
|
n = 1;
|
||||||
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
|
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
|
||||||
if (tmp->Tag != Zero) n++;
|
if (tmp->Tag != Zero) n++;
|
||||||
else fail_l = tmp->Label;
|
else fail_l = tmp->u.Label;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fail_l = old_fe[n].Label;
|
fail_l = old_fe[n].u.Label;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
if (n > MIN_HASH_ENTRIES) {
|
if (n > MIN_HASH_ENTRIES) {
|
||||||
@ -6194,7 +6197,7 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
|
|||||||
target = (FuncSwiEntry *)emit_switch_space(cases, sizeof(FuncSwiEntry), cint);
|
target = (FuncSwiEntry *)emit_switch_space(cases, sizeof(FuncSwiEntry), cint);
|
||||||
for (i=0; i<cases; i++) {
|
for (i=0; i<cases; i++) {
|
||||||
target[i].Tag = NULL;
|
target[i].Tag = NULL;
|
||||||
target[i].Label = fail_l;
|
target[i].u.Label = fail_l;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pc->opc = Yap_opcode(_if_func);
|
pc->opc = Yap_opcode(_if_func);
|
||||||
@ -6203,7 +6206,7 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
|
|||||||
pc->u.sssl.w = 0;
|
pc->u.sssl.w = 0;
|
||||||
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
|
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
|
||||||
target[n].Tag = Zero;
|
target[n].Tag = Zero;
|
||||||
target[n].Label = fail_l;
|
target[n].u.Label = fail_l;
|
||||||
}
|
}
|
||||||
for (i = 0; i < i0; i++,old_fe++) {
|
for (i = 0; i < i0; i++,old_fe++) {
|
||||||
Functor f = old_fe->Tag;
|
Functor f = old_fe->Tag;
|
||||||
@ -6211,7 +6214,7 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
|
|||||||
if (f != NULL) {
|
if (f != NULL) {
|
||||||
FuncSwiEntry *ifs = fetch_fentry(target, f, i, n);
|
FuncSwiEntry *ifs = fetch_fentry(target, f, i, n);
|
||||||
ifs->Tag = old_fe->Tag;
|
ifs->Tag = old_fe->Tag;
|
||||||
ifs->Label = old_fe->Label;
|
ifs->u.Label = old_fe->u.Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
replace_index_block(blk, pc->u.sssl.l, (yamop *)target, ap);
|
replace_index_block(blk, pc->u.sssl.l, (yamop *)target, ap);
|
||||||
@ -7042,7 +7045,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
|
|||||||
if (!IsExtensionFunctor(f)) {
|
if (!IsExtensionFunctor(f)) {
|
||||||
current_arity = ArityOfFunctor(f);
|
current_arity = ArityOfFunctor(f);
|
||||||
}
|
}
|
||||||
newpc = (yamop *)(fe->Label);
|
newpc = fe->u.labp;
|
||||||
|
|
||||||
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
||||||
/* we found it */
|
/* we found it */
|
||||||
@ -7061,12 +7064,12 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
|
|||||||
fe->Tag = f;
|
fe->Tag = f;
|
||||||
ipc->u.sssl.e++;
|
ipc->u.sssl.e++;
|
||||||
}
|
}
|
||||||
fe->Label = (UInt)cls->CurrentCode;
|
fe->u.labp = cls->CurrentCode;
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else {
|
} else {
|
||||||
yamop *newpc = (yamop *)(fe->Label);
|
yamop *newpc = fe->u.labp;
|
||||||
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
||||||
sp = cross_block(sp, (yamop **)&(fe->Label), ap);
|
sp = cross_block(sp, &(fe->u.labp), ap);
|
||||||
ipc = newpc;
|
ipc = newpc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7099,7 +7102,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
|
|||||||
} else {
|
} else {
|
||||||
ae = lookup_c(at, ipc->u.sssl.l, ipc->u.sssl.s);
|
ae = lookup_c(at, ipc->u.sssl.l, ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
newpc = (yamop *)(ae->Label);
|
newpc = ae->u.labp;
|
||||||
|
|
||||||
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
||||||
/* nothing more to do */
|
/* nothing more to do */
|
||||||
@ -7113,13 +7116,13 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
|
|||||||
ae->Tag = at;
|
ae->Tag = at;
|
||||||
ipc->u.sssl.e++;
|
ipc->u.sssl.e++;
|
||||||
}
|
}
|
||||||
ae->Label = (UInt)cls->CurrentCode;
|
ae->u.labp = cls->CurrentCode;
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else {
|
} else {
|
||||||
yamop *newpc = (yamop *)(ae->Label);
|
yamop *newpc = ae->u.labp;
|
||||||
|
|
||||||
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
||||||
sp = cross_block(sp, (yamop **)&(ae->Label), ap);
|
sp = cross_block(sp, &(ae->u.labp), ap);
|
||||||
ipc = newpc;
|
ipc = newpc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7238,7 +7241,7 @@ contract_ftable(yamop *ipc, ClauseUnion *blk, PredEntry *ap, Functor f) {
|
|||||||
fep = (FuncSwiEntry *)(ipc->u.sssl.l);
|
fep = (FuncSwiEntry *)(ipc->u.sssl.l);
|
||||||
while (fep->Tag != f) fep++;
|
while (fep->Tag != f) fep++;
|
||||||
}
|
}
|
||||||
fep->Label = (CELL)FAILCODE;
|
fep->u.labp = FAILCODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -7252,7 +7255,7 @@ contract_ctable(yamop *ipc, ClauseUnion *blk, PredEntry *ap, Term at) {
|
|||||||
cep = (AtomSwiEntry *)(ipc->u.sssl.l);
|
cep = (AtomSwiEntry *)(ipc->u.sssl.l);
|
||||||
while (cep->Tag != at) cep++;
|
while (cep->Tag != at) cep++;
|
||||||
}
|
}
|
||||||
cep->Label = (CELL)FAILCODE;
|
cep->u.labp = FAILCODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -7530,21 +7533,21 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
|
|||||||
if (!IsExtensionFunctor(f)) {
|
if (!IsExtensionFunctor(f)) {
|
||||||
current_arity = ArityOfFunctor(f);
|
current_arity = ArityOfFunctor(f);
|
||||||
}
|
}
|
||||||
newpc = (yamop *)(fe->Label);
|
newpc = fe->u.labp;
|
||||||
|
|
||||||
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
||||||
/* we found it */
|
/* we found it */
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else if (newpc == FAILCODE) {
|
} else if (newpc == FAILCODE) {
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else if (IN_BETWEEN(bg,fe->Label,lt)) {
|
} else if (IN_BETWEEN(bg,fe->u.Label,lt)) {
|
||||||
/* oops, nothing there */
|
/* oops, nothing there */
|
||||||
contract_ftable(ipc, current_block(sp), ap, f);
|
contract_ftable(ipc, current_block(sp), ap, f);
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else {
|
} else {
|
||||||
yamop *newpc = (yamop *)(fe->Label);
|
yamop *newpc = fe->u.labp;
|
||||||
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
||||||
sp = cross_block(sp, (yamop **)&(fe->Label), ap);
|
sp = cross_block(sp, &(fe->u.labp), ap);
|
||||||
ipc = newpc;
|
ipc = newpc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7577,22 +7580,22 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
|
|||||||
} else {
|
} else {
|
||||||
ae = lookup_c(at, ipc->u.sssl.l, ipc->u.sssl.s);
|
ae = lookup_c(at, ipc->u.sssl.l, ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
newpc = (yamop *)(ae->Label);
|
newpc = ae->u.labp;
|
||||||
|
|
||||||
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
|
||||||
/* we found it */
|
/* we found it */
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else if (newpc == FAILCODE) {
|
} else if (newpc == FAILCODE) {
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else if (IN_BETWEEN(bg,ae->Label,lt)) {
|
} else if (IN_BETWEEN(bg,ae->u.Label,lt)) {
|
||||||
/* oops, nothing there */
|
/* oops, nothing there */
|
||||||
contract_ctable(ipc, current_block(sp), ap, at);
|
contract_ctable(ipc, current_block(sp), ap, at);
|
||||||
ipc = pop_path(&sp, cls, ap);
|
ipc = pop_path(&sp, cls, ap);
|
||||||
} else {
|
} else {
|
||||||
yamop *newpc = (yamop *)(ae->Label);
|
yamop *newpc = ae->u.labp;
|
||||||
|
|
||||||
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
sp = fetch_new_block(sp, &(ipc->u.sssl.l), ap);
|
||||||
sp = cross_block(sp, (yamop **)&(ae->Label), ap);
|
sp = cross_block(sp, &(ae->u.labp), ap);
|
||||||
ipc = newpc;
|
ipc = newpc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8190,8 +8193,8 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
} else {
|
} else {
|
||||||
fe = lookup_f(f, ipc->u.sssl.l, ipc->u.sssl.s);
|
fe = lookup_f(f, ipc->u.sssl.l, ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
jlbl = (yamop **)(&fe->Label);
|
jlbl = &(fe->u.labp);
|
||||||
ipc = (yamop *)(fe->Label);
|
ipc = fe->u.labp;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
@ -8217,8 +8220,8 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
} else {
|
} else {
|
||||||
ae = lookup_c(t, ipc->u.sssl.l, ipc->u.sssl.s);
|
ae = lookup_c(t, ipc->u.sssl.l, ipc->u.sssl.s);
|
||||||
}
|
}
|
||||||
jlbl = (yamop **)(&ae->Label);
|
jlbl = &(ae->u.labp);
|
||||||
ipc = (yamop *)(ae->Label);
|
ipc = ae->u.labp;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case _expand_index:
|
case _expand_index:
|
||||||
|
10
H/index.h
10
H/index.h
@ -67,13 +67,19 @@ typedef struct {
|
|||||||
/* switch_on_cons */
|
/* switch_on_cons */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Term Tag;
|
Term Tag;
|
||||||
UInt Label;
|
union {
|
||||||
|
UInt Label;
|
||||||
|
yamop *labp;
|
||||||
|
} u;
|
||||||
} AtomSwiEntry;
|
} AtomSwiEntry;
|
||||||
|
|
||||||
/* switch_on_func */
|
/* switch_on_func */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Functor Tag;
|
Functor Tag;
|
||||||
UInt Label;
|
union {
|
||||||
|
UInt Label;
|
||||||
|
yamop *labp;
|
||||||
|
} u;
|
||||||
} FuncSwiEntry;
|
} FuncSwiEntry;
|
||||||
|
|
||||||
/* switch_on_type */
|
/* switch_on_type */
|
||||||
|
Reference in New Issue
Block a user