5 補助ライブラリ

補助ライブラリ (auxiliary library) は C と Lua の対話のための便利な関数を提供します。C と Lua の対話に使える機能は § 4 で説明した基礎 API が全てですが、補助ライブラリには一般的なタスクのための高レベルな関数が用意されています。

補助ライブラリに含まれる関数と型は全てヘッダーファイル luaxlib.h に定義されており、接頭辞 luaL_ を持ちます。

補助ライブラリに含まれる全ての関数は基礎 API の上に作られています。そのため補助ライブラリで行えることは全て基礎 API を使っても行えます。ただそれでも、補助ライブラリを使えばコードがより一貫したものになります。

補助ライブラリに含まれる関数の中にはスタックのスロットを内部で使うものがあります。補助ライブラリの関数が使うスロットが 5 個未満の場合、その関数はスタックサイズを確認しません。スロットは十分にあるものとして処理が行われます。

補助ライブラリには C 関数の引数を確認する関数がいくつかあります。エラーメッセージは引数を使って (例えば "bad argument #1" のように) フォーマットされるので、こういった関数を引数でない値がスタックに積まれた状態で呼び出すべきではありません。

luaL_check* を呼んだ関数は条件が確認できなかったとき必ずエラーを送出します。

5.1 関数と型

補助ライブラリに含まれる全ての関数と型を辞書順に示します。

luaL_addchar

[-?, +?, m]
void luaL_addchar (luaL_Buffer *B, char c);

バイト c をバッファ B に加えます (参照: luaL_Buffer)。

luaL_addgsub

[-0, +0, m]
const void luaL_addgsub (luaL_Buffer *B,
                         const char *s,
                         const char *p,
                         const char *r);

文字列 s をコピーし、コピーに含まれる文字列 p を全て r に置換し、それをバッファ B に加えます (参照: luaL_Buffer)。

luaL_addlstring

[-?, +?, m]
void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);

s が指す長さ l の文字列をバッファ B に加えます (参照: luaL_Buffer)。文字列の中にゼロ文字が含まれていても構いません。

luaL_addsize

[-?, +?, -]
void luaL_addsize (luaL_Buffer *B, size_t n);

バッファ B の長さを n だけ伸ばします。ここで n は直前にバッファに追加された文字列の長さです (参照: luaL_prepbuffer)。

luaL_addstring

[-?, +?, m]
void luaL_addstring (luaL_Buffer *B, const char *s);

s が指すゼロ終端文字列をバッファ B に加えます (参照: luaL_Buffer)。

luaL_addvalue

[-1, +?, m]
void luaL_addvalue (luaL_Buffer *B);

スタックトップにある値をバッファ B に加え、その値をポップします (参照: luaL_Buffer)。

これは文字列バッファを使う関数の中で唯一スタックを利用できる (必ず利用しなければならない) 関数です。スタックトップの値がバッファに加えられます。

luaL_argcheck

[-0, +0, v]
void luaL_argcheck (lua_State *L,
                    int cond,
                    int arg,
                    const char *extramsg);

condtrue であること確認します。もし condfalse なら標準的なメッセージと共にエラーを送出します (参照: luaL_argerror)。

luaL_argerror

[-0, +0, v]
int luaL_argerror (lua_State *L, int arg, const char *extramsg);

この関数を呼び出した C 関数に与えられた arg 番目の引数に問題があることを報告するエラーを送出します。エラーメッセージには次の標準的なメッセージに extramsg を付けた文字列が使われます:

bad argument #arg to 'funcname' (extramsg)

この関数は返りません。

luaL_argexpected

[-0, +0, v]
void luaL_argexpected (lua_State *L
                      int cond
                      int arg
                      const char *tname);

condtrue であることを確認します。もし condfalse なら arg 番目の引数の型が間違っていることを示すエラーを標準的なメッセージと共に送出します (参照: luaL_typeerror)。

luaL_Buffer

typedef struct luaL_Buffer luaL_Buffer;

文字列バッファ (string buffer) の型です。

文字列バッファを使うと、C コードから Lua の文字列を少しずつ構築できます。文字列バッファは次のように使います:

  1. luaL_Buffer 型の変数 b を宣言する。
  2. luaL_buffinit(L, &b)b を初期化する。
  3. いずれかの luaL_add* 関数を使ってバッファを少しずつ構築する。
  4. 最後に luaL_pushresult(&b) を呼ぶ。これで最終的な文字列がスタックトップに載る。

構築する文字列の最大サイズが事前に分かっている場合には、バッファの構築は次のようできます:

