From 254ea37e1f5e3692f6a2fb9a9758f00c75dbca8d Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Mon, 18 Jan 2016 14:14:58 +0100 Subject: Simplify try/catch macros. Use a pointer to the top error stack slot instead of access via array and index. Return the stack slot from fz_push_try. --- source/fitz/context.c | 4 ++-- source/fitz/error.c | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'source/fitz') diff --git a/source/fitz/context.c b/source/fitz/context.c index 5d3373c2..52c225e9 100644 --- a/source/fitz/context.c +++ b/source/fitz/context.c @@ -100,7 +100,7 @@ fz_drop_context(fz_context *ctx) if (ctx->error) { - assert(ctx->error->top == -1); + assert(ctx->error->top == ctx->error->stack - 1); fz_free(ctx, ctx->error); } @@ -129,7 +129,7 @@ new_context_phase1(const fz_alloc_context *alloc, const fz_locks_context *locks) ctx->error = Memento_label(fz_malloc_no_throw(ctx, sizeof(fz_error_context)), "fz_error_context"); if (!ctx->error) goto cleanup; - ctx->error->top = -1; + ctx->error->top = ctx->error->stack - 1; ctx->error->errcode = FZ_ERROR_NONE; ctx->error->message[0] = 0; diff --git a/source/fitz/error.c b/source/fitz/error.c index a34e5b79..724fd078 100644 --- a/source/fitz/error.c +++ b/source/fitz/error.c @@ -82,10 +82,10 @@ void fz_warn(fz_context *ctx, const char *fmt, ...) FZ_NORETURN static void throw(fz_context *ctx) { - if (ctx->error->top >= 0) + if (ctx->error->top >= ctx->error->stack) { - ctx->error->stack[ctx->error->top].code += 2; - fz_longjmp(ctx->error->stack[ctx->error->top].buffer, ctx->error->stack[ctx->error->top].code); + ctx->error->top->code += 2; + fz_longjmp(ctx->error->top->buffer, 1); } else { @@ -100,15 +100,16 @@ FZ_NORETURN static void throw(fz_context *ctx) } } -void fz_push_try(fz_context *ctx) +fz_error_stack_slot *fz_push_try(fz_context *ctx) { /* If we would overflow the exception stack, throw an exception instead * of entering the try block. */ - if (ctx->error->top + 1 >= nelem(ctx->error->stack)) + if (ctx->error->top + 1 >= ctx->error->stack + nelem(ctx->error->stack)) fz_throw(ctx, FZ_ERROR_GENERIC, "exception stack overflow!"); ctx->error->top++; - ctx->error->stack[ctx->error->top].code = 0; + ctx->error->top->code = 0; + return ctx->error->top; } int fz_caught(fz_context *ctx) -- cgit v1.2.3