Извлечь функцию тела - PullRequest
       1

Извлечь функцию тела

0 голосов
/ 30 июня 2011

Как извлечь тело функции (в виде строки)? Например, я вызываю функцию C, извлекаю функцию из стека, проверяю, является ли тип LUA_TFUNCTION и что мне нужно сделать, чтобы получить его тело?

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Вы можете вызвать <a href="http://www.lua.org/manual/5.1/manual.html#lua_getinfo" rel="nofollow">lua_getinfo</a> со строковым параметром «S», а затем проверить «исходный» член структуры lua_Debug.Если эта строка начинается с '@', это имя файла, и вам нужно будет перечитать файл, если вы хотите источник (Lua только читает файл постепенно, чтобы загрузить функцию, и никогда не сохранял ее как строку).В противном случае его содержимым будет строка, загруженная как фрагмент, в котором была определена функция.

Обратите внимание, что в любом случае возвращаемое значение source будет всего фрагмента , который определил функциювопрос.Вы можете сузить строку до этой функции, используя другие поля, определенные в структуре: заметьте, однако, что это не является гарантией того, что вы сможете загрузить эту строку обратно, чтобы получить то же поведение (определение функции можетнапример, ссылки на переменные, определенные во внешней области видимости).

2 голосов
/ 30 июня 2011

Когда функция находится в стеке, она уже скомпилирована.Лучшее, что вы можете попытаться сделать - это lua_dump, а затем декодировать байт-код .

0 голосов
/ 30 июня 2011

Библиотека Debug может сделать это. В Lua C API его нет, для этого нужно вызвать функцию Lua.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...