文字列バッファを操作する関数は通常の実行で可変個数のスタックスロットを使用します。そのためバッファを使っている間はスタックトップが変わらないと仮定してはいけません。連続するバッファ操作の間でスタックを使っても構いませんが、そのときは「バランスを取って」使わなければなりません: つまり二回目以降のバッファ操作が始まるときのスタックは前回のバッファ操作直後と同じ高さである必要があります (この規則に対する唯一の例外は luaL_addvalue です)。luaL_pushresult を呼ぶとスタックはバッファを初期化したときの状態に戻り、そこに最終的な文字列がプッシュされます。

luaL_buffaddr

[-0, +0, -]
char *luaL_buffaddr (luaL_Buffer *B);

バッファ B の現在時点における内容を指すアドレスを返します (参照: luaL_Buffer)。この関数を呼び出した後バッファにデータを加えると、返り値のアドレスが有効でなくなる可能性があります。

luaL_buffinit

[-0, +0, -]
void luaL_buffinit (lua_State *L, luaL_Buffer *B);

バッファ B を初期化します (参照: luaL_Buffer)。この関数は B のための空間を確保しないので、BluaL_Buffer 型の変数として宣言される必要があります。

luaL_bufflen

[-0, +0, -]
size_t luaL_bufflen (luaL_Buffer *B);

バッファ B の内容の現時点における長さを返します (参照: luaL_Buffer)。

luaL_buffinitsize

[-?, +?, m]
char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);

luaL_buffinitluaL_prepbuffsize を続けて呼ぶのと等価です。

luaL_buffsub

[-0, +0, -]
void luaL_buffsub (luaL_Buffer *B, int n);

バッファ B から n バイトを削除します (参照: luaL_Buffer)。バッファのサイズは最低でも n バイトである必要があります。

luaL_callmeta

[-0, +(0|1), e]
int luaL_callmeta (lua_State *L, int obj, const char *e);

メタメソッドを呼び出します。

スタックのインデックス obj にあるオブジェクトがメタテーブルを持ち、そのメタテーブルにキーが e のフィールドがあるなら、この関数はインデックス obj にあるオブジェクトを唯一の引数としてそのフィールドのバリューを呼び出します。メタメソッドを呼び出した場合この関数は true を返し、スタックに呼び出しの返り値をプッシュします。メタテーブルまたはメタメソッドが見つからなかった場合には、この関数はスタックに何もプッシュせずに false を返します。

luaL_checkany

[-0, +0, v]
void luaL_checkany (lua_State *L, int arg);

関数がスタックの位置 arg に引数を持つことを確認します。型は確認しません (nil でも構いません)。

luaL_checkinteger

[-0, +0, v]
lua_Integer luaL_checkinteger (lua_State *L, int arg);

関数の arg 番目の引数が整数 (あるいは整数に変換できる値) であることを確認し、その整数を返します。

luaL_checklstring

[-0, +0, v]
const char *luaL_checklstring (lua_State *L, int arg, size_t *l);

関数の arg 番目の引数が文字列であることを確認し、その文字列を返します。lNULL でなければ、*l に文字列の長さを代入します。

この関数は lua_tolstring を使って結果を計算します。そのため lua_tolstring で説明した注意事項がここでも当てはまります。

luaL_checknumber

[-0, +0, v]
lua_Number luaL_checknumber (lua_State *L, int arg);

関数の arg 番目の引数が数値であることを確認し、それを lua_Number に変換した値を返します。

luaL_checkoption

[-0, +0, v]
int luaL_checkoption (lua_State *L,
                      int arg,
                      const char *def,
                      const char *const lst[]);

関数の arg 番目の引数が文字列であることを確認し、その文字列を lst の中から検索します。lst にある文字列はゼロ終端文字列です。検索対象の文字列の配列におけるインデックスを返します。引数が文字列でない、あるいは文字列が見つからない場合にはエラーを送出します。

defNULL でない場合、この関数は arg 番目の引数が見つからないときおよび nil であるときにデフォルト値として def を返します。

この関数は文字列を C の列挙体にマッピングするとき使うことができます。通常 Lua ライブラリではオプションの選択に数値ではなく文字列を使うようになっています。

luaL_checkstack

[-0, +0, v]
void luaL_checkstack (lua_State *L, int sz, const char *msg);

スタックのサイズを (現在のトップ) + sz 要素に伸ばします。そのサイズに伸ばせなければエラーを送出します。msg はエラーメッセージに表示する追加テキストです (追加テキストがなければ NULL とします)。

