/* the big main central interpreter loop. processes return codes from eval(). 0 indicate noerror yieldtocaller indicates `showpage` has been called using SHOWPAGE_RETURN semantics. ioblock indicates a blocked io operation. contextswitch indicates the `yield` operator has been called. all other values indicate an error condition to be returned to postscript. */ int mainloop(Xpost_Context *ctx) { int ret; ctxswitch: xpost_ctx = ctx = _switch_context(ctx); itpdata->cid = ctx->id; while(!ctx->quit) { ret = eval(ctx); if (ret) switch (ret) { case yieldtocaller: return 1; case ioblock: ctx->state = C_IOBLOCK; /* fallthrough */ case contextswitch: goto ctxswitch; default: _onerror(ctx, ret); } } return 0; }
void ConfigTree::error(const std::string& message) const { _onerror(_filename, _path, message); std::abort(); }