diff --git a/compiler2/Type.cc b/compiler2/Type.cc index 491556570d303f6868da5891882cfaa0284c66cf..a0182ffd5a3954373f47ad3bd37f5972140d8539 100644 --- a/compiler2/Type.cc +++ b/compiler2/Type.cc @@ -3044,6 +3044,7 @@ namespace Common { break; case T_OSTR: case T_CSTR: + case T_USTR: return 8; default: return 1; diff --git a/regression_test/RAW/Annex_E_variants/Annex_E_variants.ttcn b/regression_test/RAW/Annex_E_variants/Annex_E_variants.ttcn index c89735da1e7701d6ffd6dfafa35f30d8adb58978..2cf3c69f61a80b8869a0c2052aa48d4e6fdcf814 100644 --- a/regression_test/RAW/Annex_E_variants/Annex_E_variants.ttcn +++ b/regression_test/RAW/Annex_E_variants/Annex_E_variants.ttcn @@ -86,6 +86,9 @@ type octetstring OStr32Eq with { variant "FIELDLENGTH(4), BYTEORDER(last)" }; type charstring CStr64 with { variant "64 bit" }; // 64 bits = 8 characters type charstring CStr64Eq with { variant "FIELDLENGTH(8), BYTEORDER(last)" }; +type universal charstring UStr80 with { variant "80 bit" }; // 80 bits = 10 UTF-8 characters +type universal charstring UStr80Eq with { variant "FIELDLENGTH(10), BYTEORDER(last)" }; + // Component type type component CT {} @@ -490,6 +493,28 @@ testcase tc_cstr64() runs on CT setverdict(pass); } +testcase tc_ustr80() runs on CT +{ + var UStr80 x := "sepr" & char(0, 0, 1, 113); + var UStr80Eq x_eq := x; + var bitstring enc := encvalue(x); + var bitstring enc_exp := encvalue(x_eq); + if (enc != enc_exp) { + setverdict(fail, "Expected: ", enc_exp, ", got: ", enc); + } + else { + var UStr80 dec; + var UStr80Eq dec_exp; + if (decvalue(enc, dec) != 0 or decvalue(enc_exp, dec_exp) != 0) { + setverdict(fail, "Could not decode ", enc); + } + else if (dec != dec_exp) { + setverdict(fail, "Expected: ", dec_exp, ", got: ", dec); + } + } + setverdict(pass); +} + // Control part control { execute(tc_byte()); @@ -511,6 +536,7 @@ control { execute(tc_hstr20()); execute(tc_ostr32()); execute(tc_cstr64()); + execute(tc_ustr80()); } } diff --git a/regression_test/RAW/Makefile b/regression_test/RAW/Makefile index e9860395d82316e34fdc77f85fed88f2c301a91a..dfa4ef78dc7cda1e96827b5b505fc75529c98d8e 100644 --- a/regression_test/RAW/Makefile +++ b/regression_test/RAW/Makefile @@ -17,7 +17,7 @@ TOPDIR := .. include $(TOPDIR)/Makefile.regression -RDIRS = Examples HN25015 HQ26535 HQ49956 HS16977 ustr +RDIRS = Examples HN25015 HQ26535 HQ49956 HS16977 ustr Annex_E_variants all dep clean run distclean: for dir in $(RDIRS); do (cd $$dir && $(MAKE) $@) || exit; done diff --git a/regression_test/RAW/ustr/ustr.ttcn b/regression_test/RAW/ustr/ustr.ttcn index f90a699b2b82477f1eefa1ef2771eb2691dad7af..3eecffb7c4860f75975027b01d840b5adc6fd290 100644 --- a/regression_test/RAW/ustr/ustr.ttcn +++ b/regression_test/RAW/ustr/ustr.ttcn @@ -18,7 +18,7 @@ type record Rec { } with { variant ""; - variant (ustr) "FIELDLENGTH(256)"; // 32 UTF-8 characters + variant (ustr) "FIELDLENGTH(32)"; // 32 UTF-8 characters } type component CT {} diff --git a/usrguide/referenceguide.doc b/usrguide/referenceguide.doc index fe16d071653517f7eed8aa072d6da7035f764c69..b56d7638e3abceaa276e012bb5ef2690b7fc6c00 100644 Binary files a/usrguide/referenceguide.doc and b/usrguide/referenceguide.doc differ