diff options
author | Björn Gustavsson <[email protected]> | 2013-06-10 09:30:13 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-06-10 09:30:13 +0200 |
commit | 3785a3b673a3530c94b9ee3dc053dcb07b71e62f (patch) | |
tree | 080e5971e99cf4a6709b71600d211f1bbb8ac7cd /lib/asn1/src/asn1ct_constructed_per.erl | |
parent | a9375574104b8a0b2c0590efaa1c9cf2e9d01cb1 (diff) | |
parent | 69f02872020636d3efbbecf4bd3de7196040f6a9 (diff) | |
download | otp-3785a3b673a3530c94b9ee3dc053dcb07b71e62f.tar.gz otp-3785a3b673a3530c94b9ee3dc053dcb07b71e62f.tar.bz2 otp-3785a3b673a3530c94b9ee3dc053dcb07b71e62f.zip |
Merge branch 'bjorn/asn1/fix-extension-addition-groups/OTP-11154' into maint
* bjorn/asn1/fix-extension-addition-groups/OTP-11154:
PER, UPER: Fix record name mismatch between HRL file and decoding code
Diffstat (limited to 'lib/asn1/src/asn1ct_constructed_per.erl')
-rw-r--r-- | lib/asn1/src/asn1ct_constructed_per.erl | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl index efb55cf015..d279e9697f 100644 --- a/lib/asn1/src/asn1ct_constructed_per.erl +++ b/lib/asn1/src/asn1ct_constructed_per.erl @@ -354,8 +354,7 @@ gen_dec_constructed_imm_2(Typename, CompList, %% we don't return named lists any more Cnames = mkcnamelist(CompList), demit({"Result = "}), %dbg %% return value as record - RecordName = lists:concat([get_record_name_prefix(), - asn1ct_gen:list2rname(Typename)]), + RecordName = record_name(Typename), case Typename of ['EXTERNAL'] -> emit({" OldFormat={'",RecordName, @@ -377,6 +376,29 @@ gen_dec_constructed_imm_2(Typename, CompList, end, emit({{curr,bytes},"}"}). +%% record_name([TypeName]) -> RecordNameString +%% Construct a record name for the constructed type, ignoring any +%% fake sequences that are used to represent an extension addition +%% group. Such fake sequences never appear as a top type, and their +%% name always start with "ExtAddGroup". + +record_name(Typename0) -> + [TopType|Typename1] = lists:reverse(Typename0), + Typename = filter_ext_add_groups(Typename1, [TopType]), + lists:concat([get_record_name_prefix(), + asn1ct_gen:list2rname(Typename)]). + +filter_ext_add_groups([H|T], Acc) when is_atom(H) -> + case atom_to_list(H) of + "ExtAddGroup"++_ -> + filter_ext_add_groups(T, Acc); + _ -> + filter_ext_add_groups(T, [H|Acc]) + end; +filter_ext_add_groups([H|T], Acc) -> + filter_ext_add_groups(T, [H|Acc]); +filter_ext_add_groups([], Acc) -> Acc. + textual_order([#'ComponentType'{textual_order=undefined}|_],TermList) -> TermList; textual_order(CompList,TermList) when is_list(CompList) -> |