diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-12-08 15:28:25 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-12-08 15:28:25 -0200 |
commit | e663a24ab03a54fa221c20a793812e5c5ffdf94f (patch) | |
tree | 8fbd40f779f0eed29d46f26c07e1234fd5df8bae /lapi.c | |
parent | 40f823ec907fd725617e37199199b3ed424bd88c (diff) | |
download | lua-e663a24ab03a54fa221c20a793812e5c5ffdf94f.tar.gz lua-e663a24ab03a54fa221c20a793812e5c5ffdf94f.tar.bz2 lua-e663a24ab03a54fa221c20a793812e5c5ffdf94f.zip |
more freedom in handling memory-allocation errors (not all allocations
automatically raise an error), which allows fixing a bug when resizing
a table.
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 14 |
1 files changed, 2 insertions, 12 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 2.277 2017/11/23 19:29:04 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.278 2017/12/06 18:08:03 roberto Exp roberto $ |
3 | ** Lua API | 3 | ** Lua API |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -99,16 +99,6 @@ static StkId index2stack (lua_State *L, int idx) { | |||
99 | } | 99 | } |
100 | 100 | ||
101 | 101 | ||
102 | /* | ||
103 | ** to be called by 'lua_checkstack' in protected mode, to grow stack | ||
104 | ** capturing memory errors | ||
105 | */ | ||
106 | static void growstack (lua_State *L, void *ud) { | ||
107 | int size = *(int *)ud; | ||
108 | luaD_growstack(L, size); | ||
109 | } | ||
110 | |||
111 | |||
112 | LUA_API int lua_checkstack (lua_State *L, int n) { | 102 | LUA_API int lua_checkstack (lua_State *L, int n) { |
113 | int res; | 103 | int res; |
114 | CallInfo *ci = L->ci; | 104 | CallInfo *ci = L->ci; |
@@ -121,7 +111,7 @@ LUA_API int lua_checkstack (lua_State *L, int n) { | |||
121 | if (inuse > LUAI_MAXSTACK - n) /* can grow without overflow? */ | 111 | if (inuse > LUAI_MAXSTACK - n) /* can grow without overflow? */ |
122 | res = 0; /* no */ | 112 | res = 0; /* no */ |
123 | else /* try to grow stack */ | 113 | else /* try to grow stack */ |
124 | res = (luaD_rawrunprotected(L, &growstack, &n) == LUA_OK); | 114 | res = luaD_growstack(L, n, 0); |
125 | } | 115 | } |
126 | if (res && ci->top < L->top + n) | 116 | if (res && ci->top < L->top + n) |
127 | ci->top = L->top + n; /* adjust frame top */ | 117 | ci->top = L->top + n; /* adjust frame top */ |