From ea45f3eb284e86354f19536b22a49b61f1800cc3 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 13 Jan 2000 14:30:47 -0200 Subject: better separation between debug code and regular code --- lmem.c | 114 +++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/lmem.c b/lmem.c index 349bf751..81935d98 100644 --- a/lmem.c +++ b/lmem.c @@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.22 1999/12/14 18:31:20 roberto Exp roberto $ +** $Id: lmem.c,v 1.23 1999/12/27 17:33:22 roberto Exp roberto $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -26,56 +26,32 @@ - -void *luaM_growaux (lua_State *L, void *block, unsigned long nelems, - int inc, int size, const char *errormsg, unsigned long limit) { - unsigned long newn = nelems+inc; - if (newn >= limit) lua_error(L, errormsg); - if ((newn ^ nelems) <= nelems || /* still the same power-of-2 limit? */ - (nelems > 0 && newn < MINPOWER2)) /* or block already is MINPOWER2? */ - return block; /* do not need to reallocate */ - else /* it crossed a power-of-2 boundary; grow to next power */ - return luaM_realloc(L, block, luaO_power2(newn)*size); -} - - -#ifndef DEBUG - +#ifdef DEBUG /* -** generic allocation routine. +** {====================================================================== +** Controled version for realloc. +** ======================================================================= */ -void *luaM_realloc (lua_State *L, void *block, unsigned long size) { - size_t s = (size_t)size; - if (s != size) - lua_error(L, "memory allocation error: block too big"); - if (size == 0) { - free(block); /* block may be NULL; that is OK for free */ - return NULL; - } - block = realloc(block, s); - if (block == NULL) - lua_error(L, memEM); - return block; -} +#include +#include -#else -/* DEBUG */ -#include +#define realloc(b, s) debug_realloc(b, s) +#define malloc(b) debug_realloc(NULL, 0) +#define free(b) debug_realloc(b, 0) -#define HEADER (sizeof(double)) +#define HEADER (sizeof(double)) /* maximum alignment */ #define MARKSIZE 16 - -#define MARK 55 +#define MARK 0x55 /* 01010101 (a nice pattern) */ #define blocksize(b) ((unsigned long *)((char *)(b) - HEADER)) -unsigned long numblocks = 0; -unsigned long totalmem = 0; +unsigned long memdebug_numblocks = 0; +unsigned long memdebug_total = 0; static void *checkblock (void *block) { @@ -83,43 +59,41 @@ static void *checkblock (void *block) { unsigned long size = *b; int i; for (i=0;i size) oldsize = size; memcpy(newblock+HEADER, block, oldsize); freeblock(block); /* erase (and check) old copy */ } - if (newblock == NULL) - lua_error(L, memEM); - totalmem += size; - numblocks++; + if (newblock == NULL) return NULL; + memdebug_total += size; + memdebug_numblocks++; *(unsigned long *)newblock = size; for (i=0;i= limit) lua_error(L, errormsg); + if ((newn ^ nelems) <= nelems || /* still the same power-of-2 limit? */ + (nelems > 0 && newn < MINPOWER2)) /* or block already is MINPOWER2? */ + return block; /* do not need to reallocate */ + else /* it crossed a power-of-2 boundary; grow to next power */ + return luaM_realloc(L, block, luaO_power2(newn)*size); +} + + +/* +** generic allocation routine. +*/ +void *luaM_realloc (lua_State *L, void *block, unsigned long size) { + size_t s = (size_t)size; + if (s != size) + lua_error(L, "memory allocation error: block too big"); + if (size == 0) { + free(block); /* block may be NULL; that is OK for free */ + return NULL; + } + block = realloc(block, s); + if (block == NULL) + lua_error(L, memEM); + return block; +} + + -- cgit v1.2.3-55-g6feb