aboutsummaryrefslogtreecommitdiff
path: root/lstate.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-09-24 13:26:51 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-10-12 12:29:09 -0300
commit490d42b5f89563a94994505c75e24086b0a487e6 (patch)
treed8d9c68deb5879a99cf6574ab0903fba30cef7a4 /lstate.h
parent287b302acb8d925178e9edb800f0a8d18c7d35f6 (diff)
downloadlua-490d42b5f89563a94994505c75e24086b0a487e6.tar.gz
lua-490d42b5f89563a94994505c75e24086b0a487e6.tar.bz2
lua-490d42b5f89563a94994505c75e24086b0a487e6.zip
Correct handling of 'luaV_execute' invocations
The previous stackless implementations marked all 'luaV_execute' invocations as fresh. However, re-entering 'luaV_execute' when resuming a coroutine should not be a fresh invocation. (It works because 'unroll' called 'luaV_execute' for each call entry, but it was slower than letting 'luaV_execute' finish all non-fresh invocations.)
Diffstat (limited to 'lstate.h')
-rw-r--r--lstate.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/lstate.h b/lstate.h
index a05db376..5573898c 100644
--- a/lstate.h
+++ b/lstate.h
@@ -183,14 +183,15 @@ typedef struct CallInfo {
183*/ 183*/
184#define CIST_OAH (1<<0) /* original value of 'allowhook' */ 184#define CIST_OAH (1<<0) /* original value of 'allowhook' */
185#define CIST_C (1<<1) /* call is running a C function */ 185#define CIST_C (1<<1) /* call is running a C function */
186#define CIST_HOOKED (1<<2) /* call is running a debug hook */ 186#define CIST_FRESH (1<<2) /* call is on a fresh "luaV_execute" frame */
187#define CIST_YPCALL (1<<3) /* call is a yieldable protected call */ 187#define CIST_HOOKED (1<<3) /* call is running a debug hook */
188#define CIST_TAIL (1<<4) /* call was tail called */ 188#define CIST_YPCALL (1<<4) /* call is a yieldable protected call */
189#define CIST_HOOKYIELD (1<<5) /* last hook called yielded */ 189#define CIST_TAIL (1<<5) /* call was tail called */
190#define CIST_FIN (1<<6) /* call is running a finalizer */ 190#define CIST_HOOKYIELD (1<<6) /* last hook called yielded */
191#define CIST_TRAN (1<<7) /* 'ci' has transfer information */ 191#define CIST_FIN (1<<7) /* call is running a finalizer */
192#define CIST_TRAN (1<<8) /* 'ci' has transfer information */
192#if defined(LUA_COMPAT_LT_LE) 193#if defined(LUA_COMPAT_LT_LE)
193#define CIST_LEQ (1<<8) /* using __lt for __le */ 194#define CIST_LEQ (1<<9) /* using __lt for __le */
194#endif 195#endif
195 196
196/* active function is a Lua function */ 197/* active function is a Lua function */