aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2012-12-22 06:48:01 +0100
committerBjörn Gustavsson <[email protected]>2013-01-22 19:20:13 +0100
commit34baa02a2c41cfbc8c0f53da93157ec28e0c9d96 (patch)
treed868c1dfa8ff78e22fe2f7d40f4e001d84cd97b9 /lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
parent76ad80f52981449af3c79fdf5b298e4c8d817788 (diff)
downloadotp-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.erl74
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},","]),