Lua処理系コード読み(10) UpVal
lobject.h
/* ** Upvalues */ typedef struct UpVal { CommonHeader; TValue *v; /* points to stack or to its own value */ union { TValue value; /* the value (when closed) */ struct { /* double linked list (when open) */ struct UpVal *prev; struct UpVal *next; } l; } u; } UpVal;
実行中の関数のUpValueは両方向リンクリストで繋がれている(when open)。関数が終了したとき(when closed)に生きているUpValueはuv.value → uv.vという参照を持つオブジェクトとして関数終了後も生き続ける。
# lfunc.cのluaF_close