diff options
author | Björn Gustavsson <[email protected]> | 2013-03-02 12:46:37 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-05-31 14:52:17 +0200 |
commit | 53022b787c723a6c4cdf153f5705bde5fb4655ea (patch) | |
tree | adbf876f8bd408de08ac2db5e8bdc089b8cb0fba /lib/asn1/src/asn1ct_gen_ber_bin_v2.erl | |
parent | c11b5a2ebb602c76d0957b67a0ca7741c45fea85 (diff) | |
download | otp-53022b787c723a6c4cdf153f5705bde5fb4655ea.tar.gz otp-53022b787c723a6c4cdf153f5705bde5fb4655ea.tar.bz2 otp-53022b787c723a6c4cdf153f5705bde5fb4655ea.zip |
Normalize SIZE constraints to simplify backends
Diffstat (limited to 'lib/asn1/src/asn1ct_gen_ber_bin_v2.erl')
-rw-r--r-- | lib/asn1/src/asn1ct_gen_ber_bin_v2.erl | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl index 3a98cbb452..59653e383b 100644 --- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl +++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl @@ -154,7 +154,7 @@ gen_encode_user(Erules,D) when is_record(D,typedef) -> end. gen_encode_prim(Erules,D,DoTag,Value) when is_record(D,type) -> - BitStringConstraint = D#type.constraint, + BitStringConstraint = get_size_constraint(D#type.constraint), asn1ct_name:new(enumval), Type = case D#type.def of 'OCTET STRING' -> restricted_string; @@ -459,11 +459,7 @@ gen_dec_prim(Erules,Att,BytesVar,DoTag,TagIn,Form,OptOrMand) -> %% Currently not used for BER replaced with [] as place holder %% Constraint = Att#type.constraint, %% Constraint = [], - Constraint = - case get_constraint(Att#type.constraint,'SizeConstraint') of - no -> []; - Tc -> Tc - end, + Constraint = get_size_constraint(Att#type.constraint), ValueRange = case get_constraint(Att#type.constraint,'ValueRange') of no -> []; @@ -1480,6 +1476,14 @@ mkfuncname(WhatKind,DecOrEnc) -> end. +get_size_constraint(C) -> + case lists:keyfind('SizeConstraint', 1, C) of + false -> []; + {_,{_,[]}} -> []; %Extensible. + {_,{Sv,Sv}} -> Sv; + {_,{_,_}=Tc} -> Tc + end. + get_constraint(C,Key) -> case lists:keysearch(Key,1,C) of false -> |