From a3d36fe283c09d4e56474da98f22d13162cc9fec Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 11 Apr 2017 15:41:09 -0300 Subject: Upvalues collected like everything else (with mark-sweep) instead of reference count (simpler and better for generational mode) --- lobject.h | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'lobject.h') diff --git a/lobject.h b/lobject.h index eeddfdef..7c521ba2 100644 --- a/lobject.h +++ b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 2.116 2015/11/03 18:33:10 roberto Exp roberto $ +** $Id: lobject.h,v 2.117 2016/08/01 19:51:24 roberto Exp roberto $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -19,8 +19,9 @@ /* ** Extra tags for non-values */ -#define LUA_TPROTO LUA_NUMTAGS /* function prototypes */ -#define LUA_TDEADKEY (LUA_NUMTAGS+1) /* removed keys in tables */ +#define LUA_TUPVAL LUA_NUMTAGS /* upvalues */ +#define LUA_TPROTO (LUA_NUMTAGS+1) /* function prototypes */ +#define LUA_TDEADKEY (LUA_NUMTAGS+2) /* removed keys in tables */ /* ** number of all possible tags (including LUA_TNONE but excluding DEADKEY) @@ -431,9 +432,20 @@ typedef struct Proto { /* -** Lua Upvalues +** Upvalues for Lua closures */ -typedef struct UpVal UpVal; +typedef struct UpVal { + CommonHeader; + TValue *v; /* points to stack or to its own value */ + union { + struct { /* (when open) */ + struct UpVal *next; /* linked list */ + struct UpVal **previous; + } open; + TValue value; /* the value (when closed) */ + } u; +} UpVal; + /* -- cgit v1.2.3-55-g6feb