luaL_checkstring

[-0, +0, v]
const char *luaL_checkstring (lua_State *L, int arg);

関数の arg 番目の引数が文字列であることを確認し、その文字列を返します。

この関数は lua_tolstring を使って結果を計算します。そのため lua_tolstring で説明した注意事項がここでも当てはまります。

luaL_checktype

[-0, +0, v]
void luaL_checktype (lua_State *L, int arg, int t);

関数の arg 番目の引数が t 型であることを確認します。型を int にエンコードする方法は lua_type を参照してください。

luaL_checkudata

[-0, +0, v]
void *luaL_checkudata (lua_State *L, int arg, const char *tname);

関数の arg 番目の引数が tname 型 (参照: luaL_newmetatable) のユーザーデータであることを確認し、そのメモリ領域を指すアドレスを返します1 (参照: lua_touserdata)。

luaL_checkversion

[-0, +0, v]
void luaL_checkversion (lua_State *L);

呼び出されている Lua ライブラリとそれを呼び出しているコードが、同じバージョンの Lua と同じ数値型を使っていることを確認します。

luaL_dofile

[-0, +?, m]
int luaL_dofile (lua_State *L, const char *filename);

指定された名前のファイルをロードして実行します。次のマクロとして定義されます:

(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))

(参照: luaL_loadfile, lua_pcall)

エラーがなければ LUA_OK が返り、エラーがあればエラーコードが返ります (§ 4.4.1)。

luaL_dostring

[-0, +?, -]
int luaL_dostring (lua_State *L, const char *str);

指定された文字列をロードして実行します。次のマクロとして定義されます:

(luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))

(参照 luaL_loadfile, lua_pcall)

エラーがなければ LUA_OK が返り、エラーがあればエラーコードが返ります (§ 4.4.1)。

luaL_error

[-0, +0, v]
int luaL_error (lua_State *L, const char *fmt, ...);

エラーを送出します。エラーメッセージのフォーマットは fmt とそれ以降の引数で与えられます。フォーマットの規則は lua_pushfstring と同様です。メッセージの最初にはエラーが発生したファイル名と行番号が (取得可能なら) 付け足されます。

この関数は返りませんが、C 関数で使うときは return luaL_error(args) とするのがイディオムとなっています。

luaL_execresult

[-0, +3, m]
int luaL_execresult (lua_State *L, int stat);

プロセスに関する標準ライブラリ関数 (os.executeio.close) 用の返り値を生成します。

luaL_fileresult

[-0, +(1|3), m]
int luaL_fileresult (lua_State *L, int stat, const char *fname);

ファイルに関する標準ライブラリ関数 (io.open, os.rename, file:seek など) 用の返り値を生成します。

luaL_getmetafield

[-0, +(0|1), m]
int luaL_getmetafield (lua_State *L, int obj, const char *e);

スタックのインデックス obj にあるオブジェクトのメタテーブルの e というフィールドをスタックにプッシュし、プッシュした値の型を返します。このインデックスにあるオブジェクトがメタテーブルを持たない場合、およびメタテーブルに指定したフィールドがない場合には、何もプッシュせずに LUA_TNIL を返します。

luaL_getmetatable

[-0, +1, m]
int luaL_getmetatable (lua_State *L, const char *tname);

レジストリで tname という名前に関連付いたメタテーブルをスタックにプッシュします (参照: luaL_newmetatable)。tname という名前に関連付いたメタテーブルが存在しない場合には nil をプッシュします。返り値はプッシュされた値の型です。

luaL_getsubtable

[-0, +1, e]
int luaL_getsubtable (lua_State *L, int idx, const char *fname);

スタックのインデックス idx にある値 t に対して、t[fname] がテーブルであることを確認し (存在しないなら新しく作成し)、t[fname] をスタックにプッシュします。テーブルが存在したなら true を返し、新しくテーブルを作ったのなら false を返します。

luaL_gsub

[-0, +1, m]
const char *luaL_gsub (lua_State *L,
                       const char *s,
                       const char *p,
                       const char *r);

文字列 s をコピーし、コピーに含まれる文字列 p を全て文字列 r で置き換え、置換結果をスタックにプッシュしてそれを返します。

luaL_len

[-0, +0, e]
lua_Integer luaL_len (lua_State *L, int index);

指定されたインデックスにある値の「長さ」を数値として返します。Lua の # 演算子 (§ 3.4.7) と等価です。演算結果が整数でない場合にはエラーを送出します (このエラーが起こるのはメタメソッドを呼び出したときだけです)。

