aboutsummaryrefslogtreecommitdiff
path: root/lobject.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-03-10 10:27:19 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-03-10 10:27:19 -0300
commit81c6021fb40a254d9a586b0cb53453bba8973d80 (patch)
tree3abc818902b69ddbb89eaef0a3e52b0f218ceb6c /lobject.h
parenta7b8b27dd39f45b9464ffc4226b0616c3ffe5ad7 (diff)
downloadlua-81c6021fb40a254d9a586b0cb53453bba8973d80.tar.gz
lua-81c6021fb40a254d9a586b0cb53453bba8973d80.tar.bz2
lua-81c6021fb40a254d9a586b0cb53453bba8973d80.zip
New implementation for 'tbclist'
- Fixes a bug, by removing dummy nodes together with the node itself. (The previous implementation could leave dummy nodes in frames which otherwise had no tbc variables, and therefore would not close variables; that could leave 'tbclist' pointing higher than 'top', which could dangle if the stack shrank.) - Computes MAXDELTA based on the type of delta, to ease changing its type if needed. - Instead of 'isdummy', uses 'delta==0' to signal dummy nodes. (Dummy nodes always have MAXDELTA for their real delta.)
Diffstat (limited to 'lobject.h')
-rw-r--r--lobject.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/lobject.h b/lobject.h
index 1a7a7372..950bebbd 100644
--- a/lobject.h
+++ b/lobject.h
@@ -139,13 +139,14 @@ typedef struct TValue {
139** Entries in a Lua stack. Field 'tbclist' forms a list of all 139** Entries in a Lua stack. Field 'tbclist' forms a list of all
140** to-be-closed variables active in this stack. Dummy entries are 140** to-be-closed variables active in this stack. Dummy entries are
141** used when the distance between two tbc variables does not fit 141** used when the distance between two tbc variables does not fit
142** in an unsigned short. 142** in an unsigned short. They are represented by delta==0, and
143** their real delta is always the maximum value that fits in
144** that field.
143*/ 145*/
144typedef union StackValue { 146typedef union StackValue {
145 TValue val; 147 TValue val;
146 struct { 148 struct {
147 TValuefields; 149 TValuefields;
148 lu_byte isdummy;
149 unsigned short delta; 150 unsigned short delta;
150 } tbclist; 151 } tbclist;
151} StackValue; 152} StackValue;