From 2d425fb7b438e1ecb13070d799101384ace27988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Wed, 4 Aug 2010 11:34:04 +0100 Subject: [PATCH] don't go set jumping if in UserCCode. Just say there is an exception. --- C/errors.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/C/errors.c b/C/errors.c index 6cec4dbfd..97a1ceab6 100644 --- a/C/errors.c +++ b/C/errors.c @@ -1846,12 +1846,24 @@ Yap_Error(yap_error_number type, Term where, char *format,...) siglongjmp(Yap_RestartEnv,1); } UNLOCK(SignalLock); - if (type == PURE_ABORT) { - Yap_JumpToEnv(MkAtomTerm(AtomDAbort)); - CreepFlag = LCL0-ASP; - } else - Yap_JumpToEnv(Yap_MkApplTerm(fun, 2, nt)); - P = (yamop *)FAILCODE; + /* wait if we we are in user code, + it's up to her to decide */ + + if (Yap_PrologMode & UserCCallMode) { + if (EX) { + if (!(EX = Yap_StoreTermInDB(Yap_MkApplTerm(fun, 2, nt), 0))) { + /* fat chance */ + siglongjmp(Yap_RestartEnv,1); + } + } + } else { + if (type == PURE_ABORT) { + Yap_JumpToEnv(MkAtomTerm(AtomDAbort)); + CreepFlag = LCL0-ASP; + } else + Yap_JumpToEnv(Yap_MkApplTerm(fun, 2, nt)); + P = (yamop *)FAILCODE; + } } else { Yap_PrologMode &= ~InErrorMode; }