asn1: note IMPLICIT CHOICE promoted to EXPLICIT
Record when a CHOICE field is promoted from IMPLICIT to EXPLICIT and convey this in the ASN.1 compiler's JSON output, so that other tools (e.g. which have a representation isomorphic to the original ASN.1) may use it.
This commit is contained in:

committed by
Nico Williams

parent
5398425cd2
commit
16179383fb
@@ -1432,8 +1432,10 @@ TaggedType : Tag tagenv Type
|
||||
* IMPLICIT tags of CHOICE types are EXPLICIT
|
||||
* instead.
|
||||
*/
|
||||
if (t->type == TChoice)
|
||||
if (t->type == TChoice) {
|
||||
$$->implicit_choice = 1;
|
||||
$$->tag.tagenv = TE_EXPLICIT;
|
||||
}
|
||||
if($3->type == TTag && $2 == TE_IMPLICIT) {
|
||||
$$->subtype = $3->subtype;
|
||||
free($3);
|
||||
|
@@ -1529,6 +1529,9 @@ define_type(int level, const char *name, const char *basename, Type *pt, Type *t
|
||||
fprintf(jsonfile, "\"ttype\":\"TeletexString\",\"ctype\":\"heim_general_string\"");
|
||||
break;
|
||||
case TTag:
|
||||
if (t->implicit_choice) {
|
||||
fprintf(jsonfile, "\"desired_tagenv\":\"IMPLICIT\",");
|
||||
}
|
||||
fprintf(jsonfile, "\"tagclass\":\"%s\",\"tagvalue\":%d,\"tagenv\":\"%s\",\n",
|
||||
tagclassnames[t->tag.tagclass], t->tag.tagvalue,
|
||||
t->tag.tagenv == TE_EXPLICIT ? "EXPLICIT" : "IMPLICIT");
|
||||
|
@@ -200,6 +200,7 @@ struct type {
|
||||
struct range *range;
|
||||
struct constraint_spec *constraint;
|
||||
unsigned long id;
|
||||
unsigned int implicit_choice:1;
|
||||
};
|
||||
|
||||
typedef struct type Type;
|
||||
|
Reference in New Issue
Block a user