asn1c/libasn1parser/asn1p_expr.h

215 lines
4.7 KiB
C

/*
* A collection of data members of unspecified types.
*/
#ifndef ASN1_PARSER_EXPR_H
#define ASN1_PARSER_EXPR_H
/*
* Meta type of the ASN expression.
*/
typedef enum asn1p_expr_meta {
AMT_INVALID,
AMT_TYPE, /* Type1 ::= INTEGER */
AMT_TYPEREF, /* Type2 ::= Type1 */
AMT_PARAMTYPE, /* Type3{Parameter} ::= SET { ... } */
AMT_VALUE, /* value1 Type1 ::= 1 */
AMT_VALUESET, /* ValueSet Type1 ::= { value1 } */
AMT_OBJECT, /* FUNCTION ::= CLASS {...} */
AMT_OBJECTSET, /* Functions FUNCTION ::= {...} */
AMT_OBJECTFIELD, /* ... */
AMT_EXPR_META_MAX
} asn1p_expr_meta_e;
/*
* ASN type of the expression.
*/
typedef enum asn1p_expr_type {
/*
* Internal types.
*/
A1TC_INVALID, /* Invalid type */
A1TC_REFERENCE, /* Reference to the type defined elsewhere */
A1TC_EXPORTVAR, /* We're exporting this definition */
A1TC_UNIVERVAL, /* A value of an ENUMERATED, INTEGER or BS */
A1TC_BOOLBITPOS, /* A bit position in a BIT STRING */
A1TC_BITVECTOR, /* A plain collection of bits */
A1TC_OPAQUE, /* Opaque data encoded as a bitvector */
A1TC_EXTENSIBLE, /* An extension marker "..." */
A1TC_PARAMETRIZED, /* A parametrized type declaration */
A1TC_VALUESET, /* Value set definition */
A1TC_CLASSDEF, /* Information Object Class */
A1TC_CLASSFIELD, /* Information Object Class field */
A1TC_INSTANCE, /* Instance of Object Class */
A1TC_TYPEID, /* Type identifier */
/*
* ASN.1 Constructed types
*/
#define ASN_CONSTR_MASK 0x10 /* Every constructed type */
ASN_CONSTR_SEQUENCE = ASN_CONSTR_MASK, /* SEQUENCE */
ASN_CONSTR_CHOICE, /* CHOICE */
ASN_CONSTR_SET, /* SET */
ASN_CONSTR_SEQUENCE_OF, /* SEQUENCE OF */
ASN_CONSTR_SET_OF, /* SET OF */
ASN_CONSTR_ANY, /* ANY (deprecated) */
/*
* ASN.1 Basic types
*/
#define ASN_BASIC_MASK 0x20 /* Every basic type */
ASN_BASIC_BOOLEAN = ASN_BASIC_MASK,
ASN_BASIC_NULL,
ASN_BASIC_INTEGER,
ASN_BASIC_REAL,
ASN_BASIC_ENUMERATED,
ASN_BASIC_BIT_STRING,
ASN_BASIC_OCTET_STRING,
ASN_BASIC_OBJECT_IDENTIFIER,
ASN_BASIC_RELATIVE_OID,
ASN_BASIC_EXTERNAL,
ASN_BASIC_EMBEDDED_PDV,
ASN_BASIC_CHARACTER_STRING,
ASN_BASIC_UTCTime,
ASN_BASIC_GeneralizedTime,
/*
* ASN.1 String types
*/
#define ASN_STRING_MASK 0x40 /* Every string type */
ASN_STRING_BMPString = ASN_STRING_MASK,
ASN_STRING_GeneralString,
ASN_STRING_GraphicString,
ASN_STRING_IA5String,
ASN_STRING_ISO646String,
ASN_STRING_NumericString,
ASN_STRING_PrintableString,
ASN_STRING_TeletexString,
ASN_STRING_T61String,
ASN_STRING_UniversalString,
ASN_STRING_UTF8String,
ASN_STRING_VideotexString,
ASN_STRING_VisibleString,
ASN_STRING_ObjectDescriptor,
ASN_EXPR_TYPE_MAX
} asn1p_expr_type_e;
#include "asn1p_expr_str.h"
#include "asn1p_expr2uclass.h"
/*
* A named collection of types.
*/
typedef struct asn1p_expr_s {
/*
* Human readable name.
*/
char *Identifier;
/*
* Meta type of the expression (type, value, value set, etc).
*/
asn1p_expr_meta_e meta_type;
/*
* ASN type of the expression.
*/
asn1p_expr_type_e expr_type;
/*
* Referenced type, if defined elsewhere.
* (If expr_type == A1TC_REFERENCE)
*/
asn1p_ref_t *reference;
/*
* Constraints for the type.
*/
asn1p_constraint_t *constraints;
/*
* A list of parameters for parametrized type declaration
* (AMT_PARAMTYPE).
*/
asn1p_paramlist_t *params;
/*
* The actual value (DefinedValue or inlined value).
*/
asn1p_value_t *value;
/*
* The WITH SYHTAX clause.
*/
asn1p_wsyntx_t *with_syntax;
/*
* A tag.
*/
struct asn1p_type_tag_s {
enum {
TC_NOCLASS,
TC_UNIVERSAL,
TC_APPLICATION,
TC_CONTEXT_SPECIFIC,
TC_PRIVATE,
} tag_class;
enum {
TM_DEFAULT,
TM_IMPLICIT,
TM_EXPLICIT,
} tag_mode;
asn1_integer_t tag_value;
} tag;
/*
* Whether automatic tagging is applicable for subtypes.
*/
int auto_tags_OK;
enum asn1p_expr_marker_e {
EM_NOMARK,
EM_OPTIONAL,
EM_DEFAULT, /* FIXME: store the value somewhere. */
} marker;
int unique; /* UNIQUE */
/*
* Members of the constructed type.
*/
TQ_HEAD(struct asn1p_expr_s) members;
/*
* Next expression in the list.
*/
TQ_ENTRY(struct asn1p_expr_s) next;
/*
* Line number where this structure is defined in the original
* grammar source.
*/
int _lineno;
/*
* Marks are used for various purposes.
* Here are some predefined ones.
*/
enum {
TM_NOMARK,
TM_RECURSION, /* Used to break recursion */
} _mark;
/*
* Opaque data may be attached to this structure,
* probably by compiler.
*/
void *data;
void (*data_free)(void *data);
} asn1p_expr_t;
/*
* Constructor and destructor.
*/
asn1p_expr_t *asn1p_expr_new(int _lineno);
asn1p_expr_t *asn1p_expr_clone(asn1p_expr_t *);
void asn1p_expr_free(asn1p_expr_t *expr);
#endif /* ASN1_PARSER_EXPR_H */