luaL_loadbuffer

[-0, +1, -]
int luaL_loadbuffer (lua_State *L,
                     const char *buff,
                     size_t sz,
                     const char *name);

modeNULL とした luaL_loadbufferx と等価です。

luaL_loadbufferx

[-0, +1, -]
int luaL_loadbufferx (lua_State *L,
                      const char *buff,
                      size_t sz,
                      const char *name,
                      const char *mode);

バッファを Lua チャンクとしてロードします。この関数は lua_load を使って buff が指すサイズ sz のバッファをチャンクとしてロードします。

この関数の返り値は lua_load と同様です。name はチャンクの名前であり、デバッグ情報やエラーメッセージで使われます。パラメータの文字列 modelua_load と同様です。

luaL_loadfile

[-0, +1, m]
int luaL_loadfile (lua_State *L, const char *filename);

modeNULL とした luaL_loadfilex と等価です。

luaL_loadfilex

[-0, +1, m]
int luaL_loadfilex (lua_State *L
                   const char *filename
                   const char *mode);

ファイルを Lua チャンクとして読み込みます。filename という名前のファイルにあるチャンクが lua_load を使って読み込まれます。filenameNULL のときは標準入力からチャンクを読み込みます。入力の最初の行が # で始まる場合、その行は無視されます。

文字列の引数 modelua_load と同様です。

ファイルに関するエラーがあれば LUA_ERRFILE が返り、無ければ lua_load と同じ返り値が返ります。

lua_load と同様、この関数はチャンクを読み込むだけで実行はしません。

luaL_loadstring

[-0, +1, -]
int luaL_loadstring (lua_State *L, const char *s);

文字列を Lua チャンクとして読み込みます。ゼロ終端文字列 s に含まれるチャンクが lua_load を使って読み込まれます。

この関数は lua_load と同じ返り値を返します。

lua_load と同様、この関数はチャンクを読み込むだけで実行はしません。

luaL_newlib

[-0, +1, m]
void luaL_newlib (lua_State *L, const luaL_Reg l[]);

新しいテーブルを作り、それにリスト l に含まれる関数を登録します。

この関数は次のマクロとして実装されます:

(luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))

配列 l は本当の配列である必要があり、ポインタを使うことはできません。

luaL_newlibtable

[-0, +1, m]
void luaL_newlibtable (lua_State *L, const luaL_Reg l[]);

配列 l に含まれるエントリが全て収まるよう最適化されたサイズを持つテーブルを新しく作成します (ただしエントリの保存はしません)。この関数は luaL_setfuncs と一緒に使われることが想定されています (参照: luaL_newlib)。

この関数はマクロとして実装されます。配列 l は本当の配列である必要があり、ポインタを使うことはできません。

luaL_newmetatable

[-0, +1, m]
int luaL_newmetatable (lua_State *L, const char *tname);

レジストリが tname というキーを持つなら 0 を返します。そうでなければ、ユーザーデータのメタテーブルとして使うテーブルを新しく作成し、このテーブルに __name = tname というペアを追加し、レジストリに [tname] = new table というペアを追加し、1 を返します (参照: luaL_checkudata)。

両方の場合において、レジストリの tname に結び付いた最終的な値をスタックにプッシュします。

luaL_newstate

[-0, +0, -]
lua_State *luaL_newstate (void);

新しい Lua ステートを作成します。この関数は lua_newstate を呼び出しますが、そのとき C の標準メモリアロケーション関数を利用し、エラーメッセージを標準エラー出力に書き出す関数をパニック関数 (§ 4.4) および警告関数として設定します。

成功すれば新しいステートを返します。メモリアロケーションでエラーがあれば NULL を返します。

luaL_openlibs

[-0, +0, e]
void luaL_openlibs (lua_State *L);

全ての Lua 標準ライブラリを与えられたステートで開きます。

luaL_opt

[-0, +0, -]
T luaL_opt (L, func, arg, dflt);

このマクロは次のように定義されます:

(lua_isnoneornil(L,(arg)) ? (dflt) : func(L,(arg)))

言葉を使って説明すると、もし現在実行している関数の arg 番目の引数が nil または存在しない値であれば、このマクロはデフォルト値 dflt を返します。そうでなければ func を ステート L と引数のインデックス arg を使って呼び出します。式 dflt の評価は必要な場合にだけ起こることに注意してください。

luaL_optinteger

