Packages

Code instrumentation and metrics collection package.

Current section

Files

Jump to
basho_exometer_core src exometer_igor.erl
Raw

src/exometer_igor.erl

-module(exometer_igor).
-export([parse_transform/2]).
parse_transform(Forms, Opts) ->
IgorOpts = lists:append([Os || {attribute,_,compile,{igor,Os}} <- Forms]),
io:fwrite("IgorOpts = ~p~nOpts = ~p", [IgorOpts, Opts]),
Includes = [I || {i,I} <- Opts],
NewForms =
igor:parse_transform(
Forms, [{igor, IgorOpts ++ [{includes, Includes},
{preprocess, true}]}|Opts]),
fix_for_r16b03(NewForms).
%% erl_syntax:revert/1 is horribly broken in R16B03. This transform
%% corrects
fix_for_r16b03({'fun',L1,{function,{atom,_,F},{integer,_,A}}}) ->
{'fun',L1,{function,F,A}};
fix_for_r16b03({'fun',L1,{function,{atom,_,M},{atom,_,F},{integer,_,A}}}) ->
{'fun',L1,{function,M,F,A}};
fix_for_r16b03(F) when is_tuple(F) ->
list_to_tuple([fix_for_r16b03(X) || X <- tuple_to_list(F)]);
fix_for_r16b03([H|T]) ->
[fix_for_r16b03(H) | fix_for_r16b03(T)];
fix_for_r16b03(F) ->
F.