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:
		
							
								
								
									
										133
									
								
								C/index.c
									
									
									
									
									
								
							
							
						
						
									
										133
									
								
								C/index.c
									
									
									
									
									
								
							@@ -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:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								H/index.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								H/index.h
									
									
									
									
									
								
							@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user