このページの内容

C APIの関数と型:Unsigned–yieldk

lua_Unsigned

typedef ... lua_Unsigned;

lua_Integerの符号なし版です。


lua_upvalueindex

[-0, +0, –]

int lua_upvalueindex (int i);

実行中の関数のi番目の上位値を表す疑似インデックスを返します(§4.2を参照)。iは範囲*[1,256]*内でなければなりません。


lua_version

[-0, +0, –]

lua_Number lua_version (lua_State *L);

このコアのバージョン番号を返します。


lua_WarnFunction

typedef void (*lua_WarnFunction) (void *ud, const char *msg, int tocont);

Luaが警告を発するために呼び出す警告関数の型です。第1引数はlua_setwarnfが設定した不透明ポインターです。第2引数は警告メッセージです。第3引数は、次の呼び出しのメッセージによってこのメッセージを継続するかを示すブール値です。

警告の詳細についてはwarnを参照してください。


lua_warning

[-0, +0, –]

void lua_warning (lua_State *L, const char *msg, int tocont);

指定されたメッセージで警告を発します。tocontがtrueの呼び出しにあるメッセージは、この関数の別の呼び出しで継続する必要があります。

警告の詳細についてはwarnを参照してください。


lua_Writer

typedef int (*lua_Writer) (lua_State *L,
                           const void* p,
                           size_t sz,
                           void* ud);

lua_dumpが使うwriter関数の型です。lua_dumpがチャンクの新しい断片を生成するたびにwriterを呼び出し、書き込むバッファー(p)、そのサイズ(sz)、lua_dumpへ指定された引数udを渡します。

lua_dumpは最後の断片を書き込んだ後、NULLバッファー(サイズ0)を指定してwriter関数をもう一度呼び出し、そのことを通知します。

writerはエラーコードを返します。0はエラーなしを意味し、そのほかの値はエラーを意味し、lua_dumpが再びwriterを呼び出すことを停止します。


lua_xmove

[-?, +?, –]

void lua_xmove (lua_State *from, lua_State *to, int n);

同じステートの異なるスレッド間で値を交換します。

この関数はスタックfromからn個の値をポップし、スタックtoへプッシュします。


lua_yield

[-?, +?, v]

int lua_yield (lua_State *L, int nresults);

この関数はlua_yieldkと等価ですが、継続を持ちません(§4.5を参照)。したがって、スレッドがresumeすると、lua_yieldを呼び出した関数を呼び出した関数を継続します。予想外の動作を避けるため、この関数は末尾呼び出しでのみ呼び出すべきです。


lua_yieldk

[-?, +?, v]

int lua_yieldk (lua_State *L,
                int nresults,
                lua_KContext ctx,
                lua_KFunction k);

コルーチン(スレッド)をyieldします。

C関数がlua_yieldkを呼び出すと、実行中のコルーチンは実行を中断し、このコルーチンを開始したlua_resumeの呼び出しが返ります。引数nresultsは、lua_resumeへ結果として渡すスタック上の値の数です。

コルーチンが再びresumeされると、Luaは指定された継続関数kを呼び出し、yieldしたC関数の実行を継続します(§4.5を参照)。この継続関数は以前の関数と同じスタックを受け取ります。そこではすべての結果(nresults)が除去され、lua_resumeへ渡された引数に置き換えられています。さらに、継続関数はlua_yieldkへ渡された値ctxを受け取ります。

通常、この関数は返りません。コルーチンが最終的にresumeすると、継続関数の実行を続けます。ただし、行フックまたはカウントフック(§4.7を参照)の内部からこの関数を呼び出すという特殊な場合があります。この場合、継続なし(おそらくlua_yieldの形式)、結果なしでlua_yieldkを呼び出し、フックは呼び出し直後に返るべきです。Luaはyieldし、コルーチンが再びresumeすると、フックを発動させた(Lua)関数の通常の実行を継続します。

継続関数を持たない保留中のC呼び出し(C呼び出し境界と呼びます)があるスレッドから呼び出した場合、またはresume内で実行されていないスレッド(通常はメインスレッド)から呼び出した場合、この関数はエラーを発生させる可能性があります。