check {compile_options,Os} in transform_module

This commit is contained in:
Ulf Wiger 2014-12-17 16:47:02 +01:00
parent aa74eee285
commit 5a7bba2697

View File

@ -37,7 +37,8 @@
%%============================================================================ %%============================================================================
transform_module(Mod, PT, Options) -> transform_module(Mod, PT, Options) ->
Forms = abstract_code(beam_file(Mod)), File = beam_file(Mod),
Forms = abstract_code(File),
Context = parse_trans:initial_context(Forms, Options), Context = parse_trans:initial_context(Forms, Options),
PTMods = if is_atom(PT) -> [PT]; PTMods = if is_atom(PT) -> [PT];
is_function(PT, 2) -> [PT]; is_function(PT, 2) -> [PT];
@ -49,7 +50,7 @@ transform_module(Mod, PT, Options) ->
PTMod:parse_transform(Fs, Options) PTMod:parse_transform(Fs, Options)
end, Forms, PTMods), end, Forms, PTMods),
parse_trans:optionally_pretty_print(Transformed, Options, Context), parse_trans:optionally_pretty_print(Transformed, Options, Context),
compile_and_load_forms(Transformed, Options). compile_and_load_forms(Transformed, get_compile_options(Options)).
-spec abstract_code(binary()) -> erlang_form(). -spec abstract_code(binary()) -> erlang_form().
@ -76,9 +77,9 @@ compile_and_load_forms(AbsCode) -> compile_and_load_forms(AbsCode, []).
compile_and_load_forms(AbsCode, Opts) -> compile_and_load_forms(AbsCode, Opts) ->
case compile:forms(AbsCode, Opts) of case compile:forms(AbsCode, Opts) of
{ok, ModName, Binary} -> {ok, ModName, Binary} ->
load_binary(ModName, Binary); load_binary(ModName, Binary, Opts);
{ok, ModName, Binary, _Warnings} -> {ok, ModName, Binary, _Warnings} ->
load_binary(ModName, Binary) load_binary(ModName, Binary, Opts)
end. end.
-spec compile_options(binary() | module()) -> compile_options(). -spec compile_options(binary() | module()) -> compile_options().
@ -102,8 +103,26 @@ rename_module([H|T], NewName) ->
%% Internal functions %% Internal functions
%%============================================================================== %%==============================================================================
load_binary(Name, Binary) -> load_binary(Name, Binary, Opts) ->
case code:load_binary(Name, "", Binary) of code:purge(Name),
File = beam_filename(Name, Opts),
case code:load_binary(Name, File, Binary) of
{module, Name} -> ok; {module, Name} -> ok;
{error, Reason} -> exit({error_loading_module, Name, Reason}) {error, Reason} -> exit({error_loading_module, Name, Reason})
end. end.
get_compile_options(Options) ->
case lists:keyfind(compile_options, 1, Options) of
{_, COpts} ->
COpts;
false ->
[]
end.
beam_filename(Mod, Opts) ->
case lists:keyfind(outdir, 1, Opts) of
{_, D} ->
filename:join(D, atom_to_list(Mod) ++ code:objfile_extension());
false ->
""
end.