[36641] trunk/dports/lang/lua
afb at macports.org
afb at macports.org
Fri May 9 00:36:58 PDT 2008
Revision: 36641
http://trac.macosforge.org/projects/macports/changeset/36641
Author: afb at macports.org
Date: 2008-05-09 00:36:56 -0700 (Fri, 09 May 2008)
Log Message:
-----------
patch needed patching, debug interface broken
Modified Paths:
--------------
trunk/dports/lang/lua/Portfile
trunk/dports/lang/lua/files/patch-lua-5.1.3.diff
Modified: trunk/dports/lang/lua/Portfile
===================================================================
--- trunk/dports/lang/lua/Portfile 2008-05-09 07:00:28 UTC (rev 36640)
+++ trunk/dports/lang/lua/Portfile 2008-05-09 07:36:56 UTC (rev 36641)
@@ -4,7 +4,7 @@
name lua
version 5.1.3
-revision 1
+revision 2
categories lang
platforms darwin
maintainers pmq openmaintainer
Modified: trunk/dports/lang/lua/files/patch-lua-5.1.3.diff
===================================================================
--- trunk/dports/lang/lua/files/patch-lua-5.1.3.diff 2008-05-09 07:00:28 UTC (rev 36640)
+++ trunk/dports/lang/lua/files/patch-lua-5.1.3.diff 2008-05-09 07:36:56 UTC (rev 36641)
@@ -1,393 +1,248 @@
-diff -c -r lua-5.1.3/src/lapi.c lua-5.1.3-patched/src/lapi.c
-*** ./src/lapi.c Thu Jan 3 13:20:39 2008
---- ./src/lapi.c Thu Feb 14 14:46:39 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: lapi.c,v 2.55.1.3 2008/01/03 15:20:39 roberto Exp $
- ** Lua API
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: lapi.c,v 2.55.1.4 2008/02/14 16:46:39 roberto Exp $
- ** Lua API
- ** See Copyright Notice in lua.h
- */
-***************
-*** 93,107 ****
-
-
- LUA_API int lua_checkstack (lua_State *L, int size) {
-! int res;
- lua_lock(L);
-! if ((L->top - L->base + size) > LUAI_MAXCSTACK)
- res = 0; /* stack overflow */
-! else {
- luaD_checkstack(L, size);
- if (L->ci->top < L->top + size)
- L->ci->top = L->top + size;
-- res = 1;
- }
- lua_unlock(L);
- return res;
---- 93,106 ----
-
-
- LUA_API int lua_checkstack (lua_State *L, int size) {
-! int res = 1;
- lua_lock(L);
-! if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK)
- res = 0; /* stack overflow */
-! else if (size > 0) {
- luaD_checkstack(L, size);
- if (L->ci->top < L->top + size)
- L->ci->top = L->top + size;
- }
- lua_unlock(L);
- return res;
-diff -c -r lua-5.1.3/src/lbaselib.c lua-5.1.3-patched/src/lbaselib.c
-*** ./src/lbaselib.c Sun Jan 20 11:53:22 2008
---- ./src/lbaselib.c Thu Feb 14 14:46:22 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: lbaselib.c,v 1.191.1.4 2008/01/20 13:53:22 roberto Exp $
- ** Basic library
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: lbaselib.c,v 1.191.1.6 2008/02/14 16:46:22 roberto Exp $
- ** Basic library
- ** See Copyright Notice in lua.h
- */
-***************
-*** 344,353 ****
- luaL_checktype(L, 1, LUA_TTABLE);
- i = luaL_optint(L, 2, 1);
- e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1));
- n = e - i + 1; /* number of elements */
-! if (n <= 0) return 0; /* empty range */
-! luaL_checkstack(L, n, "table too big to unpack");
-! for (; i<=e; i++) /* push arg[i...e] */
- lua_rawgeti(L, 1, i);
- return n;
- }
---- 344,355 ----
- luaL_checktype(L, 1, LUA_TTABLE);
- i = luaL_optint(L, 2, 1);
- e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1));
-+ if (i > e) return 0; /* empty range */
- n = e - i + 1; /* number of elements */
-! if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
-! return luaL_error(L, "too many results to unpack");
-! lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */
-! while (i++ < e) /* push arg[i + 1...e] */
- lua_rawgeti(L, 1, i);
- return n;
- }
-***************
-*** 526,532 ****
- status = lua_resume(co, narg);
- if (status == 0 || status == LUA_YIELD) {
- int nres = lua_gettop(co);
-! if (!lua_checkstack(L, nres))
- luaL_error(L, "too many results to resume");
- lua_xmove(co, L, nres); /* move yielded values */
- return nres;
---- 528,534 ----
- status = lua_resume(co, narg);
- if (status == 0 || status == LUA_YIELD) {
- int nres = lua_gettop(co);
-! if (!lua_checkstack(L, nres + 1))
- luaL_error(L, "too many results to resume");
- lua_xmove(co, L, nres); /* move yielded values */
- return nres;
-diff -c -r lua-5.1.3/src/ldebug.c lua-5.1.3-patched/src/ldebug.c
-*** ./src/ldebug.c Fri Dec 28 13:32:23 2007
---- ./src/ldebug.c Fri Apr 4 12:47:57 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: ldebug.c,v 2.29.1.3 2007/12/28 15:32:23 roberto Exp $
- ** Debug Interface
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: ldebug.c,v 2.29.1.5 2008/04/04 15:47:57 roberto Exp $
- ** Debug Interface
- ** See Copyright Notice in lua.h
- */
-***************
-*** 275,286 ****
-
- static int precheck (const Proto *pt) {
- check(pt->maxstacksize <= MAXSTACK);
-! lua_assert(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize);
-! lua_assert(!(pt->is_vararg & VARARG_NEEDSARG) ||
- (pt->is_vararg & VARARG_HASARG));
- check(pt->sizeupvalues <= pt->nups);
- check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0);
-! check(GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN);
- return 1;
- }
-
---- 275,286 ----
-
- static int precheck (const Proto *pt) {
- check(pt->maxstacksize <= MAXSTACK);
-! check(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize);
-! check(!(pt->is_vararg & VARARG_NEEDSARG) ||
- (pt->is_vararg & VARARG_HASARG));
- check(pt->sizeupvalues <= pt->nups);
- check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0);
-! check(pt->sizecode > 0 && GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN);
- return 1;
- }
-
-***************
-*** 346,354 ****
- int dest = pc+1+b;
- check(0 <= dest && dest < pt->sizecode);
- if (dest > 0) {
-! /* cannot jump to a setlist count */
-! Instruction d = pt->code[dest-1];
-! check(!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0));
- }
- }
- break;
---- 346,363 ----
- int dest = pc+1+b;
- check(0 <= dest && dest < pt->sizecode);
- if (dest > 0) {
-! int j;
-! /* check that it does not jump to a setlist count; this
-! is tricky, because the count from a previous setlist may
-! have the same value of an invalid setlist; so, we must
-! go all the way back to the first of them (if any) */
-! for (j = 0; j < dest; j++) {
-! Instruction d = pt->code[dest-1];
-! if (!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0)) break;
-! }
-! /* if 'j' is even, previous value is not a setlist (even if
-! it looks like one) */
-! check((j&1) == 0);
- }
- }
- break;
-***************
-*** 363,369 ****
- }
- switch (op) {
- case OP_LOADBOOL: {
-! check(c == 0 || pc+2 < pt->sizecode); /* check its jump */
- break;
- }
- case OP_LOADNIL: {
---- 372,382 ----
- }
- switch (op) {
- case OP_LOADBOOL: {
-! if (c == 1) { /* does it jump? */
-! check(pc+2 < pt->sizecode); /* check its jump */
-! check(GET_OPCODE(pt->code[pc+1]) != OP_SETLIST ||
-! GETARG_C(pt->code[pc+1]) != 0);
-! }
- break;
- }
- case OP_LOADNIL: {
-***************
-*** 428,434 ****
- }
- case OP_SETLIST: {
- if (b > 0) checkreg(pt, a + b);
-! if (c == 0) pc++;
- break;
- }
- case OP_CLOSURE: {
---- 441,450 ----
- }
- case OP_SETLIST: {
- if (b > 0) checkreg(pt, a + b);
-! if (c == 0) {
-! pc++;
-! check(pc < pt->sizecode - 1);
-! }
- break;
- }
- case OP_CLOSURE: {
-diff -c -r lua-5.1.3/src/ltablib.c lua-5.1.3-patched/src/ltablib.c
-*** ./src/ltablib.c Fri Dec 28 13:32:23 2007
---- ./src/ltablib.c Thu Feb 14 14:46:58 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: ltablib.c,v 1.38.1.2 2007/12/28 15:32:23 roberto Exp $
- ** Library for Table Manipulation
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: ltablib.c,v 1.38.1.3 2008/02/14 16:46:58 roberto Exp $
- ** Library for Table Manipulation
- ** See Copyright Notice in lua.h
- */
-***************
-*** 132,137 ****
---- 132,146 ----
- }
-
-
-+ static void addfield (lua_State *L, luaL_Buffer *b, int i) {
-+ lua_rawgeti(L, 1, i);
-+ if (!lua_isstring(L, -1))
-+ luaL_error(L, "invalid value (%s) at index %d in table for "
-+ LUA_QL("concat"), luaL_typename(L, -1), i);
-+ luaL_addvalue(b);
-+ }
-+
-+
- static int tconcat (lua_State *L) {
- luaL_Buffer b;
- size_t lsep;
-***************
-*** 141,153 ****
- i = luaL_optint(L, 3, 1);
- last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1));
- luaL_buffinit(L, &b);
-! for (; i <= last; i++) {
-! lua_rawgeti(L, 1, i);
-! luaL_argcheck(L, lua_isstring(L, -1), 1, "table contains non-strings");
-! luaL_addvalue(&b);
-! if (i != last)
-! luaL_addlstring(&b, sep, lsep);
- }
- luaL_pushresult(&b);
- return 1;
- }
---- 150,161 ----
- i = luaL_optint(L, 3, 1);
- last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1));
- luaL_buffinit(L, &b);
-! for (; i < last; i++) {
-! addfield(L, &b, i);
-! luaL_addlstring(&b, sep, lsep);
- }
-+ if (i == last) /* add last value (if interval was not empty) */
-+ addfield(L, &b, i);
- luaL_pushresult(&b);
- return 1;
- }
-diff -c -r lua-5.1.3/src/luaconf.h lua-5.1.3-patched/src/luaconf.h
-*** ./src/luaconf.h Fri Jan 18 15:07:48 2008
---- ./src/luaconf.h Mon Feb 11 14:25:08 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: luaconf.h,v 1.82.1.6 2008/01/18 17:07:48 roberto Exp $
- ** Configuration file for Lua
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: luaconf.h,v 1.82.1.7 2008/02/11 16:25:08 roberto Exp $
- ** Configuration file for Lua
- ** See Copyright Notice in lua.h
- */
-***************
-*** 440,449 ****
- @* can use.
- ** CHANGE it if you need lots of (Lua) stack space for your C
- ** functions. This limit is arbitrary; its only purpose is to stop C
-! ** functions to consume unlimited stack space.
- */
-! #define LUAI_MCS_AUX ((int)(INT_MAX / (4*sizeof(LUA_NUMBER))))
-! #define LUAI_MAXCSTACK (LUAI_MCS_AUX > SHRT_MAX ? SHRT_MAX : LUAI_MCS_AUX)
-
-
-
---- 440,449 ----
- @* can use.
- ** CHANGE it if you need lots of (Lua) stack space for your C
- ** functions. This limit is arbitrary; its only purpose is to stop C
-! ** functions to consume unlimited stack space. (must be smaller than
-! ** -LUA_REGISTRYINDEX)
- */
-! #define LUAI_MAXCSTACK 8000
-
-
-
-diff -c -r lua-5.1.3/src/lundump.c lua-5.1.3-patched/src/lundump.c
-*** ./src/lundump.c Fri Jan 18 14:39:11 2008
---- ./src/lundump.c Fri Apr 4 16:51:41 2008
-***************
-*** 1,5 ****
- /*
-! ** $Id: lundump.c,v 2.7.1.2 2008/01/18 16:39:11 roberto Exp $
- ** load precompiled Lua chunks
- ** See Copyright Notice in lua.h
- */
---- 1,5 ----
- /*
-! ** $Id: lundump.c,v 2.7.1.4 2008/04/04 19:51:41 roberto Exp $
- ** load precompiled Lua chunks
- ** See Copyright Notice in lua.h
- */
-***************
-*** 48,54 ****
- static void LoadBlock(LoadState* S, void* b, size_t size)
- {
- size_t r=luaZ_read(S->Z,b,size);
-- UNUSED(r);
- IF (r!=0, "unexpected end");
- }
-
---- 48,53 ----
-***************
-*** 115,121 ****
- setnilvalue(o);
- break;
- case LUA_TBOOLEAN:
-! setbvalue(o,LoadChar(S));
- break;
- case LUA_TNUMBER:
- setnvalue(o,LoadNumber(S));
---- 114,120 ----
- setnilvalue(o);
- break;
- case LUA_TBOOLEAN:
-! setbvalue(o,LoadChar(S)!=0);
- break;
- case LUA_TNUMBER:
- setnvalue(o,LoadNumber(S));
-***************
-*** 161,167 ****
-
- static Proto* LoadFunction(LoadState* S, TString* p)
- {
-! Proto* f=luaF_newproto(S->L);
- setptvalue2s(S->L,S->L->top,f); incr_top(S->L);
- f->source=LoadString(S); if (f->source==NULL) f->source=p;
- f->linedefined=LoadInt(S);
---- 160,168 ----
-
- static Proto* LoadFunction(LoadState* S, TString* p)
- {
-! Proto* f;
-! if (++S->L->nCcalls > LUAI_MAXCCALLS) error(S,"code too deep");
-! f=luaF_newproto(S->L);
- setptvalue2s(S->L,S->L->top,f); incr_top(S->L);
- f->source=LoadString(S); if (f->source==NULL) f->source=p;
- f->linedefined=LoadInt(S);
-***************
-*** 175,180 ****
---- 176,182 ----
- LoadDebug(S,f);
- IF (!luaG_checkcode(f), "bad code");
- S->L->top--;
-+ S->L->nCcalls--;
- return f;
- }
-
+# patch-lua-5.1.3 created 2008-05-08T13:59:25-0300
+# get the latest version at http://www.lua.org/ftp/patch-lua-5.1.3
+--- src/lapi.c 2008/01/03 15:20:39 2.55.1.3
++++ src/lapi.c 2008/02/14 16:46:39 2.55.1.4
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: lapi.c,v 2.55.1.3 2008/01/03 15:20:39 roberto Exp $
++** $Id: lapi.c,v 2.55.1.4 2008/02/14 16:46:39 roberto Exp $
+ ** Lua API
+ ** See Copyright Notice in lua.h
+ */
+@@ -93,15 +93,14 @@
+
+
+ LUA_API int lua_checkstack (lua_State *L, int size) {
+- int res;
++ int res = 1;
+ lua_lock(L);
+- if ((L->top - L->base + size) > LUAI_MAXCSTACK)
++ if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK)
+ res = 0; /* stack overflow */
+- else {
++ else if (size > 0) {
+ luaD_checkstack(L, size);
+ if (L->ci->top < L->top + size)
+ L->ci->top = L->top + size;
+- res = 1;
+ }
+ lua_unlock(L);
+ return res;
+--- src/lbaselib.c 2008/01/20 13:53:22 1.191.1.4
++++ src/lbaselib.c 2008/02/14 16:46:22 1.191.1.6
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: lbaselib.c,v 1.191.1.4 2008/01/20 13:53:22 roberto Exp $
++** $Id: lbaselib.c,v 1.191.1.6 2008/02/14 16:46:22 roberto Exp $
+ ** Basic library
+ ** See Copyright Notice in lua.h
+ */
+@@ -344,10 +344,12 @@
+ luaL_checktype(L, 1, LUA_TTABLE);
+ i = luaL_optint(L, 2, 1);
+ e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1));
++ if (i > e) return 0; /* empty range */
+ n = e - i + 1; /* number of elements */
+- if (n <= 0) return 0; /* empty range */
+- luaL_checkstack(L, n, "table too big to unpack");
+- for (; i<=e; i++) /* push arg[i...e] */
++ if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
++ return luaL_error(L, "too many results to unpack");
++ lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */
++ while (i++ < e) /* push arg[i + 1...e] */
+ lua_rawgeti(L, 1, i);
+ return n;
+ }
+@@ -526,7 +528,7 @@
+ status = lua_resume(co, narg);
+ if (status == 0 || status == LUA_YIELD) {
+ int nres = lua_gettop(co);
+- if (!lua_checkstack(L, nres))
++ if (!lua_checkstack(L, nres + 1))
+ luaL_error(L, "too many results to resume");
+ lua_xmove(co, L, nres); /* move yielded values */
+ return nres;
+--- src/ldebug.c 2007/12/28 15:32:23 2.29.1.3
++++ src/ldebug.c 2008/05/08 16:56:26 2.29.1.6
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: ldebug.c,v 2.29.1.3 2007/12/28 15:32:23 roberto Exp $
++** $Id: ldebug.c,v 2.29.1.6 2008/05/08 16:56:26 roberto Exp $
+ ** Debug Interface
+ ** See Copyright Notice in lua.h
+ */
+@@ -275,12 +275,12 @@
+
+ static int precheck (const Proto *pt) {
+ check(pt->maxstacksize <= MAXSTACK);
+- lua_assert(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize);
+- lua_assert(!(pt->is_vararg & VARARG_NEEDSARG) ||
++ check(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize);
++ check(!(pt->is_vararg & VARARG_NEEDSARG) ||
+ (pt->is_vararg & VARARG_HASARG));
+ check(pt->sizeupvalues <= pt->nups);
+ check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0);
+- check(GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN);
++ check(pt->sizecode > 0 && GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN);
+ return 1;
+ }
+
+@@ -346,9 +346,18 @@
+ int dest = pc+1+b;
+ check(0 <= dest && dest < pt->sizecode);
+ if (dest > 0) {
+- /* cannot jump to a setlist count */
+- Instruction d = pt->code[dest-1];
+- check(!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0));
++ int j;
++ /* check that it does not jump to a setlist count; this
++ is tricky, because the count from a previous setlist may
++ have the same value of an invalid setlist; so, we must
++ go all the way back to the first of them (if any) */
++ for (j = 0; j < dest; j++) {
++ Instruction d = pt->code[dest-1-j];
++ if (!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0)) break;
++ }
++ /* if 'j' is even, previous value is not a setlist (even if
++ it looks like one) */
++ check((j&1) == 0);
+ }
+ }
+ break;
+@@ -363,7 +372,11 @@
+ }
+ switch (op) {
+ case OP_LOADBOOL: {
+- check(c == 0 || pc+2 < pt->sizecode); /* check its jump */
++ if (c == 1) { /* does it jump? */
++ check(pc+2 < pt->sizecode); /* check its jump */
++ check(GET_OPCODE(pt->code[pc+1]) != OP_SETLIST ||
++ GETARG_C(pt->code[pc+1]) != 0);
++ }
+ break;
+ }
+ case OP_LOADNIL: {
+@@ -428,7 +441,10 @@
+ }
+ case OP_SETLIST: {
+ if (b > 0) checkreg(pt, a + b);
+- if (c == 0) pc++;
++ if (c == 0) {
++ pc++;
++ check(pc < pt->sizecode - 1);
++ }
+ break;
+ }
+ case OP_CLOSURE: {
+--- src/ltablib.c 2007/12/28 15:32:23 1.38.1.2
++++ src/ltablib.c 2008/02/14 16:46:58 1.38.1.3
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: ltablib.c,v 1.38.1.2 2007/12/28 15:32:23 roberto Exp $
++** $Id: ltablib.c,v 1.38.1.3 2008/02/14 16:46:58 roberto Exp $
+ ** Library for Table Manipulation
+ ** See Copyright Notice in lua.h
+ */
+@@ -132,6 +132,15 @@
+ }
+
+
++static void addfield (lua_State *L, luaL_Buffer *b, int i) {
++ lua_rawgeti(L, 1, i);
++ if (!lua_isstring(L, -1))
++ luaL_error(L, "invalid value (%s) at index %d in table for "
++ LUA_QL("concat"), luaL_typename(L, -1), i);
++ luaL_addvalue(b);
++}
++
++
+ static int tconcat (lua_State *L) {
+ luaL_Buffer b;
+ size_t lsep;
+@@ -141,13 +150,12 @@
+ i = luaL_optint(L, 3, 1);
+ last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1));
+ luaL_buffinit(L, &b);
+- for (; i <= last; i++) {
+- lua_rawgeti(L, 1, i);
+- luaL_argcheck(L, lua_isstring(L, -1), 1, "table contains non-strings");
+- luaL_addvalue(&b);
+- if (i != last)
+- luaL_addlstring(&b, sep, lsep);
++ for (; i < last; i++) {
++ addfield(L, &b, i);
++ luaL_addlstring(&b, sep, lsep);
+ }
++ if (i == last) /* add last value (if interval was not empty) */
++ addfield(L, &b, i);
+ luaL_pushresult(&b);
+ return 1;
+ }
+--- src/luaconf.h 2008/01/18 17:07:48 1.82.1.6
++++ src/luaconf.h 2008/02/11 16:25:08 1.82.1.7
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: luaconf.h,v 1.82.1.6 2008/01/18 17:07:48 roberto Exp $
++** $Id: luaconf.h,v 1.82.1.7 2008/02/11 16:25:08 roberto Exp $
+ ** Configuration file for Lua
+ ** See Copyright Notice in lua.h
+ */
+@@ -440,10 +440,10 @@
+ @* can use.
+ ** CHANGE it if you need lots of (Lua) stack space for your C
+ ** functions. This limit is arbitrary; its only purpose is to stop C
+-** functions to consume unlimited stack space.
++** functions to consume unlimited stack space. (must be smaller than
++** -LUA_REGISTRYINDEX)
+ */
+-#define LUAI_MCS_AUX ((int)(INT_MAX / (4*sizeof(LUA_NUMBER))))
+-#define LUAI_MAXCSTACK (LUAI_MCS_AUX > SHRT_MAX ? SHRT_MAX : LUAI_MCS_AUX)
++#define LUAI_MAXCSTACK 8000
+
+
+
+--- src/lundump.c 2008/01/18 16:39:11 2.7.1.2
++++ src/lundump.c 2008/04/04 19:51:41 2.7.1.4
+@@ -1,5 +1,5 @@
+ /*
+-** $Id: lundump.c,v 2.7.1.2 2008/01/18 16:39:11 roberto Exp $
++** $Id: lundump.c,v 2.7.1.4 2008/04/04 19:51:41 roberto Exp $
+ ** load precompiled Lua chunks
+ ** See Copyright Notice in lua.h
+ */
+@@ -48,7 +48,6 @@
+ static void LoadBlock(LoadState* S, void* b, size_t size)
+ {
+ size_t r=luaZ_read(S->Z,b,size);
+- UNUSED(r);
+ IF (r!=0, "unexpected end");
+ }
+
+@@ -115,7 +114,7 @@
+ setnilvalue(o);
+ break;
+ case LUA_TBOOLEAN:
+- setbvalue(o,LoadChar(S));
++ setbvalue(o,LoadChar(S)!=0);
+ break;
+ case LUA_TNUMBER:
+ setnvalue(o,LoadNumber(S));
+@@ -161,7 +160,9 @@
+
+ static Proto* LoadFunction(LoadState* S, TString* p)
+ {
+- Proto* f=luaF_newproto(S->L);
++ Proto* f;
++ if (++S->L->nCcalls > LUAI_MAXCCALLS) error(S,"code too deep");
++ f=luaF_newproto(S->L);
+ setptvalue2s(S->L,S->L->top,f); incr_top(S->L);
+ f->source=LoadString(S); if (f->source==NULL) f->source=p;
+ f->linedefined=LoadInt(S);
+@@ -175,6 +176,7 @@
+ LoadDebug(S,f);
+ IF (!luaG_checkcode(f), "bad code");
+ S->L->top--;
++ S->L->nCcalls--;
+ return f;
+ }
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080509/c4c54d61/attachment.html
More information about the macports-changes
mailing list