2013年7月10日水曜日

luaopen_mathでスタックに謎のLUA_TTABLEが積まれる件について

以下のコードは動作はするが、予期せぬ結果となる。

script.lua

function func(num)
    return num;
end

main.cpp

#include "lua.hpp"
int main( void ) {
    lua_State* p = luaL_newstate();
    luaopen_math( p );
    luaL_dofile( p, "script.lua" );
    int num = 100;
    lua_getglobal( p, "func" );
    lua_pushnumber( p, num );
    lua_pcall( p, 1, 1, 0 );
    num = lua_tonumber( p, 1 );
    lua_close( p );

    return 0;
}

最終的にnumに入っている値は100であると予想されるが、
実際には0が入っている。
luaopen_mathを呼び出した際に、謎の LUA_TTABLE がプッシュされるため、
スタックの一番下には func の返り値ではなく、
テーブルが入っており、その上に返り値が積まれている。

NG: num = lua_tonumber( p, 1 );
OK: num = lua_tonumber( p, -1 );

何が積まれているのかは調べたけど分からなかった。
誰か、Luaに詳しい方で分かる方いらっしゃったら教えて下さい。

0 件のコメント: