diff options
author | Björn Gustavsson <[email protected]> | 2012-12-22 06:48:01 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-01-22 19:20:13 +0100 |
commit | 34baa02a2c41cfbc8c0f53da93157ec28e0c9d96 (patch) | |
tree | d868c1dfa8ff78e22fe2f7d40f4e001d84cd97b9 /lib/asn1/src/asn1ct_gen_ber_bin_v2.erl | |
parent | 76ad80f52981449af3c79fdf5b298e4c8d817788 (diff) | |
download | otp-34baa02a2c41cfbc8c0f53da93157ec28e0c9d96.tar.gz otp-34baa02a2c41cfbc8c0f53da93157ec28e0c9d96.tar.bz2 otp-34baa02a2c41cfbc8c0f53da93157ec28e0c9d96.zip |
BER run-time: Refactor decoding of string data types
In the BER run-time code (asn1rtt_ber), there is a general function
for decoding a string:
decode_restricted_string(Tlv, Range, StringType, TagsIn)
But the StringType argument is not important. It is only used
internally in asn1rtt_ber to distinguish universal strings and BMP
strings from other strings. By slightly refactoring the string
decoding code, we can eliminate the StringType argument and a
subsequent run-time test on the string type. That will slightly reduce
code size, slightly increase speed, and eliminate Dialyzer warnings.
Diffstat (limited to 'lib/asn1/src/asn1ct_gen_ber_bin_v2.erl')
-rw-r--r-- | lib/asn1/src/asn1ct_gen_ber_bin_v2.erl | 74 |
1 files changed, 23 insertions, 51 deletions
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl index e7414a2040..fe5b5031b6 100644 --- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl +++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl @@ -495,10 +495,19 @@ gen_dec_prim(Erules,Att,BytesVar,DoTag,TagIn,Form,OptOrMand) -> _ -> "" end, NewTypeName = case Typename of - 'ANY' -> 'ASN1_OPEN_TYPE'; - _ -> Typename + 'ANY' -> 'ASN1_OPEN_TYPE'; + 'OCTET STRING' -> restricted_string; + 'NumericString' -> restricted_string; + 'TeletexString' -> restricted_string; + 'T61String' -> restricted_string; + 'VideotexString' -> restricted_string; + 'GraphicString' -> restricted_string; + 'VisibleString' -> restricted_string; + 'GeneralString' -> restricted_string; + 'PrintableString' -> restricted_string; + 'IA5String' -> restricted_string; + _ -> Typename end, -% DoLength = case NewTypeName of 'BOOLEAN'-> emit(["decode_boolean(",BytesVar,","]), @@ -531,54 +540,17 @@ gen_dec_prim(Erules,Att,BytesVar,DoTag,TagIn,Form,OptOrMand) -> need(decode_relative_oid, 2); 'ObjectDescriptor' -> emit(["decode_restricted_string(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_ObjectDescriptor},","]), - need(decode_restricted_string, 4); - 'OCTET STRING' -> - emit(["decode_octet_string",AsBin,"(",BytesVar,",", - {asis,Constraint},","]), - need(decode_octet_string, 3); - 'NumericString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_NumericString},","]), - need(decode_restricted_string, 4); - TString when TString == 'TeletexString'; - TString == 'T61String' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_TeletexString},","]), - need(decode_restricted_string, 4); - 'VideotexString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_VideotexString},","]), - need(decode_restricted_string, 4); - 'GraphicString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_GraphicString},","]), - need(decode_restricted_string, 4); - 'VisibleString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_VisibleString},","]), - need(decode_restricted_string, 4); - 'GeneralString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_GeneralString},","]), - need(decode_restricted_string, 4); - 'PrintableString' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_PrintableString},","]), - need(decode_restricted_string, 4); - 'IA5String' -> - emit(["decode_restricted_string",AsBin,"(", - BytesVar,",",{asis,Constraint},",", - {asis,?T_IA5String},","]), - need(decode_restricted_string, 4); + BytesVar,",",{asis,Constraint},","]), + need(decode_restricted_string, 3); + restricted_string -> + emit(["decode_restricted_string",AsBin,"(",BytesVar,","]), + case Constraint of + [] -> + need(decode_restricted_string, 2); + _ -> + emit([{asis,Constraint},","]), + need(decode_restricted_string, 3) + end; 'UniversalString' -> emit(["decode_universal_string",AsBin,"(", BytesVar,",",{asis,Constraint},","]), |