2011-06-30 12 views
0

関数本体を(文字列として)どのように抽出できますか?例えば、私はC関数を呼び出し、スタックから関数を抽出し、型がLUA_TFUNCTIONであるかどうかを確認し、その体を得るために何をする必要がありますか?関数本体を抽出する

答えて

2

この関数がスタック上にある場合、関数はすでにコンパイルされています。あなたがしようとすることができる最高はlua_dumpであり、次にdecode the bytecodeです。

-2

デバッグライブラリでこれを行うことができます。 Lua C APIにはありません。この目的のためにLua関数を呼びたいと思うでしょう。

+1

-1すべてのデバッグライブラリ関数は、[lua_getinfo](http://www.lua.org/manual/5.1/manual.html#lua_getinfo)などのAPI関数の観点から定義されています。 –

2

文字列パラメータ「S」を使用してlua_getinfoを呼び出し、lua_Debug構造の「source」メンバをチェックすることができます。その文字列が '@'で始まる場合はファイル名であり、ソースを必要とする場合はファイルを再読み込みする必要があります(Luaはファイルをインクリメンタルに読み取って関数をロードし、文字列として保存しません)。それ以外の場合、その内容は機能がで定義されたチャンクとしてロード文字列になります。

なお、いずれの場合、当該機能を定義したチャンク全体が返されますsourceインチ構造体に定義されている他のフィールドを使用して、その関数だけに文字列を絞り込むことができます。ただし、同じ動作を得るために、その文字列を読み込むことはできません(関数定義はたとえば、外部スコープで定義された変数を参照してください)。

関連する問題