static int gmp_too_big() { GET_LD DEBUG(1, Sdprintf("Signalling GMP overflow\n")); return (int)outOfStack((Stack)&LD->stacks.global, STACK_OVERFLOW_THROW); }
int raiseStackOverflow(int overflow) { GET_LD Stack s; switch(overflow) { case LOCAL_OVERFLOW: s = (Stack)&LD->stacks.local; break; case GLOBAL_OVERFLOW: s = (Stack)&LD->stacks.global; break; case TRAIL_OVERFLOW: s = (Stack)&LD->stacks.trail; break; case ARGUMENT_OVERFLOW: s = (Stack)&LD->stacks.argument; break; case MEMORY_OVERFLOW: return PL_error(NULL, 0, NULL, ERR_NOMEM); case FALSE: /* some other error is pending */ return FALSE; default: s = NULL; assert(0); } return outOfStack(s, STACK_OVERFLOW_RAISE); }
void pushArgumentStack__LD(Word p ARG_LD) { Word *newbase; size_t newsize = nextStackSize((Stack)&LD->stacks.argument, 1); if ( newsize && (newbase = stack_realloc(aBase, newsize)) ) { intptr_t as = newbase - aBase; if ( as ) { QueryFrame qf; aTop += as; aBase = newbase; for(qf=LD->query; qf; qf = qf->parent) qf->aSave += as; } aMax = addPointer(newbase, newsize); *aTop++ = p; } else outOfStack((Stack)&LD->stacks.argument, STACK_OVERFLOW_THROW); }