stop counters at counter underflow event

This commit is contained in:
Vitor Santos Costa 2009-06-26 08:42:40 -05:00
parent 4d6cd779cb
commit ff20a23e64

View File

@ -518,20 +518,27 @@ Yap_Error(yap_error_number type, Term where, char *format,...)
break; break;
case CALL_COUNTER_UNDERFLOW: case CALL_COUNTER_UNDERFLOW:
/* Do a long jump */ /* Do a long jump */
PredEntriesCounter--; ReductionsCounterOn = FALSE;
PredEntriesCounterOn = FALSE;
RetriesCounterOn = FALSE;
Yap_JumpToEnv(MkAtomTerm(AtomCallCounter)); Yap_JumpToEnv(MkAtomTerm(AtomCallCounter));
P = (yamop *)FAILCODE; P = (yamop *)FAILCODE;
Yap_PrologMode &= ~InErrorMode; Yap_PrologMode &= ~InErrorMode;
return(P); return(P);
case PRED_ENTRY_COUNTER_UNDERFLOW: case PRED_ENTRY_COUNTER_UNDERFLOW:
/* Do a long jump */ /* Do a long jump */
ReductionsCounterOn = FALSE;
PredEntriesCounterOn = FALSE;
RetriesCounterOn = FALSE;
Yap_JumpToEnv(MkAtomTerm(AtomCallAndRetryCounter)); Yap_JumpToEnv(MkAtomTerm(AtomCallAndRetryCounter));
P = (yamop *)FAILCODE; P = (yamop *)FAILCODE;
Yap_PrologMode &= ~InErrorMode; Yap_PrologMode &= ~InErrorMode;
return(P); return(P);
case RETRY_COUNTER_UNDERFLOW: case RETRY_COUNTER_UNDERFLOW:
/* Do a long jump */ /* Do a long jump */
PredEntriesCounter--; ReductionsCounterOn = FALSE;
PredEntriesCounterOn = FALSE;
RetriesCounterOn = FALSE;
Yap_JumpToEnv(MkAtomTerm(AtomRetryCounter)); Yap_JumpToEnv(MkAtomTerm(AtomRetryCounter));
P = (yamop *)FAILCODE; P = (yamop *)FAILCODE;
Yap_PrologMode &= ~InErrorMode; Yap_PrologMode &= ~InErrorMode;