2011-06-30 4 views
0

Comment puis-je extraire le corps de la fonction (en tant que chaîne)? Par exemple, j'appelle la fonction C, extraire la fonction de la pile, vérifier si le type est LUA_TFUNCTION et que dois-je faire pour obtenir son corps?Extraire le corps de la fonction

Répondre

2

Lorsque la fonction est sur la pile, elle a déjà été compilée. Le mieux que vous pouvez essayer est lua_dump puis decode the bytecode.

-2

La bibliothèque de débogage peut le faire. L'API Lua C ne l'a pas, vous voudriez appeler une fonction Lua à cet effet.

+1

-1 Toutes les fonctions de la bibliothèque de débogage sont définies en termes de fonctions API, telles que [lua_getinfo] (http://www.lua.org/manual/5.1/manual.html#lua_getinfo). –

2

Vous pouvez appeler lua_getinfo avec un paramètre de chaîne "S", puis vérifier le membre "source" de la structure lua_Debug. Si cette chaîne commence par '@', c'est un nom de fichier, et vous devrez relire le fichier si vous voulez la source (Lua ne lit le fichier que de façon incrémentielle pour charger la fonction et ne l'a jamais sauvegardée sous forme de chaîne). Dans le cas contraire, son contenu sera la chaîne chargée que le morceau de la fonction a été définie.

Notez que dans les deux cas, le source retourné sera l'ensemble morceau qui a défini la fonction en question. Vous pouvez restreindre la chaîne à cette seule fonction en utilisant les autres champs définis dans la structure: notez toutefois que cela ne garantit pas que vous pourrez recharger cette chaîne pour obtenir le même comportement (la définition de la fonction peut se référer à des variables définies dans une portée externe, par exemple).

Questions connexes