lua_resumeが正常終了した後、もう一度lua_resumeを呼べるかどうかを調べる方法

Last-modified: 2006-04-20 (木) 19:25:31

この項目の情報は古いものです。
Lua5.1では関数の仕様が変更され、lua_resumeの返値のみで判断することが出来るようになっています。
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html


243 名前:デフォルトの名無しさん[sage] 投稿日:04/02/20(金) 10:52
lua_resumeが0以外で帰ってきて、スタックが1つだけ詰まれててそれが文字列で、
・その文字列が"cannot resume"を含まなければ、スクリプト実行エラー
・そうでなければ、既に実行が終わったものをlua_resumeしようとした時のエラー
とかしてる。もっとうまい方法あるかな?

lua_resumeが正常終了した後、もう一度lua_resumeを呼べるかどうかを調べる方法は、
ソースを見る限りなさゲ?(もう調べたころの記憶が曖昧だけど…)

348 名前:デフォルトの名無しさん[sage] 投稿日:04/08/26(木) 03:16

243

lua_resumeが正常終了した後、もう一度lua_resumeを呼べるかどうかを調べる方法

lbaselib.cのluaB_costatus()参照
 lua_Debug ar;
 if (lua_getstack(co, 0, &ar) == 0 && lua_gettop(co) == 0)
  /* terminated */;
 else
  /* alive */;

個人的にはもっと簡便にlua_resume(L, ...)呼ぶ前に
  lua_gettop(L) == 0 ならコルーチン終了してる
ってコーディングしてるけど今までのところ問題ない