[-0, +0, v]
lua_Integer luaL_optinteger (lua_State *L, int arg, lua_Integer d);

現在実行している関数の arg 番目の引数が整数 (もしくは整数に変換できる値) ならその整数を返し、この引数が存在しないか nil なら d を返します。それ以外の場合にはエラーを送出します。

luaL_optlstring

[-0, +0, v]
const char *luaL_optlstring (lua_State *L,
                             int arg,
                             const char *d,
                             size_t *l);

現在実行している関数の arg 番目の引数が文字列ならその文字列を返し、この引数が存在しないか nil なら d を返します。それ以外の場合にはエラーを送出します。

lNULL でない場合、*l に返り値の文字列の長さが代入されます。返り値が NULL のとき (つまり dNULLd を返しているとき) は長さが 0 とみなされます。

この関数は返り値の計算に lua_tolstring を使うので、lua_tolstring で説明した注意事項がここでも当てはまります。

luaL_optnumber

[-0, +0, v]
lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number d);

現在実行している関数の arg 番目の引数が数値なら、それを lua_Number として返します。この引数が存在しないか nil の場合には d を返します。それ以外の場合にはエラーを送出します。

luaL_optstring

[-0, +0, v]
const char *luaL_optstring (lua_State *L, int arg, const char *d);

現在実行している関数の arg 番目の引数が文字列ならその文字列を返し、この引数が存在しないか nil なら d を返します。それ以外の場合にはエラーを送出します。

luaL_prepbuffer

[-?, +?, m]
char *luaL_prepbuffer (luaL_Buffer *B);

size を定数 LUAL_BUFFERSIZE とした luaL_prepbuffsize と等価です。

luaL_prepbuffsize

[-?, +?, m]
char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);

バッファ B に加える文字列をコピーするためのサイズ sz のメモリ領域のアドレスを返します (参照: luaL_Buffer)。この領域にコピーした文字列を実際にバッファに加えるには、加えた文字列のサイズと共に luaL_addsize を呼び出す必要があります。

luaL_pushfail

[-0, +1, -]
void luaL_pushfail (lua_State *L);

fail をスタックにプッシュします (参照: § 6)。

luaL_pushresult

[-?, +1, m]
void luaL_pushresult (luaL_Buffer *B);

バッファ B の利用を終了し、最終的な文字列をスタックにプッシュします。

luaL_pushresultsize

[-?, +1, m]
void luaL_pushresultsize (luaL_Buffer *B, size_t sz);

luaL_addsizeluaL_pushresult を続けて実行するのと等価です。

luaL_ref

[-1, +0, m]
int luaL_ref (lua_State *L, int t);

参照 (reference) を作って返します。この参照はスタックのインデックス t にあるテーブルに作成され、スタックトップにあるオブジェクトを指します (このオブジェクトはスタックからポップされます)。

参照とはユニークな整数キーのことです。t にあるテーブルに対して整数のキーを個別に追加しない限り、luaL_ref が返す整数はユニークであることが保証されます。参照 r が指すオブジェクトは lua_rawgeti(L, t, r) で取得できます。参照の解放には luaL_unref を使います。

スタックトップにある値が nil である場合、luaL_ref は定数 LUA_REFNIL を返します。また定数 LUA_NOREFluaL_ref が返すどんな参照とも異なることが保証されています。

luaL_Reg

typedef struct luaL_Reg {
  const char *name;
  lua_CFunction func;
} luaL_Reg;

luaL_setfuncs で登録するときに使う関数の配列の型です。name は関数の名前で、func は関数へのポインタを表します。luaL_Reg の配列を使うときは、namefunc を両方 NULL とした「門番」要素を配列の最後の要素とする必要があります。

luaL_requiref

[-0, +1, e]
void luaL_requiref (lua_State *L,
                    const char *modname,
                    lua_CFunction openf,
                    int glb);

package.loaded[modname]true でなければ、modname を引数として openf 関数を呼び出し、その結果を package.loaded[modname] に代入します。これにより require を通して openf を呼び出したような処理が行われます。

glbtrue なら、読み込んだモジュールをグローバル変数 modname として保存します。

この関数はモジュールのコピーがスタックに残った状態で返ります。

luaL_setfuncs

[-nup, +0, m]
void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);

配列 l に含まれる全ての関数 (参照: luaL_Reg) をスタックトップにあるテーブルに登録します。ただし次に説明するように、テーブルの上にアップバリューを配置することもできます。

