diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-09-24 13:26:51 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-10-12 12:29:09 -0300 |
commit | 490d42b5f89563a94994505c75e24086b0a487e6 (patch) | |
tree | d8d9c68deb5879a99cf6574ab0903fba30cef7a4 /lstate.h | |
parent | 287b302acb8d925178e9edb800f0a8d18c7d35f6 (diff) | |
download | lua-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.h | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -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 */ |