Lua を組み込み、遅延関数ルックアップの形式を実装するプログラムがあります。
Lua 5.1 での動作方法では、シンボルが未定義の場合はいつでも、インタープリターがグローバル関数フックを呼び出してシンボルを解決していました。
これは、この遅延関数ルックアップを実装した C コードのごく一部です。
int function_hook(lua_State *pLuaState)
{
// do the function lookup here
....
return 1;
}
......
//-- create table containing the hook details
lua_newtable(pLuaState);
lua_pushstring(pLuaState, "__index");
lua_pushcfunction(pLuaState, function_hook);
lua_settable(pLuaState, -3);
//-- set global index callback hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
現在、このコードを Lua 5.2 に移行しようとしていますが、問題が発生しました。
Lua 5.2 では LUA_GLOBALSINDEX 値が定義されなくなったため、このコード行はコンパイルされなくなりました。
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
LUA_GLOBALSINDEX へのこの変更への参照がありますが、残念ながら役に立ちませんでした。
この 1 行のコードを書き直して、未解決のシンボルが見つかるたびにインタープリターが function_hook を呼び出せるようにする最善の方法は何でしょうか?