diff options
| author | Li Jin <dragon-fly@qq.com> | 2020-06-22 16:50:40 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2020-06-22 16:50:40 +0800 |
| commit | cd2b60b101a398cb9356d746364e70eaed1860f1 (patch) | |
| tree | a1fe71b76faabc4883f16905a94164ce5c23e692 /src/lua/lapi.h | |
| parent | 88c1052e700f38cf3d8ad82d469da4c487760b7e (diff) | |
| download | yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.tar.gz yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.tar.bz2 yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.zip | |
add support for local variable declared with attribute 'close' and 'const' for Lua 5.4.
Diffstat (limited to 'src/lua/lapi.h')
| -rw-r--r-- | src/lua/lapi.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/lua/lapi.h b/src/lua/lapi.h new file mode 100644 index 0000000..41216b2 --- /dev/null +++ b/src/lua/lapi.h | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | /* | ||
| 2 | ** $Id: lapi.h $ | ||
| 3 | ** Auxiliary functions from Lua API | ||
| 4 | ** See Copyright Notice in lua.h | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef lapi_h | ||
| 8 | #define lapi_h | ||
| 9 | |||
| 10 | |||
| 11 | #include "llimits.h" | ||
| 12 | #include "lstate.h" | ||
| 13 | |||
| 14 | |||
| 15 | /* Increments 'L->top', checking for stack overflows */ | ||
| 16 | #define api_incr_top(L) {L->top++; api_check(L, L->top <= L->ci->top, \ | ||
| 17 | "stack overflow");} | ||
| 18 | |||
| 19 | |||
| 20 | /* | ||
| 21 | ** If a call returns too many multiple returns, the callee may not have | ||
| 22 | ** stack space to accommodate all results. In this case, this macro | ||
| 23 | ** increases its stack space ('L->ci->top'). | ||
| 24 | */ | ||
| 25 | #define adjustresults(L,nres) \ | ||
| 26 | { if ((nres) <= LUA_MULTRET && L->ci->top < L->top) L->ci->top = L->top; } | ||
| 27 | |||
| 28 | |||
| 29 | /* Ensure the stack has at least 'n' elements */ | ||
| 30 | #define api_checknelems(L,n) api_check(L, (n) < (L->top - L->ci->func), \ | ||
| 31 | "not enough elements in the stack") | ||
| 32 | |||
| 33 | |||
| 34 | /* | ||
| 35 | ** To reduce the overhead of returning from C functions, the presence of | ||
| 36 | ** to-be-closed variables in these functions is coded in the CallInfo's | ||
| 37 | ** field 'nresults', in a way that functions with no to-be-closed variables | ||
| 38 | ** with zero, one, or "all" wanted results have no overhead. Functions | ||
| 39 | ** with other number of wanted results, as well as functions with | ||
| 40 | ** variables to be closed, have an extra check. | ||
| 41 | */ | ||
| 42 | |||
| 43 | #define hastocloseCfunc(n) ((n) < LUA_MULTRET) | ||
| 44 | |||
| 45 | #define codeNresults(n) (-(n) - 3) | ||
| 46 | |||
| 47 | #endif | ||
