From 5142e630bf91e2353f4397e03593ab56b3a07b86 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 21 Nov 2002 15:19:11 -0200 Subject: new macro `condhardstacktests' to control hard stack tests --- ldo.c | 3 ++- ldo.h | 15 +++++++++++++-- lgc.c | 4 +++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ldo.c b/ldo.c index f781da5e..45d820c7 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 1.205 2002/11/21 15:16:04 roberto Exp roberto $ +** $Id: ldo.c,v 1.206 2002/11/21 15:46:44 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -218,6 +218,7 @@ StkId luaD_precall (lua_State *L, StkId func) { if (!ttisfunction(func)) /* `func' is not a function? */ func = tryfuncTM(L, func); /* check the `function' tag method */ if (L->ci + 1 == L->end_ci) luaD_growCI(L); + else condhardstacktests(luaD_reallocCI(L, L->size_ci)); cl = &clvalue(func)->l; if (!cl->isC) { /* Lua function? prepare its call */ CallInfo *ci; diff --git a/ldo.h b/ldo.h index d2787b29..36b48e71 100644 --- a/ldo.h +++ b/ldo.h @@ -1,5 +1,5 @@ /* -** $Id: ldo.h,v 1.52 2002/09/02 20:00:41 roberto Exp roberto $ +** $Id: ldo.h,v 1.53 2002/11/21 16:46:16 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -13,10 +13,21 @@ #include "lzio.h" +/* +** macro to control inclusion of some hard tests on stack reallocation +*/ +#ifndef CONDHARDSTACKTESTS +#define condhardstacktests(x) { /* empty */ } +#else +#define condhardstacktests(x) x +#endif + #define luaD_checkstack(L,n) \ if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TObject)) \ - luaD_growstack(L, n) + luaD_growstack(L, n); \ + else condhardstacktests(luaD_reallocstack(L, L->stacksize)); + #define incr_top(L) {luaD_checkstack(L,1); L->top++;} diff --git a/lgc.c b/lgc.c index d77b1a47..f14bfb25 100644 --- a/lgc.c +++ b/lgc.c @@ -1,5 +1,5 @@ /* -** $Id: lgc.c,v 1.160 2002/11/21 14:17:15 roberto Exp roberto $ +** $Id: lgc.c,v 1.161 2002/11/21 15:46:20 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -224,9 +224,11 @@ static void checkstacksizes (lua_State *L, StkId max) { int used = L->ci - L->base_ci; /* number of `ci' in use */ if (4*used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci) luaD_reallocCI(L, L->size_ci/2); /* still big enough... */ + else condhardstacktests(luaD_reallocCI(L, L->size_ci)); used = max - L->stack; /* part of stack in use */ if (4*used < L->stacksize && 2*(BASIC_STACK_SIZE+EXTRA_STACK) < L->stacksize) luaD_reallocstack(L, L->stacksize/2); /* still big enough... */ + else condhardstacktests(luaD_reallocstack(L, L->stacksize)); } -- cgit v1.2.3-55-g6feb