code_utils

Erlang Abstract Form parsing functions


License
MIT

Documentation

code_utils

Build Status Hex.pm Coverage Status

Functions useful for evaluating Erlang code and manipulating of Erlang abstract format.

Examples

code_utils:eval_string/1

Evaluate input string as Erlang code. String needs to end with . character to properly evaluate.

1> code_utils:eval_string("
    N = 3,
    L = lists:seq(1,N),
    list_to_tuple([\"str\" | L]).
").
{"str",1,2,3}

code_utils:term_to_string/1

Convert Erlang term to string representation of this term. Functions and references can't be converted. PIDs are converted to c:pid/3 functions.

2> code_utils:term_to_string({atom,0,"str",[pid(0,37,0)]}).
"{atom,0,\"str\",[c:pid(0,37,0)]}"

code_utils:string_to_term/1

Convert string containing an Erlang term to actual Erlang term. Functions and references can't be converted. PIDs are converted from c:pid/3 functions.

3> code_utils:string_to_term("{atom,0,\"str\",[c:pid(0,37,0)]}").
{atom,0,"str",[<0.37.0>]}

code_utils:string_to_exprs/1

Convert string containing some Erlang code to abstract format expressions.

4> code_utils:string_to_exprs("
    N = 3,
    L = lists:seq(1,N),
    list_to_tuple([\"str\" | L]).
").

[{match,1,{var,1,'N'},{integer,1,3}},
 {match,2,
        {var,2,'L'},
        {call,2,
              {remote,2,{atom,2,lists},{atom,2,seq}},
              [{integer,2,1},{var,2,'N'}]}},
 {call,3,
       {atom,3,list_to_tuple},
       [{cons,3,{string,3,"str"},{var,3,'L'}}]}]

code_utils:eval_exprs/1

Evaluate abstract format expressions as code.

5> code_utils:eval_exprs([
    {call,1, {remote,1,{atom,1,lists},{atom,1,append}}, [
        {cons,1,{integer,1,2},{nil,1}},
        {cons,1,{integer,1,3},{nil,1}}
    ]}
]).

[2,3]