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]