New implementation for to-be-closed variables

To-be-closed variables are linked in their own list, embedded into the
stack elements. (Due to alignment, this information does not change
the size of the stack elements in most architectures.)  This new list
does not produce garbage and avoids memory errors when creating tbc
variables.
This commit is contained in:
Roberto Ierusalimschy
2021-02-09 14:00:05 -03:00
parent c63e5d212b
commit 4e47f81188
10 changed files with 103 additions and 66 deletions

View File

@@ -136,10 +136,18 @@ typedef struct TValue {
/*
** Entries in the Lua stack
** Entries in a Lua stack. Field 'tbclist' forms a list of all
** to-be-closed variables active in this stack. Dummy entries are
** used when the distance between two tbc variables does not fit
** in an unsigned short.
*/
typedef union StackValue {
TValue val;
struct {
TValuefields;
lu_byte isdummy;
unsigned short delta;
} tbclist;
} StackValue;