erl <=> abstract_code
erl => abstract_code
erlc +debug_info test.erl
{ok, {_, [{abstract_code, {_, Abs}}]}} = beam_lib:chunks(test, [abstract_code]).
abstract_code => erl
S = erl_prettypr:format(erl_syntax:form_list(Abs)).
file:write_file("test_code", term_to_binary(S)).
ep:
erl => abstract_code
$ cat test.erl
-module(test).
-export([start/0]).
-ifdef(TEST).
hello() ->
io:format("########1~n").
-else.
hello() ->
io:format("########2").
-endif.
start() ->
hello().
$
$ erlc +debug_info test.erl
$ erl
1> {ok, {_, [{abstract_code, {_, Abs}}]}}=beam_lib:chunks(test, [abstract_code ]).
{ok,{test,
[{abstract_code,
{raw_abstract_v1,
[{attribute,1,file,{"c:/Users/4399/Desktop/test.erl",1}},
{attribute,1,module,test},
{attribute,2,export,[{start,0}]},
{function,7,hello,0,
[{clause,7,[],[],[{call,8,{remote,...},[...]}]}]},
{function,11,start,0,
[{clause,11,[],[],[{call,12,{...},...}]}]},
{eof,15}]}}]}}
abstract_code => erl
2> S = erl_prettypr:format(erl_syntax:form_list(Abs)).
"-file(\"c:/Users/4399/Desktop/test.erl\", 1).\n\n-module(test).\n\n-export([sta rt/0]).\n\nhello() -> io:format(\"########2\").\n\nstart() -> hello().\n\n"
3> file:write_file("test_code", term_to_binary(S)).
ok
$ cat test_code
僰▒-file("c:/Users/4399/Desktop/test.erl", 1).
-module(test).
-export([start/0]).
hello() -> io:format("########2").
start() -> hello().