Current section
Files
Jump to
Current section
Files
src/erlpool_compile.erl
-module(erlpool_compile).
-define(GLOBALS_MODULE, erlpool_globals).
-export([compile_settings/1]).
-include_lib("syntax_tools/include/merl.hrl").
compile_settings(SettingsList) ->
Forms = get_settings_code(SettingsList),
%% for deubgging only
% file:write_file("/tmp/erlpool_globals_gen.erl", erl_prettypr:format(erl_syntax:form_list(Forms))),
case merl:compile_and_load(Forms) of
{ok, _Bin} ->
ok;
Err ->
Err
end.
get_settings_code(SettingsList) ->
ModuleName = ?GLOBALS_MODULE,
Module = ?Q("-module('@ModuleName@')."),
Export = ?Q("-export([size/1])."),
Function = gen(SettingsList, []),
[Module, Export, Function].
gen([{Name, Size, _PoolArgs} | R], Acc) ->
gen(R, [?Q("(_@Name@) -> {ok, _@Size@}") | Acc]);
gen([], Acc) ->
Clauses = lists:reverse([?Q("(_) -> {error, not_found}") | Acc]),
erl_syntax:function(merl:term(size), Clauses).