nup が 0 でない場合、全ての関数は nup 個のアップバリューと共に作成されます。アップバリューの初期値にはスタックでライブラリテーブルの上にプッシュされた値が使われます。これらの値は登録処理の後スタックからポップされます。

luaL_setmetatable

[-0, +0, -]
void luaL_setmetatable (lua_State *L, const char *tname);

スタックトップにあるオブジェクトのメタテーブルを、レジストリで tname という名前に関連付いたメタテーブルに設定します (参照: luaL_newmetatable)。

luaL_Stream

typedef struct luaL_Stream {
  FILE *f;
  lua_CFunction closef;
} luaL_Stream;

標準 I/O ライブラリで使われるファイルハンドルの標準的なデータ表現です。

ファイルハンドルは LUA_FILEHANDLE という名前のメタテーブルを持ったフルユーザーデータとして実装されます (LUA_FILEHANDLE はマクロであり、展開した文字列が実際のメタテーブルの名前です)。このメタテーブルは I/O ライブラリによってレジストリに作成されます (参照: luaL_newmetatable)。

ファイルハンドルを表すこのユーザーデータは luaL_Stream 構造体の値を一つ目のユーザーバリューとして持つ必要があり、それ以外のデータを持つことはできません。フィールド f は対応する C ストリーム (不完全に作成されたハンドルでは NULL) を指します。フィールド closef はストリームをクローズする関数であり、ハンドルがクローズあるいはコレクトされるときに呼ばれます。closef は唯一の引数としてファイルハンドルを受け取り、成功したときには true を、エラーのときは false とエラーメッセージを返さなければなりません。Lua は closef を呼んだ後ハンドルがクローズされたことが分かるように fNULL に設定します。

luaL_testudata

[-0, +0, m]
void *luaL_testudata (lua_State *L, int arg, const char *tname);

この関数の動作は基本的に luaL_checkudata と同じですが、判定が通らなかった時にエラーを送出するのではなく NULL を返す点が唯一異なります。

luaL_tolstring

[-0, +1, e]
const char *luaL_tolstring (lua_State *L, int idx, size_t *len);

与えられたインデックスにある任意の Lua の値を意味の通った C 文字列に変換します。処理結果の文字列はスタックにプッシュされ、関数の返り値としても返ります。lenNULL でなければ、*len に文字列の長さが代入されます。

変換される値がメタテーブルを持ち、メタテーブルが __tostring フィールドを持つなら、luaL_tolstring は変換される値を引数として __tostring フィールドに対応するメタメソッドを呼び、その結果を返り値とします

luaL_traceback

[-0, +1, m]
void luaL_traceback (lua_State *L,
                     lua_State *L1,
                     const char *msg,
                     int level);

スタック L1 のトレースバックを作成し、スタックにプッシュします。msgNULL でなければ、それがトレースバックの先頭に加えられます。level パラメータはトレースバックを始めるレベルを指定します。

luaL_typeerror

[-0, +0, v]
const char *luaL_typeerror (lua_State *L,
                            int arg,
                            const char *tname);

この関数を呼び出した C 関数に渡された arg 番目の引数に関する型エラーを送出します。標準的なメッセージが使われます。tname は期待される型の「名前」です。この関数は返りません。

luaL_typename

[-0, +0, -]
const char *luaL_typename (lua_State *L, int index);

スタックの与えられたインデックスにある値の型の名前を返します。

luaL_unref

[-0, +0, -]
void luaL_unref (lua_State *L, int t, int ref);

スタックのインデックス t にあるテーブルの参照 ref を解放します (参照: luaL_ref)。指定されたエントリはテーブルから削除され、参照されていたオブジェクトはコレクトできるようになります。ref という参照も解放され、再利用が可能になります。

refLUA_NOREFLUA_REFNIL の場合には、luaL_unref は何もしません。

luaL_where

[-0, +1, m]
void luaL_where (lua_State *L, int lvl);

コールスタックのレベル lvl における現在の制御位置を説明する文字列をスタックにプッシュします。通常この文字列は次のフォーマットをしています:

chunkname:currentline:

レベル 0 は現在実行中の関数で、レベル 1 はそれを呼び出した関数を表します。

この関数はエラーメッセージの先頭部分を作るのに使われます。


  1. 訳注: 引数 tname は Lua の型ではなく C の型を表す (識別する) 任意の文字列である。luaL_checkudata 関数は C で定義された型の値を Lua のユーザーデータとして型検査と共に使うために利用される。リファレンスマニュアルにはこの使い方についての記述が存在しないが、Programming in Lua (first edition) の第二十八章に解説がある。[return]