diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c index 37b69bc2d7efa3c3d82c087fd4527a8c4a86dbd4..d75d73ca739bf1c0f9ca91a8e79ec4ff640a62f0 100644 --- a/libasn1compiler/asn1c_C.c +++ b/libasn1compiler/asn1c_C.c @@ -2338,7 +2338,7 @@ emit_member_OER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx) { etype = expr_get_type(arg, expr); if((arg->flags & A1C_GEN_OER) - && (expr->constraints || etype == ASN_BASIC_ENUMERATED + && (expr->combined_constraints || etype == ASN_BASIC_ENUMERATED || etype == ASN_CONSTR_CHOICE)) { /* Fall through */ } else { @@ -2393,7 +2393,7 @@ emit_member_PER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx) { etype = expr_get_type(arg, expr); if((arg->flags & A1C_GEN_PER) - && (expr->constraints + && (expr->combined_constraints || etype == ASN_BASIC_ENUMERATED || etype == ASN_CONSTR_CHOICE) ) { @@ -3249,7 +3249,7 @@ do { \ } if(arg->flags & A1C_GEN_OER) { - if(expr->constraints + if(expr->combined_constraints || expr->expr_type == ASN_BASIC_ENUMERATED || expr->expr_type == ASN_CONSTR_CHOICE) { OUT("&asn_OER_type_%s_constr_%d,\n", @@ -3262,7 +3262,7 @@ do { \ } if(arg->flags & A1C_GEN_PER) { - if(expr->constraints + if(expr->combined_constraints || expr->expr_type == ASN_BASIC_ENUMERATED || expr->expr_type == ASN_CONSTR_CHOICE) { OUT("&asn_PER_type_%s_constr_%d,\n", diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER index c0272c44dc27af5c522be82489151c14f4ec2829..b5a8cf5dd1d616698adb5521e35f92d408dfa016 100644 --- a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER +++ b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER @@ -134,6 +134,12 @@ Alias_constraint(asn_TYPE_descriptor_t *td, const void *sptr, * so here we adjust the DEF accordingly. */ +/*** <<< CTDEFS [Alias] >>> ***/ + +static asn_oer_constraints_t asn_OER_type_Alias_constr_1 GCC_NOTUSED = { + { 2, 1 } /* (0..65535) */, + -1}; + /*** <<< STAT-DEFS [Alias] >>> ***/ static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = { @@ -150,7 +156,7 @@ asn_TYPE_descriptor_t asn_DEF_Alias = { asn_DEF_Alias_tags_1, /* Same as above */ sizeof(asn_DEF_Alias_tags_1) /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */ - 0, /* No OER visible constraints */ + &asn_OER_type_Alias_constr_1, 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER index 807849044ccd22eb44f7d2ef8fa86870b57ead76..88cc9cde338bf041116465ed095ef496bdd0dd29 100644 --- a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER +++ b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER @@ -94,6 +94,7 @@ typedef Short_t Alias_t; /*** <<< FUNC-DECLS [Alias] >>> ***/ +extern asn_per_constraints_t asn_PER_type_Alias_constr_1; extern asn_TYPE_descriptor_t asn_DEF_Alias; asn_struct_free_f Alias_free; asn_struct_print_f Alias_print; @@ -137,6 +138,14 @@ Alias_constraint(asn_TYPE_descriptor_t *td, const void *sptr, * so here we adjust the DEF accordingly. */ +/*** <<< CTDEFS [Alias] >>> ***/ + +asn_per_constraints_t asn_PER_type_Alias_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; + /*** <<< STAT-DEFS [Alias] >>> ***/ static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = { @@ -154,7 +163,7 @@ asn_TYPE_descriptor_t asn_DEF_Alias = { sizeof(asn_DEF_Alias_tags_1) /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */ 0, /* No OER visible constraints */ - 0, /* No PER visible constraints */ + &asn_PER_type_Alias_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER index 924cad8edaccd7aaafdc16dc0a4e4bb4b8931ec4..7020fd2c725f384015ef76a2f382fa067daa0e23 100644 --- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER +++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER @@ -2095,11 +2095,30 @@ VisibleIdentifier_constraint(asn_TYPE_descriptor_t *td, const void *sptr, } } +static int asn_PER_MAP_VisibleIdentifier_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_VisibleIdentifier_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} /* * This type is implemented using Identifier, * so here we adjust the DEF accordingly. */ +/*** <<< CTDEFS [VisibleIdentifier] >>> ***/ + +static asn_per_constraints_t asn_PER_type_VisibleIdentifier_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, 36, 122 } /* (36..122) */, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + asn_PER_MAP_VisibleIdentifier_1_v2c, /* Value to PER code map */ + asn_PER_MAP_VisibleIdentifier_1_c2v /* PER code to value map */ +}; + /*** <<< STAT-DEFS [VisibleIdentifier] >>> ***/ static const ber_tlv_tag_t asn_DEF_VisibleIdentifier_tags_1[] = { @@ -2117,7 +2136,7 @@ asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier = { sizeof(asn_DEF_VisibleIdentifier_tags_1) /sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */ 0, /* No OER visible constraints */ - 0, /* No PER visible constraints */ + &asn_PER_type_VisibleIdentifier_constr_1, 0, 0, /* No members */ 0 /* No specifics */ };