From 826b45d21cb16d3f725c9bd37789f293e4a3302d Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Sat, 13 Jun 2009 15:21:13 -0500 Subject: [PATCH] fix handling of out stack while throwing an exception. --- C/exec.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/C/exec.c b/C/exec.c index 97c74c591..f21c21d56 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1463,6 +1463,17 @@ suspended_on_current_execution(Term t, Term t0) return t0 == ArgOfTerm(1, t1); } +static Term +build_error(void) +{ + Term ti[1], nt[2]; + ti[0] = MkAtomTerm(AtomStack); + nt[0] = Yap_MkApplTerm(FunctorResourceError, 1, ti); + nt[1] = MkAtomTerm(AtomInStackExpansion); + return Yap_MkApplTerm(FunctorError, 2, nt); +} + + static Term get_term(DBTerm *dbt, Term t) { @@ -1471,12 +1482,14 @@ get_term(DBTerm *dbt, Term t) if (Yap_Error_TYPE == OUT_OF_ATTVARS_ERROR) { Yap_Error_TYPE = YAP_NO_ERROR; if (!Yap_growglobal(NULL)) { - t = MkAtomTerm(AtomOutOfStackError); + t = build_error(); + break; } } else { Yap_Error_TYPE = YAP_NO_ERROR; if (!Yap_growstack(dbt->NOfCells*CellSize)) { - t = MkAtomTerm(AtomOutOfStackError); + t = build_error(); + break; } } }