aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter/src/compiler
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2011-10-14 10:01:22 +0200
committerAnders Svensson <[email protected]>2011-10-17 12:26:47 +0200
commit1327c7c7d098a7593e5458bc5c06fd9459e73de3 (patch)
treeaf9bd2595a5dd59193869740e0cdd9d4a3b01c80 /lib/diameter/src/compiler
parentd8ec8f4f35707581fa55f4e97fc8264b7adf0cab (diff)
downloadotp-1327c7c7d098a7593e5458bc5c06fd9459e73de3.tar.gz
otp-1327c7c7d098a7593e5458bc5c06fd9459e73de3.tar.bz2
otp-1327c7c7d098a7593e5458bc5c06fd9459e73de3.zip
Allow @name/@prefix to be set with diameterc
Diffstat (limited to 'lib/diameter/src/compiler')
-rw-r--r--lib/diameter/src/compiler/diameter_spec_util.erl19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/diameter/src/compiler/diameter_spec_util.erl b/lib/diameter/src/compiler/diameter_spec_util.erl
index e9221ed00a..e62ba05427 100644
--- a/lib/diameter/src/compiler/diameter_spec_util.erl
+++ b/lib/diameter/src/compiler/diameter_spec_util.erl
@@ -34,19 +34,28 @@
%%
%% Output: orddict()
-parse(Path, Options) ->
- put({?MODULE, verbose}, lists:member(verbose, Options)),
+parse(Path, Opts) ->
+ put({?MODULE, verbose}, lists:member(verbose, Opts)),
{ok, B} = file:read_file(Path),
Chunks = chunk(B),
- Spec = make_spec(Chunks),
+ Spec = reset(make_spec(Chunks), Opts, [name, prefix]),
true = groups_defined(Spec), %% sanity checks
true = customs_defined(Spec), %%
- Full = import_enums(import_groups(import_avps(insert_codes(Spec),
- Options))),
+ Full = import_enums(import_groups(import_avps(insert_codes(Spec), Opts))),
true = enums_defined(Full), %% sanity checks
true = v_flags_set(Spec),
Full.
+reset(Spec, Opts, Keys) ->
+ lists:foldl(fun(K,S) -> reset(lists:keyfind(K, 1, Opts), S) end,
+ Spec,
+ Keys).
+
+reset({Key, Str}, Spec) ->
+ orddict:store(Key, ?ATOM(Str), Spec);
+reset(_, Spec) ->
+ Spec.
+
%% Optional reports when running verbosely.
report(What, Data) ->
report(get({?MODULE, verbose}), What, Data).