From db71493ffd90e2668259efbb549f7a781c2530db Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Wed, 18 Jul 2012 17:29:13 -0400 Subject: Support fancy expressions in module-level 'val' declarations --- src/c/urweb.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/c/urweb.c') diff --git a/src/c/urweb.c b/src/c/urweb.c index 802a1620..d0b6987c 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -465,6 +465,8 @@ struct uw_context { unsigned nextId; + int amInitializing; + char error_message[ERROR_BUF_LEN]; }; @@ -536,6 +538,8 @@ uw_context uw_init(int id, void *logger_data, uw_logger log_debug) { ctx->nextId = 0; + ctx->amInitializing = 0; + return ctx; } @@ -613,6 +617,7 @@ void uw_reset_keep_error_message(uw_context ctx) { ctx->script_header = ""; ctx->queryString = NULL; ctx->nextId = 0; + ctx->amInitializing = 0; } void uw_reset_keep_request(uw_context ctx) { @@ -1204,14 +1209,31 @@ void uw_set_heap_front(uw_context ctx, char *fr) { ctx->heap.front = fr; } +void uw_begin_initializing(uw_context ctx) { + ctx->amInitializing = 1; +} + +void uw_end_initializing(uw_context ctx) { + ctx->amInitializing = 0; +} + void *uw_malloc(uw_context ctx, size_t len) { void *result; - uw_check_heap(ctx, len); + if (ctx->amInitializing) { + result = malloc(len); - result = ctx->heap.front; - ctx->heap.front += len; - return result; + if (result) + return result; + else + uw_error(ctx, FATAL, "uw_malloc: malloc() returns 0"); + } else { + uw_check_heap(ctx, len); + + result = ctx->heap.front; + ctx->heap.front += len; + return result; + } } void uw_begin_region(uw_context ctx) { -- cgit v1.2.3