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:
vsc 2007-05-02 11:01:41 +00:00
parent b15193885e
commit d79a6f8dcf
2 changed files with 76 additions and 67 deletions

133
C/index.c
View File

@ -11,8 +11,11 @@
* File: index.c *
* 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 $
* 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
* 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;
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) {
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;
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) {
LogUpdIndex *lcl = ClauseCodeToLogUpdIndex(cpc->rnd2);
@ -3542,7 +3545,7 @@ emit_switch_space(UInt n, UInt item_size, struct intermediates *cint)
}
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;
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);
for (i=0; i<n; i++) {
target[i].Tag = Zero;
target[i].Label = fail_l;
target[i].u.labp = fail_l;
}
Yap_emit(op, Unsigned(n), (CELL)target, cint);
} 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);
for (i=0; i<n; i++) {
target[i].Label = fail_l;
target[i].u.labp = fail_l;
}
target[n].Tag = Zero;
target[n].Label = fail_l;
target[n].u.labp = fail_l;
Yap_emit(op, Unsigned(n), (CELL)target, cint);
}
return target;
@ -3609,7 +3612,7 @@ fetch_centry(AtomSwiEntry *cebase, Term wt, int i, int n)
}
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;
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);
for (i=0; i<n; i++) {
target[i].Tag = NULL;
target[i].Label = fail_l;
target[i].u.labp = fail_l;
}
Yap_emit(op, Unsigned(n), (CELL)target, cint);
} else {
@ -3632,10 +3635,10 @@ emit_fswitch(int n, UInt fail_l, struct intermediates *cint)
op = if_f_op;
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
for (i=0; i<n; i++) {
target[i].Label = fail_l;
target[i].u.labp = fail_l;
}
target[n].Tag = NULL;
target[n].Label = fail_l;
target[n].u.labp = fail_l;
Yap_emit(op, Unsigned(n), (CELL)target, cint);
}
return target;
@ -3952,7 +3955,7 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
n = count_consts(grp);
lbl = new_label(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++) {
AtomSwiEntry *ics;
ClauseDef *max = min;
@ -3965,24 +3968,24 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
if (sreg != NULL) {
if (ap->PredFlags & LogUpdatePredFlag && max > min) {
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 {
ics->Label = suspend_indexing(min, max, ap, cint);
ics->u.Label = suspend_indexing(min, max, ap, cint);
}
} 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) {
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 {
ics->Label = suspend_indexing(min, max, cint->CurrentPred, cint);
ics->u.Label = suspend_indexing(min, max, cint->CurrentPred, cint);
}
} 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 {
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;
}
@ -4000,7 +4003,7 @@ do_blobs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
PredEntry *ap = cint->CurrentPred;
n = count_blobs(grp);
cs = emit_cswitch(n, nxtlbl, cint);
cs = emit_cswitch(n, (yamop *)nxtlbl, cint);
for (i = 0; i < n; i++) {
AtomSwiEntry *ics;
ClauseDef *max = min;
@ -4012,12 +4015,12 @@ do_blobs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
if (min != max &&
(ap->PredFlags & LogUpdatePredFlag)) {
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 {
ics->Label = suspend_indexing(min, max, ap, cint);
ics->u.Label = suspend_indexing(min, max, ap, cint);
}
} 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;
}
@ -4039,7 +4042,7 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
lbl = new_label(cint);
Yap_emit(label_op, lbl, Zero, cint);
/* generate a switch */
fs = emit_fswitch(n, (UInt)FAILCODE, cint);
fs = emit_fswitch(n, FAILCODE, cint);
for (i = 0; i < n ; i++) {
Functor f = (Functor)RepAppl(min->Tag);
FuncSwiEntry *ifs;
@ -4052,14 +4055,14 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
/* delay non-trivial indexing
if (min != max &&
!IsExtensionFunctor(f)) {
ifs->Label = suspend_indexing(min, max, ap, cint);
ifs->u.Label = suspend_indexing(min, max, ap, cint);
} else
*/
if (IsExtensionFunctor(f)) {
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
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 {
CELL *sreg;
@ -4069,7 +4072,7 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
} else {
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;
}
@ -5512,9 +5515,9 @@ expand_index(struct intermediates *cint) {
} else {
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) {
/* we found it */
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);
}
labp = (yamop **)(&(ae->Label));
if (ae->Label == (CELL)e_code) {
labp = &(ae->u.labp);
if (ae->u.labp == e_code) {
/* we found it */
parentcl = code_to_indexcl(ipc->u.sssl.l,is_lu);
ipc = NULL;
} else {
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);
}
}
@ -6113,10 +6116,10 @@ expand_ctable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Term at)
n = 1;
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
if (tmp->Tag != Zero) n++;
else fail_l = tmp->Label;
else fail_l = tmp->u.Label;
}
} else {
fail_l = old_ae[n].Label;
fail_l = old_ae[n].u.Label;
n++;
}
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;
for (i=0; i<cases; i++) {
target[i].Tag = Zero;
target[i].Label = fail_l;
target[i].u.Label = fail_l;
}
} else {
pc->opc = Yap_opcode(_if_cons);
pc->u.sssl.s = n;
target = (AtomSwiEntry *)emit_switch_space(n+1, sizeof(AtomSwiEntry), cint);
target[n].Tag = Zero;
target[n].Label = fail_l;
target[n].u.Label = fail_l;
}
for (i = 0; i < i0; i++,old_ae++) {
Term tag = old_ae->Tag;
@ -6147,7 +6150,7 @@ expand_ctable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Term at)
if (tag != Zero) {
AtomSwiEntry *ics = fetch_centry(target, tag, i, n);
ics->Tag = tag;
ics->Label = old_ae->Label;
ics->u.Label = old_ae->u.Label;
}
}
/* support for threads */
@ -6172,10 +6175,10 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
n = 1;
for (i = 0; i < pc->u.sssl.s; i++,tmp++) {
if (tmp->Tag != Zero) n++;
else fail_l = tmp->Label;
else fail_l = tmp->u.Label;
}
} else {
fail_l = old_fe[n].Label;
fail_l = old_fe[n].u.Label;
n++;
}
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);
for (i=0; i<cases; i++) {
target[i].Tag = NULL;
target[i].Label = fail_l;
target[i].u.Label = fail_l;
}
} else {
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;
target = (FuncSwiEntry *)emit_switch_space(n+1, sizeof(FuncSwiEntry), cint);
target[n].Tag = Zero;
target[n].Label = fail_l;
target[n].u.Label = fail_l;
}
for (i = 0; i < i0; i++,old_fe++) {
Functor f = old_fe->Tag;
@ -6211,7 +6214,7 @@ expand_ftable(yamop *pc, ClauseUnion *blk, struct intermediates *cint, Functor f
if (f != NULL) {
FuncSwiEntry *ifs = fetch_fentry(target, f, i, n);
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);
@ -7042,7 +7045,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
if (!IsExtensionFunctor(f)) {
current_arity = ArityOfFunctor(f);
}
newpc = (yamop *)(fe->Label);
newpc = fe->u.labp;
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
/* we found it */
@ -7061,12 +7064,12 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
fe->Tag = f;
ipc->u.sssl.e++;
}
fe->Label = (UInt)cls->CurrentCode;
fe->u.labp = cls->CurrentCode;
ipc = pop_path(&sp, cls, ap);
} else {
yamop *newpc = (yamop *)(fe->Label);
yamop *newpc = fe->u.labp;
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;
}
}
@ -7099,7 +7102,7 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
} else {
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)) {
/* nothing more to do */
@ -7113,13 +7116,13 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
ae->Tag = at;
ipc->u.sssl.e++;
}
ae->Label = (UInt)cls->CurrentCode;
ae->u.labp = cls->CurrentCode;
ipc = pop_path(&sp, cls, ap);
} else {
yamop *newpc = (yamop *)(ae->Label);
yamop *newpc = ae->u.labp;
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;
}
}
@ -7238,7 +7241,7 @@ contract_ftable(yamop *ipc, ClauseUnion *blk, PredEntry *ap, Functor f) {
fep = (FuncSwiEntry *)(ipc->u.sssl.l);
while (fep->Tag != f) fep++;
}
fep->Label = (CELL)FAILCODE;
fep->u.labp = FAILCODE;
}
static void
@ -7252,7 +7255,7 @@ contract_ctable(yamop *ipc, ClauseUnion *blk, PredEntry *ap, Term at) {
cep = (AtomSwiEntry *)(ipc->u.sssl.l);
while (cep->Tag != at) cep++;
}
cep->Label = (CELL)FAILCODE;
cep->u.labp = FAILCODE;
}
static void
@ -7530,21 +7533,21 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
if (!IsExtensionFunctor(f)) {
current_arity = ArityOfFunctor(f);
}
newpc = (yamop *)(fe->Label);
newpc = fe->u.labp;
if (newpc == (yamop *)&(ap->cs.p_code.ExpandCode)) {
/* we found it */
ipc = pop_path(&sp, cls, ap);
} else if (newpc == FAILCODE) {
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 */
contract_ftable(ipc, current_block(sp), ap, f);
ipc = pop_path(&sp, cls, ap);
} else {
yamop *newpc = (yamop *)(fe->Label);
yamop *newpc = fe->u.labp;
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;
}
}
@ -7577,22 +7580,22 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
} else {
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)) {
/* we found it */
ipc = pop_path(&sp, cls, ap);
} else if (newpc == FAILCODE) {
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 */
contract_ctable(ipc, current_block(sp), ap, at);
ipc = pop_path(&sp, cls, ap);
} else {
yamop *newpc = (yamop *)(ae->Label);
yamop *newpc = ae->u.labp;
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;
}
}
@ -8190,8 +8193,8 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
} else {
fe = lookup_f(f, ipc->u.sssl.l, ipc->u.sssl.s);
}
jlbl = (yamop **)(&fe->Label);
ipc = (yamop *)(fe->Label);
jlbl = &(fe->u.labp);
ipc = fe->u.labp;
}
break;
case _index_dbref:
@ -8217,8 +8220,8 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
} else {
ae = lookup_c(t, ipc->u.sssl.l, ipc->u.sssl.s);
}
jlbl = (yamop **)(&ae->Label);
ipc = (yamop *)(ae->Label);
jlbl = &(ae->u.labp);
ipc = ae->u.labp;
}
break;
case _expand_index:

View File

@ -67,13 +67,19 @@ typedef struct {
/* switch_on_cons */
typedef struct {
Term Tag;
UInt Label;
union {
UInt Label;
yamop *labp;
} u;
} AtomSwiEntry;
/* switch_on_func */
typedef struct {
Functor Tag;
UInt Label;
union {
UInt Label;
yamop *labp;
} u;
} FuncSwiEntry;
/* switch_on_type */