commit 5a3f26f85558bedfa439027919d928abfdd00b6d parent 93fd67b7936f0f1fc20645d18eb85a193887c315 Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br> Date: Mon, 6 Nov 2017 15:33:39 -0200 fitting a StackValue structure into 32 bytes (for 64-bit machines) Diffstat:
M | lobject.h | | | 17 | +++++++++-------- |
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/lobject.h b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 2.127 2017/11/03 12:12:30 roberto Exp roberto $ +** $Id: lobject.h,v 2.128 2017/11/03 17:22:54 roberto Exp roberto $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -314,26 +314,27 @@ typedef union StackValue { struct { TValuefields; lu_byte callstatus_; - short nresults; /* expected number of results from this function */ - unsigned short previous; /* difference to previous 'func' */ - unsigned short framesize; /* stack space available for this function */ + char nresults; /* expected number of results from this function */ union { - unsigned short funcidx; /* called-function index */ - unsigned short nyield; /* number of values yielded */ + unsigned char funcidx; /* called-function index */ + unsigned char nyield; /* number of values yielded */ } u2; + unsigned short previous; /* difference to previous 'func' */ + unsigned short framesize; /* stack space available for this function */ union { struct { /* only for Lua functions */ const Instruction *savedpc; } l; struct { /* only for C functions */ lua_KFunction k; /* continuation in case of yields */ - ptrdiff_t old_errfunc; - lua_KContext ctx; /* context info. in case of yields */ + int old_errfunc; + int ctx; /* context info. in case of yields */ } c; } u; } stkci; } StackValue; + #define callstatus(ar) ((ar)->stkci.callstatus_) /* top of a function (first element after its frame) */