Revert "ENV may not be in scope of catch in very special cases (eg, call counter)."

This reverts commit 15f9a68a35480a054d74c2a96e8047da6aa662b7.

Botch!
This commit is contained in:
Costa Vitor 2009-06-26 13:04:07 -05:00
parent 15f9a68a35
commit 69c0a52548

View File

@ -1570,36 +1570,49 @@ JumpToEnv(Term t) {
if (!(t = Yap_SaveTerm(t))) if (!(t = Yap_SaveTerm(t)))
return FALSE; return FALSE;
} }
/* find the first choicepoint that may be a catch */ do {
while (B != NULL && B->cp_ap != pos) { /* find the first choicepoint that may be a catch */
/* we are already doing a catch */ while (B != NULL && B->cp_ap != pos) {
if (B->cp_ap == catchpos) { /* we are already doing a catch */
P = (yamop *)FAILCODE; if (B->cp_ap == catchpos) {
if (first_func != NULL) { P = (yamop *)FAILCODE;
B = first_func; if (first_func != NULL) {
B = first_func;
}
return(FALSE);
} }
return(FALSE); if (B->cp_ap == NOCODE) {
/* up to the C-code to deal with this! */
UncaughtThrow = TRUE;
B->cp_h = H;
EX = t;
return FALSE;
}
B = B->cp_b;
} }
if (B->cp_ap == NOCODE) { /* uncaught throw */
/* up to the C-code to deal with this! */ if (B == NULL) {
UncaughtThrow = TRUE; UncaughtThrow = TRUE;
B->cp_h = H; B = B0;
EX = t;
return FALSE;
}
B = B->cp_b;
}
/* uncaught throw */
if (B == NULL) {
UncaughtThrow = TRUE;
B = B0;
#if PUSH_REGS #if PUSH_REGS
restore_absmi_regs(&Yap_standard_regs); restore_absmi_regs(&Yap_standard_regs);
#endif #endif
siglongjmp(Yap_RestartEnv,1); siglongjmp(Yap_RestartEnv,1);
} }
/* is it a continuation? */ /* is it a continuation? */
env = ENV = B->cp_env; env = B->cp_env;
while (env > ENV) {
ENV = ENV_Parent(ENV);
}
/* yes, we found it ! */
// while (env < ENV)
// env = ENV_Parent(env);
if (env == ENV) {
break;
}
/* oops, try next */
B = B->cp_b;
} while (TRUE);
/* step one environment above, otherwise we'll redo the original goal */ /* step one environment above, otherwise we'll redo the original goal */
B->cp_cp = (yamop *)env[E_CP]; B->cp_cp = (yamop *)env[E_CP];
B->cp_env = (CELL *)env[E_E]; B->cp_env = (CELL *)env[E_E];