Merge ROMA branch to master #515
16
rebar.config
16
rebar.config
@ -1,10 +1,24 @@
|
|||||||
{erl_opts, [debug_info]}.
|
{erl_opts, [debug_info]}.
|
||||||
|
|
||||||
%% NOTE: When possible deps are referenced by Git ref to ensure consistency between builds.
|
|
||||||
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git",
|
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git",
|
||||||
{ref,"720510a"}}}
|
{ref,"720510a"}}}
|
||||||
|
, {getopt, "1.0.1"}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
{escript_incl_apps, [aesophia, aebytecode, getopt]}.
|
||||||
|
{escript_main_app, aesophia}.
|
||||||
|
{escript_name, aesophia}.
|
||||||
|
{escript_emu_args, "%%! +sbtu +A0\n"}.
|
||||||
|
{provider_hooks, [{post, [{compile, escriptize}]}]}.
|
||||||
|
|
||||||
|
{post_hooks, [{"(linux|darwin|solaris|freebsd|netbsd|openbsd)",
|
||||||
|
escriptize,
|
||||||
|
"cp \"$REBAR_BUILD_DIR/bin/aesophia\" ./aesophia"},
|
||||||
|
{"win32",
|
||||||
|
escriptize,
|
||||||
|
"robocopy \"%REBAR_BUILD_DIR%/bin/\" ./ aesophia* "
|
||||||
|
"/njs /njh /nfl /ndl & exit /b 0"} % silence things
|
||||||
|
]}.
|
||||||
|
|
||||||
{dialyzer, [
|
{dialyzer, [
|
||||||
{warnings, [unknown]},
|
{warnings, [unknown]},
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
|
{"1.1.0",
|
||||||
[{<<"aebytecode">>,
|
[{<<"aebytecode">>,
|
||||||
{git,"https://github.com/aeternity/aebytecode.git",
|
{git,"https://github.com/aeternity/aebytecode.git",
|
||||||
{ref,"720510a24de32c9bad6486f34ca7babde124bf1e"}},
|
{ref,"720510a24de32c9bad6486f34ca7babde124bf1e"}},
|
||||||
0}].
|
0},
|
||||||
|
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}.
|
||||||
|
[
|
||||||
|
{pkg_hash,[
|
||||||
|
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]}
|
||||||
|
].
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
[kernel,
|
[kernel,
|
||||||
stdlib,
|
stdlib,
|
||||||
syntax_tools,
|
syntax_tools,
|
||||||
|
getopt,
|
||||||
aebytecode
|
aebytecode
|
||||||
]},
|
]},
|
||||||
{env,[]},
|
{env,[]},
|
||||||
|
71
src/aesophia.erl
Normal file
71
src/aesophia.erl
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
-module(aesophia).
|
||||||
|
|
||||||
|
-export([main/1]).
|
||||||
|
|
||||||
|
-define(OPT_SPEC,
|
||||||
|
[ {src_file, undefined, undefined, string, "Sophia source code file"}
|
||||||
|
, {verbose, $v, "verbose", undefined, "Verbose output"}
|
||||||
|
, {help, $h, "help", undefined, "Show this message"}
|
||||||
|
, {outfile, $o, "out", string, "Output file (experimental)"} ]).
|
||||||
|
|
||||||
|
usage() ->
|
||||||
|
getopt:usage(?OPT_SPEC, "aesophia").
|
||||||
|
|
||||||
|
main(Args) ->
|
||||||
|
case getopt:parse(?OPT_SPEC, Args) of
|
||||||
|
{ok, {Opts, []}} ->
|
||||||
|
case proplists:get_value(help, Opts, false) of
|
||||||
|
false ->
|
||||||
|
compile(Opts);
|
||||||
|
true ->
|
||||||
|
usage()
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ok, {_, NonOpts}} ->
|
||||||
|
io:format("Can't understand ~p\n\n", [NonOpts]),
|
||||||
|
usage();
|
||||||
|
|
||||||
|
{error, {Reason, Data}} ->
|
||||||
|
io:format("Error: ~s ~p\n\n", [Reason, Data]),
|
||||||
|
usage()
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
compile(Opts) ->
|
||||||
|
case proplists:get_value(src_file, Opts, undefined) of
|
||||||
|
undefined ->
|
||||||
|
io:format("Error: no input source file\n\n"),
|
||||||
|
usage();
|
||||||
|
File ->
|
||||||
|
compile(File, Opts)
|
||||||
|
end.
|
||||||
|
|
||||||
|
compile(File, Opts) ->
|
||||||
|
Verbose = proplists:get_value(verbose, Opts, false),
|
||||||
|
OutFile = proplists:get_value(outfile, Opts, undefined),
|
||||||
|
|
||||||
|
try
|
||||||
|
Res = aeso_compiler:file(File, [pp_ast || Verbose]),
|
||||||
|
write_outfile(OutFile, Res),
|
||||||
|
io:format("\nCompiled successfully!\n")
|
||||||
|
catch
|
||||||
|
%% The compiler errors.
|
||||||
|
error:{type_errors, Errors} ->
|
||||||
|
io:format("\n~s\n", [string:join(["** Type errors\n" | Errors], "\n")]);
|
||||||
|
error:{parse_errors, Errors} ->
|
||||||
|
io:format("\n~s\n", [string:join(["** Parse errors\n" | Errors], "\n")]);
|
||||||
|
error:{code_errors, Errors} ->
|
||||||
|
ErrorStrings = [ io_lib:format("~p", [E]) || E <- Errors ],
|
||||||
|
io:format("\n~s\n", [string:join(["** Code errors\n" | ErrorStrings], "\n")]);
|
||||||
|
%% General programming errors in the compiler.
|
||||||
|
error:Error ->
|
||||||
|
Where = hd(erlang:get_stacktrace()),
|
||||||
|
ErrorString = io_lib:format("Error: ~p in\n ~p", [Error,Where]),
|
||||||
|
io:format("\n~s\n", [ErrorString])
|
||||||
|
end.
|
||||||
|
|
||||||
|
write_outfile(undefined, _) -> ok;
|
||||||
|
write_outfile(Out, ResMap) ->
|
||||||
|
%% Lazy approach
|
||||||
|
file:write_file(Out, term_to_binary(ResMap)),
|
||||||
|
io:format("Output written to: ~s\n", [Out]).
|
Loading…
x
Reference in New Issue
Block a user