lobject
まず、 lobject.h を見ると、ここにはたくさんの型定義が書かれている。
lua のデータオブジェクトを表現するのは次の型宣言。
typedef struct lua_TObject { int tt; Value value; } TObject;
TObject は「タグつきオブジェクト」の意。 tt がタグ、 Value は union 型で、いろんな型を表現している。 Value は次のとおり。
typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value;
b はたぶん真理値、nが数値、pは小さなユーザデータ、GCObjectは Collectable Object。 GCObject の定義じたいは lstate.h にあり、
union GCObject { GCheader gch; union TString ts; union Udata u; union Closure cl; struct Table h; struct Proto p; struct UpVal uv; struct lua_State th; /* thread */ };
となっている。 ts が文字列、 u はユーザデータ、 cl はクロージャ、 h はハッシュテーブル th がスレッド。あとはよくわからない。追々見ていくことにしよう。
lobject.h には、型チェックや値をセットするためのマクロがたくさん定義されているがこれも略。
lobject.c に定義されている関数は用途が不明なので後で使うときに紹介する方がいいだろうと思う。