[erlang-questions] Getting code from closures

Thomas Lindgren thomasl_erlang@REDACTED
Tue Dec 3 20:06:29 CET 2013


Shudder ... yeah, this is about what I thought might be the "default case". Are there any principles about what values go with what free variables?

Best,
Thomas



On Tuesday, December 3, 2013 2:02 PM, Richard Carlsson <carlsson.richard@REDACTED> wrote:
 
On 2013-12-03 13:14 , Thomas Lindgren wrote:
>
>> Hi guys,
>>
>> Before I start hacking on something, I thought I'd ask whether there
>> already is a standard way to get the original code from a compiled
>> fun/closure. (I know you can get it for interpreted funs by using fun_info.)
>>
>> E.g., for code like this:
>>
>> -module(a).
>> -compile(export_all).
>> adder(N) -> fun(X) X+N end.
>>
>> I'd like to be able to write something like this:
>>
>>  > c(a), F = a:adder(3), magic:get_code(F).
>> {fun, 0, [{clause, 0, [{var, 0, 'X'}], [], [{op, '+', {var,
>> 0,'X'},{var,0,'N'}}]}], [{'N', 3}]}  %% AST of fun F with free var env
>>
>> Or the equivalent.
>
>Use fun_info to get the name/arity of the generated function and dig it 
>out from the debug_info AST (or for bonus points, reverse-compile the 
>beam code)?
>
>Keep in mind that if the code in the fun contains a local call to a 
>function in the same module, you'll need to include the code for all 
>reachable functions as well. Hence, the whole AST or the .beam file as a 
>binary might be more suitable for whatever it is you're doing.
>
>    /Richard
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131203/760f34fd/attachment.htm>


More information about the erlang-questions mailing list