diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-01-13 13:54:10 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-01-13 13:54:10 -0300 |
| commit | b07fc10e91a5954254b47280aba287220c734a4b (patch) | |
| tree | e50d4e5ef9aab68487caf0944e72a7de04bb8bb5 /lapi.c | |
| parent | cc1692515e2a6aabc6d07159e7926656e38eda53 (diff) | |
| download | lua-b07fc10e91a5954254b47280aba287220c734a4b.tar.gz lua-b07fc10e91a5954254b47280aba287220c734a4b.tar.bz2 lua-b07fc10e91a5954254b47280aba287220c734a4b.zip | |
Allow yields inside '__close' metamethods
Initial implementation to allow yields inside '__close' metamethods.
This current version still does not allow a '__close' metamethod
to yield when called due to an error. '__close' metamethods from
C functions also are not allowed to yield.
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 4 |
1 files changed, 2 insertions, 2 deletions
| @@ -189,7 +189,7 @@ LUA_API void lua_settop (lua_State *L, int idx) { | |||
| 189 | } | 189 | } |
| 190 | #if defined(LUA_COMPAT_5_4_0) | 190 | #if defined(LUA_COMPAT_5_4_0) |
| 191 | if (diff < 0 && hastocloseCfunc(ci->nresults)) | 191 | if (diff < 0 && hastocloseCfunc(ci->nresults)) |
| 192 | luaF_close(L, L->top + diff, CLOSEKTOP); | 192 | luaF_close(L, L->top + diff, CLOSEKTOP, 0); |
| 193 | #endif | 193 | #endif |
| 194 | L->top += diff; | 194 | L->top += diff; |
| 195 | api_check(L, L->openupval == NULL || uplevel(L->openupval) < L->top, | 195 | api_check(L, L->openupval == NULL || uplevel(L->openupval) < L->top, |
| @@ -205,7 +205,7 @@ LUA_API void lua_closeslot (lua_State *L, int idx) { | |||
| 205 | api_check(L, hastocloseCfunc(L->ci->nresults) && L->openupval != NULL && | 205 | api_check(L, hastocloseCfunc(L->ci->nresults) && L->openupval != NULL && |
| 206 | uplevel(L->openupval) == level, | 206 | uplevel(L->openupval) == level, |
| 207 | "no variable to close at given level"); | 207 | "no variable to close at given level"); |
| 208 | luaF_close(L, level, CLOSEKTOP); | 208 | luaF_close(L, level, CLOSEKTOP, 0); |
| 209 | setnilvalue(s2v(level)); | 209 | setnilvalue(s2v(level)); |
| 210 | lua_unlock(L); | 210 | lua_unlock(L); |
| 211 | } | 211 | } |
