-module(esyntax).
-compile(export_all).
f() ->
FunctionBuilder = function_builder(get_send_msg_info),
ClauseBuilder = clause_builder([], none),
FunctionBuilder(ClauseBuilder(erl_syntax:list(erl_syntax:atom(abz)))).
function_builder(FunctionName) ->
fun(Clauses) ->
erl_syntax:function(erl_syntax:atom(FunctionName), Clauses)
end.
clause_builder(Patterns, Guard) ->
fun(Body) ->
erl_syntax:clause(Patterns, Guard, Body)
end.
%%%%%%%%%%%%%
55> SyntaxTree = esyntax:f().
{tree,function,
{attr,0,[],none},
{function,
{tree,atom,{attr,0,[],none},get_send_msg_info},
{tree,clause,
{attr,0,[],none},
{clause,[],none,
{tree,list,
{attr,0,[],none},
{list,{tree,atom,{attr,0,[],none},abz},none}}}}}}
56> erl_syntax:is_tree(SyntaxTree).
true
57> erl_syntax:type(SyntaxTree).
function
58> erl_syntax:revert(SyntaxTree).
** exception error: no function clause matching
erl_syntax:'-revert/1-lc$^1/1-1-'({tree,clause,
{attr,0,[],none},
{clause,[],none,
{tree,list,
{attr,0,[],none},
{list,
{tree,atom,
{attr,0,[],none},
abz},
none}}}})
in function erl_syntax:'-revert/1-lc$^0/1-0-'/1
in call from erl_syntax:'-revert/1-lc$^0/1-0-'/1
in call from erl_syntax:revert/1
59> erl_syntax:revert_forms([SyntaxTree]).
** exception exit: {function_clause,
[{erl_syntax,'-revert/1-lc$^1/1-1-',
[{tree,clause,
{attr,0,[],none},
{clause,[],none,
{tree,list,
{attr,0,[],none},
{list,{tree,atom,{attr,0,[],none},abz},none}}}}]},
{erl_syntax,'-revert/1-lc$^0/1-0-',1},
{erl_syntax,'-revert/1-lc$^0/1-0-',1},
{erl_syntax,revert,1},
{erl_syntax,revert_forms_1,1},
{erl_syntax,revert_forms,1},
{erl_eval,do_apply,5},
{shell,exprs,7}]}
in function erl_syntax:revert_forms/1