new meaning of life
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@169 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/tests/19-param-OK.asn1 b/tests/19-param-OK.asn1
index 37d7c44..cd132d2 100644
--- a/tests/19-param-OK.asn1
+++ b/tests/19-param-OK.asn1
@@ -25,6 +25,7 @@
Name ::= SEQUENCE OF RelativeDistinguishedName
- RelativeDistinguishedName ::= SET SIZE (1..MAX) OF IA5String
+ RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
+ IA5String (FROM("A".."Z"|"a".."z"|"0-9"|",-."))
END
diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P
index 383cafc..6a8553b 100644
--- a/tests/39-sequence-of-OK.asn1.-P
+++ b/tests/39-sequence-of-OK.asn1.-P
@@ -29,46 +29,54 @@
/*** <<< STAT-DEFS [T] >>> ***/
- static asn1_SET_OF_element_t asn1_DEF_collection_elements[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- (void *)&asn1_DEF_T2 },
- };
- static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
- };
- static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
- sizeof(struct collection),
- offsetof(struct collection, _ber_dec_ctx),
- asn1_DEF_collection_elements
- };
- asn1_TYPE_descriptor_t asn1_DEF_collection = {
- "collection",
- SEQUENCE_OF_constraint,
- SEQUENCE_OF_decode_ber,
- SEQUENCE_OF_encode_der,
- SEQUENCE_OF_print,
- SEQUENCE_OF_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_collection_tags,
- sizeof(asn1_DEF_collection_tags)
- /sizeof(asn1_DEF_collection_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_collection_specs /* Additional specs */
- };
-
-static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
- { offsetof(struct T, int), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- (void *)&asn1_DEF_INTEGER,
- "int"
+static asn1_TYPE_member_t asn1_MBR_collection[] = {
+ { 0, 0,
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_T2,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = ""
},
- { offsetof(struct T, collection), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_collection,
- "collection"
+};
+static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
+ sizeof(struct collection),
+ offsetof(struct collection, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_collection = {
+ "collection",
+ SEQUENCE_OF_constraint,
+ SEQUENCE_OF_decode_ber,
+ SEQUENCE_OF_encode_der,
+ SEQUENCE_OF_print,
+ SEQUENCE_OF_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_collection_tags,
+ sizeof(asn1_DEF_collection_tags)
+ /sizeof(asn1_DEF_collection_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_collection,
+ 1, /* Single element */
+ &asn1_DEF_collection_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_T[] = {
+ { 0, offsetof(struct T, int),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "int"
+ },
+ { 0, offsetof(struct T, collection),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_collection,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "collection"
},
};
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -81,8 +89,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
sizeof(struct T),
offsetof(struct T, _ber_dec_ctx),
- asn1_DEF_T_elements,
- 2, /* Elements count */
asn1_DEF_T_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
@@ -101,6 +107,8 @@
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T,
+ 2, /* Elements count */
&asn1_DEF_T_specs /* Additional specs */
};
@@ -128,18 +136,20 @@
/*** <<< STAT-DEFS [T2] >>> ***/
-static asn1_SEQUENCE_element_t asn1_DEF_T2_elements[] = {
- { offsetof(struct T2, flag), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
- 0,
- (void *)&asn1_DEF_BOOLEAN,
- "flag"
+static asn1_TYPE_member_t asn1_MBR_T2[] = {
+ { 0, offsetof(struct T2, flag),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_BOOLEAN,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "flag"
},
- { offsetof(struct T2, str), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
- 0,
- (void *)&asn1_DEF_UTF8String,
- "str"
+ { 0, offsetof(struct T2, str),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_UTF8String,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "str"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@@ -152,8 +162,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_T2_specs = {
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
- asn1_DEF_T2_elements,
- 2, /* Elements count */
asn1_DEF_T2_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
@@ -172,6 +180,8 @@
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T2,
+ 2, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};
diff --git a/tests/42-real-life-OK.asn1 b/tests/42-real-life-OK.asn1
index 33802c2..8c1d59e 100644
--- a/tests/42-real-life-OK.asn1
+++ b/tests/42-real-life-OK.asn1
@@ -21,7 +21,7 @@
*/
LogLine ::= SEQUENCE {
line-digest IA5String, -- Log line normal form
- varsets SEQUENCE (1..MAX) OF VariablePartSet
+ varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet
}
/*
@@ -30,7 +30,7 @@
* or a range between two samples.
*/
VariablePartSet ::= SEQUENCE {
- vparts SEQUENCE (0..MAX) OF VariablePart, -- {123,321}
+ vparts SEQUENCE SIZE(0..MAX) OF VariablePart, -- {123,321}
resolution ActionItem
}
@@ -39,7 +39,7 @@
*/
VariablePart ::= CHOICE {
-- A set of acceptable values
- vset SET (1..MAX) OF VisibleString,
+ vset SET SIZE(1..MAX) OF VisibleString,
-- A range of acceptable values
vrange SEQUENCE {
from VisibleString,
diff --git a/tests/42-real-life-OK.asn1.-EF b/tests/42-real-life-OK.asn1.-EF
index 7b3a89d..14492fa 100644
--- a/tests/42-real-life-OK.asn1.-EF
+++ b/tests/42-real-life-OK.asn1.-EF
@@ -7,18 +7,18 @@
LogLine ::= SEQUENCE {
line-digest IA5String,
- varsets SEQUENCE OF VariablePartSet,
+ varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet,
...
}
VariablePartSet ::= SEQUENCE {
- vparts SEQUENCE OF VariablePart,
+ vparts SEQUENCE SIZE(0..MAX) OF VariablePart,
resolution ActionItem,
...
}
VariablePart ::= CHOICE {
- vset SET OF VisibleString,
+ vset SET SIZE(1..MAX) OF VisibleString,
vrange SEQUENCE {
from VisibleString,
to VisibleString,
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index ece1127..2bd4579 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -31,48 +31,86 @@
ber_dec_ctx_t _ber_dec_ctx;
} LogLine_t;
+/*** <<< CODE [LogLine] >>> ***/
+
+static int
+memb_varsets_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+ size_t size;
+
+ if(!sptr) {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: value not given", td->name);
+ return -1;
+ }
+
+ { /* Determine the number of elements */
+ const A_SEQUENCE_OF(void) *list;
+ (const void *)list = sptr;
+ size = list->count;
+ }
+
+ if((size >= 1)) {
+ /* Constraint check succeeded */
+ return 1;
+ } else {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: constraint failed", td->name);
+ return -1;
+ }
+}
+
+
/*** <<< STAT-DEFS [LogLine] >>> ***/
- static asn1_SET_OF_element_t asn1_DEF_varsets_elements[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- (void *)&asn1_DEF_VariablePartSet },
- };
- static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
- };
- static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
- sizeof(struct varsets),
- offsetof(struct varsets, _ber_dec_ctx),
- asn1_DEF_varsets_elements
- };
- asn1_TYPE_descriptor_t asn1_DEF_varsets = {
- "varsets",
- SEQUENCE_OF_constraint,
- SEQUENCE_OF_decode_ber,
- SEQUENCE_OF_encode_der,
- SEQUENCE_OF_print,
- SEQUENCE_OF_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_varsets_tags,
- sizeof(asn1_DEF_varsets_tags)
- /sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_varsets_specs /* Additional specs */
- };
-
-static asn1_SEQUENCE_element_t asn1_DEF_LogLine_elements[] = {
- { offsetof(struct LogLine, line_digest), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
- 0,
- (void *)&asn1_DEF_IA5String,
- "line-digest"
+static asn1_TYPE_member_t asn1_MBR_varsets[] = {
+ { 0, 0,
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VariablePartSet,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = ""
},
- { offsetof(struct LogLine, varsets), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_varsets,
- "varsets"
+};
+static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
+ sizeof(struct varsets),
+ offsetof(struct varsets, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_varsets = {
+ "varsets",
+ SEQUENCE_OF_constraint,
+ SEQUENCE_OF_decode_ber,
+ SEQUENCE_OF_encode_der,
+ SEQUENCE_OF_print,
+ SEQUENCE_OF_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_varsets_tags,
+ sizeof(asn1_DEF_varsets_tags)
+ /sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_varsets,
+ 1, /* Single element */
+ &asn1_DEF_varsets_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_LogLine[] = {
+ { 0, offsetof(struct LogLine, line_digest),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_IA5String,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "line-digest"
+ },
+ { 0, offsetof(struct LogLine, varsets),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_varsets,
+ .memb_constraints = memb_varsets_constraint,
+ .name = "varsets"
},
};
static ber_tlv_tag_t asn1_DEF_LogLine_tags[] = {
@@ -85,8 +123,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_LogLine_specs = {
sizeof(struct LogLine),
offsetof(struct LogLine, _ber_dec_ctx),
- asn1_DEF_LogLine_elements,
- 2, /* Elements count */
asn1_DEF_LogLine_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@@ -105,6 +141,8 @@
/sizeof(asn1_DEF_LogLine_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_LogLine,
+ 2, /* Elements count */
&asn1_DEF_LogLine_specs /* Additional specs */
};
@@ -141,48 +179,78 @@
ber_dec_ctx_t _ber_dec_ctx;
} VariablePartSet_t;
+/*** <<< CODE [VariablePartSet] >>> ***/
+
+static int
+memb_vparts_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+
+ if(!sptr) {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: value not given", td->name);
+ return -1;
+ }
+
+
+ if(1 /* No applicable constraints whatsoever */) {
+ /* Nothing is here. See below */
+ }
+
+ return td->check_constraints
+ (td, sptr, app_errlog, app_key);
+}
+
+
/*** <<< STAT-DEFS [VariablePartSet] >>> ***/
- static asn1_SET_OF_element_t asn1_DEF_vparts_elements[] = {
- { -1 /* Ambiguous tag (CHOICE?) */,
- (void *)&asn1_DEF_VariablePart },
- };
- static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
- };
- static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
- sizeof(struct vparts),
- offsetof(struct vparts, _ber_dec_ctx),
- asn1_DEF_vparts_elements
- };
- asn1_TYPE_descriptor_t asn1_DEF_vparts = {
- "vparts",
- SEQUENCE_OF_constraint,
- SEQUENCE_OF_decode_ber,
- SEQUENCE_OF_encode_der,
- SEQUENCE_OF_print,
- SEQUENCE_OF_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_vparts_tags,
- sizeof(asn1_DEF_vparts_tags)
- /sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_vparts_specs /* Additional specs */
- };
-
-static asn1_SEQUENCE_element_t asn1_DEF_VariablePartSet_elements[] = {
- { offsetof(struct VariablePartSet, vparts), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_vparts,
- "vparts"
+static asn1_TYPE_member_t asn1_MBR_vparts[] = {
+ { 0, 0,
+ .tag = -1 /* Ambiguous tag (CHOICE?) */,
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VariablePart,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = ""
},
- { offsetof(struct VariablePartSet, resolution), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_ActionItem,
- "resolution"
+};
+static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
+ sizeof(struct vparts),
+ offsetof(struct vparts, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_vparts = {
+ "vparts",
+ SEQUENCE_OF_constraint,
+ SEQUENCE_OF_decode_ber,
+ SEQUENCE_OF_encode_der,
+ SEQUENCE_OF_print,
+ SEQUENCE_OF_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_vparts_tags,
+ sizeof(asn1_DEF_vparts_tags)
+ /sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_vparts,
+ 1, /* Single element */
+ &asn1_DEF_vparts_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_VariablePartSet[] = {
+ { 0, offsetof(struct VariablePartSet, vparts),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_vparts,
+ .memb_constraints = memb_vparts_constraint,
+ .name = "vparts"
+ },
+ { 0, offsetof(struct VariablePartSet, resolution),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_ActionItem,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "resolution"
},
};
static ber_tlv_tag_t asn1_DEF_VariablePartSet_tags[] = {
@@ -195,8 +263,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_VariablePartSet_specs = {
sizeof(struct VariablePartSet),
offsetof(struct VariablePartSet, _ber_dec_ctx),
- asn1_DEF_VariablePartSet_elements,
- 2, /* Elements count */
asn1_DEF_VariablePartSet_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@@ -215,6 +281,8 @@
/sizeof(asn1_DEF_VariablePartSet_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_VariablePartSet,
+ 2, /* Elements count */
&asn1_DEF_VariablePartSet_specs /* Additional specs */
};
@@ -270,95 +338,135 @@
ber_dec_ctx_t _ber_dec_ctx;
} VariablePart_t;
+/*** <<< CODE [VariablePart] >>> ***/
+
+static int
+memb_vset_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+ size_t size;
+
+ if(!sptr) {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: value not given", td->name);
+ return -1;
+ }
+
+ { /* Determine the number of elements */
+ const A_SET_OF(void) *list;
+ (const void *)list = sptr;
+ size = list->count;
+ }
+
+ if((size >= 1)) {
+ /* Constraint check succeeded */
+ return 1;
+ } else {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: constraint failed", td->name);
+ return -1;
+ }
+}
+
+
/*** <<< STAT-DEFS [VariablePart] >>> ***/
- static asn1_SET_OF_element_t asn1_DEF_vset_elements[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
- (void *)&asn1_DEF_VisibleString },
- };
- static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
- };
- static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
- sizeof(struct vset),
- offsetof(struct vset, _ber_dec_ctx),
- asn1_DEF_vset_elements
- };
- asn1_TYPE_descriptor_t asn1_DEF_vset = {
- "vset",
- SET_OF_constraint,
- SET_OF_decode_ber,
- SET_OF_encode_der,
- SET_OF_print,
- SET_OF_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_vset_tags,
- sizeof(asn1_DEF_vset_tags)
- /sizeof(asn1_DEF_vset_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_vset_specs /* Additional specs */
- };
-
- static asn1_SEQUENCE_element_t asn1_DEF_vrange_elements[] = {
- { offsetof(struct vrange, from), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
- 0,
- (void *)&asn1_DEF_VisibleString,
- "from"
- },
- { offsetof(struct vrange, to), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
- 0,
- (void *)&asn1_DEF_VisibleString,
- "to"
- },
- };
- static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
- };
- static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
- { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
- };
- static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
- sizeof(struct vrange),
- offsetof(struct vrange, _ber_dec_ctx),
- asn1_DEF_vrange_elements,
- 2, /* Elements count */
- asn1_DEF_vrange_tag2el,
- 2, /* Count of tags in the map */
- 1, /* Start extensions */
- 3 /* Stop extensions */
- };
- asn1_TYPE_descriptor_t asn1_DEF_vrange = {
- "vrange",
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_print,
- SEQUENCE_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_vrange_tags,
- sizeof(asn1_DEF_vrange_tags)
- /sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_vrange_specs /* Additional specs */
- };
-
-static asn1_CHOICE_element_t asn1_DEF_VariablePart_elements[] = {
- { offsetof(struct VariablePart, choice.vset), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
- 0,
- (void *)&asn1_DEF_vset,
- "vset"
+static asn1_TYPE_member_t asn1_MBR_vset[] = {
+ { 0, 0,
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VisibleString,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = ""
},
- { offsetof(struct VariablePart, choice.vrange), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_vrange,
- "vrange"
+};
+static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
+ sizeof(struct vset),
+ offsetof(struct vset, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_vset = {
+ "vset",
+ SET_OF_constraint,
+ SET_OF_decode_ber,
+ SET_OF_encode_der,
+ SET_OF_print,
+ SET_OF_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_vset_tags,
+ sizeof(asn1_DEF_vset_tags)
+ /sizeof(asn1_DEF_vset_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_vset,
+ 1, /* Single element */
+ &asn1_DEF_vset_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_vrange[] = {
+ { 0, offsetof(struct vrange, from),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VisibleString,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "from"
+ },
+ { 0, offsetof(struct vrange, to),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VisibleString,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "to"
+ },
+};
+static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
+ { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
+ sizeof(struct vrange),
+ offsetof(struct vrange, _ber_dec_ctx),
+ asn1_DEF_vrange_tag2el,
+ 2, /* Count of tags in the map */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_vrange = {
+ "vrange",
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_print,
+ SEQUENCE_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_vrange_tags,
+ sizeof(asn1_DEF_vrange_tags)
+ /sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_vrange,
+ 2, /* Elements count */
+ &asn1_DEF_vrange_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_VariablePart[] = {
+ { 0, offsetof(struct VariablePart, choice.vset),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_vset,
+ .memb_constraints = memb_vset_constraint,
+ .name = "vset"
+ },
+ { 0, offsetof(struct VariablePart, choice.vrange),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_vrange,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "vrange"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_VariablePart_tag2el[] = {
@@ -370,8 +478,6 @@
offsetof(struct VariablePart, _ber_dec_ctx),
offsetof(struct VariablePart, present),
sizeof(((struct VariablePart *)0)->present),
- asn1_DEF_VariablePart_elements,
- 2, /* Elements count */
asn1_DEF_VariablePart_tag2el,
2, /* Count of tags in the map */
1 /* Whether extensible */
@@ -388,6 +494,8 @@
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_VariablePart,
+ 2, /* Elements count */
&asn1_DEF_VariablePart_specs /* Additional specs */
};
@@ -403,14 +511,14 @@
/*** <<< DEPS [ActionItem] >>> ***/
- typedef enum accept_as {
- accept_as_unknown = 0,
- accept_as_safe = 1,
- accept_as_unsafe = 2,
- /*
- * Enumeration is extensible
- */
- } accept_as_e;
+typedef enum accept_as {
+ accept_as_unknown = 0,
+ accept_as_safe = 1,
+ accept_as_unsafe = 2,
+ /*
+ * Enumeration is extensible
+ */
+} accept_as_e;
extern asn1_TYPE_descriptor_t asn1_DEF_ActionItem;
/*** <<< TYPE-DECLS [ActionItem] >>> ***/
@@ -445,93 +553,103 @@
/*** <<< STAT-DEFS [ActionItem] >>> ***/
- static asn1_SET_OF_element_t asn1_DEF_email_elements[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
- (void *)&asn1_DEF_VisibleString },
- };
- static ber_tlv_tag_t asn1_DEF_email_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
- };
- static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
- sizeof(struct email),
- offsetof(struct email, _ber_dec_ctx),
- asn1_DEF_email_elements
- };
- asn1_TYPE_descriptor_t asn1_DEF_email = {
- "email",
- SET_OF_constraint,
- SET_OF_decode_ber,
- SET_OF_encode_der,
- SET_OF_print,
- SET_OF_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_email_tags,
- sizeof(asn1_DEF_email_tags)
- /sizeof(asn1_DEF_email_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_email_specs /* Additional specs */
- };
-
- static asn1_SEQUENCE_element_t asn1_DEF_notify_elements[] = {
- { offsetof(struct notify, critical), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
- 0,
- (void *)&asn1_DEF_BOOLEAN,
- "critical"
- },
- { offsetof(struct notify, email), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
- 0,
- (void *)&asn1_DEF_email,
- "email"
- },
- };
- static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
- };
- static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
- { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
- };
- static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
- sizeof(struct notify),
- offsetof(struct notify, _ber_dec_ctx),
- asn1_DEF_notify_elements,
- 2, /* Elements count */
- asn1_DEF_notify_tag2el,
- 2, /* Count of tags in the map */
- 1, /* Start extensions */
- 3 /* Stop extensions */
- };
- asn1_TYPE_descriptor_t asn1_DEF_notify = {
- "notify",
- SEQUENCE_constraint,
- SEQUENCE_decode_ber,
- SEQUENCE_encode_der,
- SEQUENCE_print,
- SEQUENCE_free,
- 0, /* Use generic outmost tag fetcher */
- asn1_DEF_notify_tags,
- sizeof(asn1_DEF_notify_tags)
- /sizeof(asn1_DEF_notify_tags[0]), /* 1 */
- 1, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_notify_specs /* Additional specs */
- };
-
-static asn1_SEQUENCE_element_t asn1_DEF_ActionItem_elements[] = {
- { offsetof(struct ActionItem, accept_as), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
- 0,
- (void *)&asn1_DEF_ENUMERATED,
- "accept-as"
+static asn1_TYPE_member_t asn1_MBR_email[] = {
+ { 0, 0,
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_VisibleString,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = ""
},
- { offsetof(struct ActionItem, notify), 1,
- (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
- 0,
- (void *)&asn1_DEF_notify,
- "notify"
+};
+static ber_tlv_tag_t asn1_DEF_email_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
+ sizeof(struct email),
+ offsetof(struct email, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_email = {
+ "email",
+ SET_OF_constraint,
+ SET_OF_decode_ber,
+ SET_OF_encode_der,
+ SET_OF_print,
+ SET_OF_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_email_tags,
+ sizeof(asn1_DEF_email_tags)
+ /sizeof(asn1_DEF_email_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_email,
+ 1, /* Single element */
+ &asn1_DEF_email_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_notify[] = {
+ { 0, offsetof(struct notify, critical),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_BOOLEAN,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "critical"
+ },
+ { 0, offsetof(struct notify, email),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_email,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "email"
+ },
+};
+static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
+ { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
+ sizeof(struct notify),
+ offsetof(struct notify, _ber_dec_ctx),
+ asn1_DEF_notify_tag2el,
+ 2, /* Count of tags in the map */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_notify = {
+ "notify",
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_print,
+ SEQUENCE_free,
+ 0, /* Use generic outmost tag fetcher */
+ asn1_DEF_notify_tags,
+ sizeof(asn1_DEF_notify_tags)
+ /sizeof(asn1_DEF_notify_tags[0]), /* 1 */
+ 1, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_notify,
+ 2, /* Elements count */
+ &asn1_DEF_notify_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_ActionItem[] = {
+ { 0, offsetof(struct ActionItem, accept_as),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_ENUMERATED,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "accept-as"
+ },
+ { 1, offsetof(struct ActionItem, notify),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_notify,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "notify"
},
};
static ber_tlv_tag_t asn1_DEF_ActionItem_tags[] = {
@@ -544,8 +662,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_ActionItem_specs = {
sizeof(struct ActionItem),
offsetof(struct ActionItem, _ber_dec_ctx),
- asn1_DEF_ActionItem_elements,
- 2, /* Elements count */
asn1_DEF_ActionItem_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@@ -564,6 +680,8 @@
/sizeof(asn1_DEF_ActionItem_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_ActionItem,
+ 2, /* Elements count */
&asn1_DEF_ActionItem_specs /* Additional specs */
};
diff --git a/tests/44-choice-in-sequence-OK.asn1.-P b/tests/44-choice-in-sequence-OK.asn1.-P
index 0c65871..3a12ecf 100644
--- a/tests/44-choice-in-sequence-OK.asn1.-P
+++ b/tests/44-choice-in-sequence-OK.asn1.-P
@@ -7,23 +7,23 @@
/*** <<< DEPS [T] >>> ***/
- typedef enum b_PR {
- b_PR_NOTHING, /* No components present */
- b_PR_c,
- b_PR_d,
- b_PR_e,
- b_PR_h,
- } b_PR;
- typedef enum e_PR {
- e_PR_NOTHING, /* No components present */
- e_PR_f,
- e_PR_g,
- } e_PR;
- typedef enum h_PR {
- h_PR_NOTHING, /* No components present */
- h_PR_i,
- h_PR_j,
- } h_PR;
+typedef enum b_PR {
+ b_PR_NOTHING, /* No components present */
+ b_PR_c,
+ b_PR_d,
+ b_PR_e,
+ b_PR_h,
+} b_PR;
+typedef enum e_PR {
+ e_PR_NOTHING, /* No components present */
+ e_PR_f,
+ e_PR_g,
+} e_PR;
+typedef enum h_PR {
+ h_PR_NOTHING, /* No components present */
+ h_PR_i,
+ h_PR_j,
+} h_PR;
extern asn1_TYPE_descriptor_t asn1_DEF_T;
/*** <<< TYPE-DECLS [T] >>> ***/
@@ -68,165 +68,175 @@
/*** <<< STAT-DEFS [T] >>> ***/
- static asn1_CHOICE_element_t asn1_DEF_e_elements[] = {
- { offsetof(struct e, choice.f), 0,
- (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "f"
- },
- { offsetof(struct e, choice.g), 0,
- (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "g"
- },
- };
- static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
- { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
- { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
- };
- static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
- sizeof(struct e),
- offsetof(struct e, _ber_dec_ctx),
- offsetof(struct e, present),
- sizeof(((struct e *)0)->present),
- asn1_DEF_e_elements,
- 2, /* Elements count */
- asn1_DEF_e_tag2el,
- 2, /* Count of tags in the map */
- 0 /* Whether extensible */
- };
- asn1_TYPE_descriptor_t asn1_DEF_e = {
- "e",
- CHOICE_constraint,
- CHOICE_decode_ber,
- CHOICE_encode_der,
- CHOICE_print,
- CHOICE_free,
- CHOICE_outmost_tag,
- 0, /* No explicit tags (pointer) */
- 0, /* No explicit tags (count) */
- 0, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_e_specs /* Additional specs */
- };
-
- static asn1_CHOICE_element_t asn1_DEF_h_elements[] = {
- { offsetof(struct h, choice.i), 0,
- (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "i"
- },
- { offsetof(struct h, choice.j), 0,
- (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "j"
- },
- };
- static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
- { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
- { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
- };
- static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
- sizeof(struct h),
- offsetof(struct h, _ber_dec_ctx),
- offsetof(struct h, present),
- sizeof(((struct h *)0)->present),
- asn1_DEF_h_elements,
- 2, /* Elements count */
- asn1_DEF_h_tag2el,
- 2, /* Count of tags in the map */
- 0 /* Whether extensible */
- };
- asn1_TYPE_descriptor_t asn1_DEF_h = {
- "h",
- CHOICE_constraint,
- CHOICE_decode_ber,
- CHOICE_encode_der,
- CHOICE_print,
- CHOICE_free,
- CHOICE_outmost_tag,
- 0, /* No explicit tags (pointer) */
- 0, /* No explicit tags (count) */
- 0, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_h_specs /* Additional specs */
- };
-
- static asn1_CHOICE_element_t asn1_DEF_b_elements[] = {
- { offsetof(struct b, choice.c), 0,
- (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "c"
- },
- { offsetof(struct b, choice.d), 0,
- (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "d"
- },
- { offsetof(struct b, choice.e), 0,
- -1 /* Ambiguous tag (CHOICE?) */,
- 0,
- (void *)&asn1_DEF_e,
- "e"
- },
- { offsetof(struct b, choice.h), 0,
- (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
- +1, /* EXPLICIT tag at current level */
- (void *)&asn1_DEF_h,
- "h"
- },
- };
- static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
- { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
- { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
- { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
- { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
- { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
- };
- static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
- sizeof(struct b),
- offsetof(struct b, _ber_dec_ctx),
- offsetof(struct b, present),
- sizeof(((struct b *)0)->present),
- asn1_DEF_b_elements,
- 4, /* Elements count */
- asn1_DEF_b_tag2el,
- 5, /* Count of tags in the map */
- 0 /* Whether extensible */
- };
- asn1_TYPE_descriptor_t asn1_DEF_b = {
- "b",
- CHOICE_constraint,
- CHOICE_decode_ber,
- CHOICE_encode_der,
- CHOICE_print,
- CHOICE_free,
- CHOICE_outmost_tag,
- 0, /* No explicit tags (pointer) */
- 0, /* No explicit tags (count) */
- 0, /* Tags to skip */
- 1, /* Whether CONSTRUCTED */
- &asn1_DEF_b_specs /* Additional specs */
- };
-
-static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
- { offsetof(struct T, a), 0,
- (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_NULL,
- "a"
+static asn1_TYPE_member_t asn1_MBR_e[] = {
+ { 0, offsetof(struct e, choice.f),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "f"
},
- { offsetof(struct T, b), 0,
- -1 /* Ambiguous tag (CHOICE?) */,
- 0,
- (void *)&asn1_DEF_b,
- "b"
+ { 0, offsetof(struct e, choice.g),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "g"
+ },
+};
+static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
+ { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
+ { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
+ sizeof(struct e),
+ offsetof(struct e, _ber_dec_ctx),
+ offsetof(struct e, present),
+ sizeof(((struct e *)0)->present),
+ asn1_DEF_e_tag2el,
+ 2, /* Count of tags in the map */
+ 0 /* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_e = {
+ "e",
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ CHOICE_print,
+ CHOICE_free,
+ CHOICE_outmost_tag,
+ 0, /* No explicit tags (pointer) */
+ 0, /* No explicit tags (count) */
+ 0, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_e,
+ 2, /* Elements count */
+ &asn1_DEF_e_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_h[] = {
+ { 0, offsetof(struct h, choice.i),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
+ },
+ { 0, offsetof(struct h, choice.j),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "j"
+ },
+};
+static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
+ { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
+ { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
+ sizeof(struct h),
+ offsetof(struct h, _ber_dec_ctx),
+ offsetof(struct h, present),
+ sizeof(((struct h *)0)->present),
+ asn1_DEF_h_tag2el,
+ 2, /* Count of tags in the map */
+ 0 /* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_h = {
+ "h",
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ CHOICE_print,
+ CHOICE_free,
+ CHOICE_outmost_tag,
+ 0, /* No explicit tags (pointer) */
+ 0, /* No explicit tags (count) */
+ 0, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_h,
+ 2, /* Elements count */
+ &asn1_DEF_h_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_b[] = {
+ { 0, offsetof(struct b, choice.c),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "c"
+ },
+ { 0, offsetof(struct b, choice.d),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "d"
+ },
+ { 0, offsetof(struct b, choice.e),
+ .tag = -1 /* Ambiguous tag (CHOICE?) */,
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_e,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "e"
+ },
+ { 0, offsetof(struct b, choice.h),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
+ .tag_mode = +1, /* EXPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_h,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "h"
+ },
+};
+static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
+ { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
+ { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
+ { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
+ { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
+ { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
+ sizeof(struct b),
+ offsetof(struct b, _ber_dec_ctx),
+ offsetof(struct b, present),
+ sizeof(((struct b *)0)->present),
+ asn1_DEF_b_tag2el,
+ 5, /* Count of tags in the map */
+ 0 /* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_b = {
+ "b",
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ CHOICE_print,
+ CHOICE_free,
+ CHOICE_outmost_tag,
+ 0, /* No explicit tags (pointer) */
+ 0, /* No explicit tags (count) */
+ 0, /* Tags to skip */
+ 1, /* Whether CONSTRUCTED */
+ asn1_MBR_b,
+ 4, /* Elements count */
+ &asn1_DEF_b_specs /* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_T[] = {
+ { 0, offsetof(struct T, a),
+ .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_NULL,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "a"
+ },
+ { 0, offsetof(struct T, b),
+ .tag = -1 /* Ambiguous tag (CHOICE?) */,
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_b,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "b"
},
};
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -243,8 +253,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
sizeof(struct T),
offsetof(struct T, _ber_dec_ctx),
- asn1_DEF_T_elements,
- 2, /* Elements count */
asn1_DEF_T_tag2el,
6, /* Count of tags in the map */
-1, /* Start extensions */
@@ -263,6 +271,8 @@
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T,
+ 2, /* Elements count */
&asn1_DEF_T_specs /* Additional specs */
};
diff --git a/tests/46-redefine-OK.asn1.-PR b/tests/46-redefine-OK.asn1.-PR
index 639ded0..ee7aceb 100644
--- a/tests/46-redefine-OK.asn1.-PR
+++ b/tests/46-redefine-OK.asn1.-PR
@@ -18,6 +18,65 @@
asn_struct_print_f PrimitiveType_print;
asn_struct_free_f PrimitiveType_free;
+/*** <<< CODE [PrimitiveType] >>> ***/
+
+int
+PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+
+ /* Make the underlying type checker permanent */
+ td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
+ return td->check_constraints
+ (td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so adjust the DEF appropriately.
+ */
+static void
+PrimitiveType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
+ td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
+ td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
+ td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
+ td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
+ td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
+ td->elements = asn1_DEF_OCTET_STRING.elements;
+ td->elements_count = asn1_DEF_OCTET_STRING.elements_count;
+ td->specifics = asn1_DEF_OCTET_STRING.specifics;
+}
+
+ber_dec_rval_t
+PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
+ void **structure, void *bufptr, size_t size, int tag_mode) {
+ PrimitiveType_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(td, structure,
+ bufptr, size, tag_mode);
+}
+
+der_enc_rval_t
+PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ PrimitiveType_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+int
+PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ PrimitiveType_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+void
+PrimitiveType_free(asn1_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ PrimitiveType_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+
/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
@@ -36,63 +95,10 @@
/sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
+ 0, 0, /* No members */
0 /* No specifics */
};
-int
-PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
- asn_app_consume_bytes_f *app_errlog, void *app_key) {
-
- /* Make the underlying type checker permanent */
- td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
- return td->check_constraints
- (td, sptr, app_errlog, app_key);
-}
-
-/*
- * This type is implemented using OCTET_STRING,
- * so adjust the DEF appropriately.
- */
-static void
-inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
- td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
- td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
- td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
- td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
- td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
- td->specifics = asn1_DEF_OCTET_STRING.specifics;
-}
-
-ber_dec_rval_t
-PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
- void **structure, void *bufptr, size_t size, int tag_mode) {
- inherit_TYPE_descriptor(td);
- return td->ber_decoder(td, structure,
- bufptr, size, tag_mode);
-}
-
-der_enc_rval_t
-PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-int
-PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-void
-PrimitiveType_free(asn1_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
/*** <<< INCLUDES [ConstructedType] >>> ***/
@@ -115,12 +121,13 @@
/*** <<< STAT-DEFS [ConstructedType] >>> ***/
-static asn1_SEQUENCE_element_t asn1_DEF_ConstructedType_elements[] = {
- { offsetof(struct ConstructedType, field), 0,
- (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
- -1, /* IMPLICIT tag at current level */
- (void *)&asn1_DEF_PrimitiveType,
- "field"
+static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
+ { 0, offsetof(struct ConstructedType, field),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn1_DEF_PrimitiveType,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "field"
},
};
static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
@@ -132,8 +139,6 @@
static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
sizeof(struct ConstructedType),
offsetof(struct ConstructedType, _ber_dec_ctx),
- asn1_DEF_ConstructedType_elements,
- 1, /* Elements count */
asn1_DEF_ConstructedType_tag2el,
1, /* Count of tags in the map */
-1, /* Start extensions */
@@ -152,6 +157,8 @@
/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_ConstructedType,
+ 1, /* Elements count */
&asn1_DEF_ConstructedType_specs /* Additional specs */
};
@@ -175,6 +182,65 @@
asn_struct_print_f T_print;
asn_struct_free_f T_free;
+/*** <<< CODE [T] >>> ***/
+
+int
+T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+
+ /* Make the underlying type checker permanent */
+ td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
+ return td->check_constraints
+ (td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using ConstructedType,
+ * so adjust the DEF appropriately.
+ */
+static void
+T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
+ td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
+ td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
+ td->free_struct = asn1_DEF_ConstructedType.free_struct;
+ td->print_struct = asn1_DEF_ConstructedType.print_struct;
+ td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
+ td->elements = asn1_DEF_ConstructedType.elements;
+ td->elements_count = asn1_DEF_ConstructedType.elements_count;
+ td->specifics = asn1_DEF_ConstructedType.specifics;
+}
+
+ber_dec_rval_t
+T_decode_ber(asn1_TYPE_descriptor_t *td,
+ void **structure, void *bufptr, size_t size, int tag_mode) {
+ T_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(td, structure,
+ bufptr, size, tag_mode);
+}
+
+der_enc_rval_t
+T_encode_der(asn1_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ T_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+int
+T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ T_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+void
+T_free(asn1_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ T_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+
/*** <<< STAT-DEFS [T] >>> ***/
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -193,60 +259,7 @@
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
+ 0, 0, /* Defined elsewhere */
0 /* No specifics */
};
-int
-T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
- asn_app_consume_bytes_f *app_errlog, void *app_key) {
-
- /* Make the underlying type checker permanent */
- td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
- return td->check_constraints
- (td, sptr, app_errlog, app_key);
-}
-
-/*
- * This type is implemented using ConstructedType,
- * so adjust the DEF appropriately.
- */
-static void
-inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
- td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
- td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
- td->free_struct = asn1_DEF_ConstructedType.free_struct;
- td->print_struct = asn1_DEF_ConstructedType.print_struct;
- td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
- td->specifics = asn1_DEF_ConstructedType.specifics;
-}
-
-ber_dec_rval_t
-T_decode_ber(asn1_TYPE_descriptor_t *td,
- void **structure, void *bufptr, size_t size, int tag_mode) {
- inherit_TYPE_descriptor(td);
- return td->ber_decoder(td, structure,
- bufptr, size, tag_mode);
-}
-
-der_enc_rval_t
-T_encode_der(asn1_TYPE_descriptor_t *td,
- void *structure, int tag_mode, ber_tlv_tag_t tag,
- asn_app_consume_bytes_f *cb, void *app_key) {
- inherit_TYPE_descriptor(td);
- return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-int
-T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
- int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
- inherit_TYPE_descriptor(td);
- return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-void
-T_free(asn1_TYPE_descriptor_t *td,
- void *struct_ptr, int contents_only) {
- inherit_TYPE_descriptor(td);
- td->free_struct(td, struct_ptr, contents_only);
-}
-
diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index e945ccf..9991cf5 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -35,12 +35,13 @@
/*** <<< STAT-DEFS [T1] >>> ***/
-static asn1_SET_element_t asn1_DEF_T1_elements[] = {
- { offsetof(struct T1, i), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- (void *)&asn1_DEF_INTEGER,
- "i"
+static asn1_TYPE_member_t asn1_MBR_T1[] = {
+ { 0, offsetof(struct T1, i),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T1_tags[] = {
@@ -56,8 +57,6 @@
sizeof(struct T1),
offsetof(struct T1, _ber_dec_ctx),
offsetof(struct T1, _presence_map),
- asn1_DEF_T1_elements,
- 1, /* Elements count */
asn1_DEF_T1_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
@@ -76,6 +75,8 @@
/sizeof(asn1_DEF_T1_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T1,
+ 1, /* Elements count */
&asn1_DEF_T1_specs /* Additional specs */
};
@@ -116,12 +117,13 @@
/*** <<< STAT-DEFS [T2] >>> ***/
-static asn1_SET_element_t asn1_DEF_T2_elements[] = {
- { offsetof(struct T2, i), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- (void *)&asn1_DEF_INTEGER,
- "i"
+static asn1_TYPE_member_t asn1_MBR_T2[] = {
+ { 0, offsetof(struct T2, i),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@@ -137,8 +139,6 @@
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
offsetof(struct T2, _presence_map),
- asn1_DEF_T2_elements,
- 1, /* Elements count */
asn1_DEF_T2_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
@@ -157,6 +157,8 @@
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T2,
+ 1, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};
@@ -194,12 +196,13 @@
/*** <<< STAT-DEFS [T3] >>> ***/
-static asn1_CHOICE_element_t asn1_DEF_T3_elements[] = {
- { offsetof(struct T3, choice.i), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- (void *)&asn1_DEF_INTEGER,
- "i"
+static asn1_TYPE_member_t asn1_MBR_T3[] = {
+ { 0, offsetof(struct T3, choice.i),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T3_tag2el[] = {
@@ -210,8 +213,6 @@
offsetof(struct T3, _ber_dec_ctx),
offsetof(struct T3, present),
sizeof(((struct T3 *)0)->present),
- asn1_DEF_T3_elements,
- 1, /* Elements count */
asn1_DEF_T3_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
@@ -228,6 +229,8 @@
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T3,
+ 1, /* Elements count */
&asn1_DEF_T3_specs /* Additional specs */
};
@@ -265,12 +268,13 @@
/*** <<< STAT-DEFS [T4] >>> ***/
-static asn1_CHOICE_element_t asn1_DEF_T4_elements[] = {
- { offsetof(struct T4, choice.i), 0,
- (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
- 0,
- (void *)&asn1_DEF_INTEGER,
- "i"
+static asn1_TYPE_member_t asn1_MBR_T4[] = {
+ { 0, offsetof(struct T4, choice.i),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn1_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T4_tag2el[] = {
@@ -281,8 +285,6 @@
offsetof(struct T4, _ber_dec_ctx),
offsetof(struct T4, present),
sizeof(((struct T4 *)0)->present),
- asn1_DEF_T4_elements,
- 1, /* Elements count */
asn1_DEF_T4_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
@@ -299,6 +301,8 @@
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
+ asn1_MBR_T4,
+ 1, /* Elements count */
&asn1_DEF_T4_specs /* Additional specs */
};
diff --git a/tests/50-constraint-OK.asn1 b/tests/50-constraint-OK.asn1
index 27af95d..0ae7689 100644
--- a/tests/50-constraint-OK.asn1
+++ b/tests/50-constraint-OK.asn1
@@ -39,4 +39,8 @@
SIZE-and-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD"))
Neither-SIZE-nor-FROM ::= PER-Visible (SIZE(1..4) | FROM("ABCD",...))
+ Utf8-3 ::= Utf8-2 (FROM("A".."Z"|"a".."z"))
+ Utf8-2 ::= Utf8-1 (SIZE(1..2))
+ Utf8-1 ::= UTF8String
+
END
diff --git a/tests/50-constraint-OK.asn1.-EFprint-constraints b/tests/50-constraint-OK.asn1.-EFprint-constraints
index 694f776..11e8d3d 100644
--- a/tests/50-constraint-OK.asn1.-EFprint-constraints
+++ b/tests/50-constraint-OK.asn1.-EFprint-constraints
Binary files differ