aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2004-09-10 08:21:27 +0000
committerLev Walkin <vlm@lionet.info>2004-09-10 08:21:27 +0000
commit6e8da2ba9c0b61d7c59ec695fbaf7bf63e35271d (patch)
tree6c5272e53a5e017a5acf93b709a80f569c6a7c38
parent8a99bf716998943b5d376adf35feb830366b7ac9 (diff)
different marker semantics
-rw-r--r--libasn1parser/asn1p_expr.h15
-rw-r--r--libasn1print/asn1print.c9
2 files changed, 12 insertions, 12 deletions
diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h
index 461f42da..2c284ff0 100644
--- a/libasn1parser/asn1p_expr.h
+++ b/libasn1parser/asn1p_expr.h
@@ -173,19 +173,20 @@ typedef struct asn1p_expr_s {
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. */
+ EM_INDIRECT = 0x01, /* 0001: Represent as pointer */
+ EM_OPTIONAL = 0x03, /* 0011: Optional member */
+ EM_DEFAULT = 0x07, /* 0111: FIXME: store the value */
} marker;
int unique; /* UNIQUE */
/*
+ * Whether automatic tagging is applicable for subtypes.
+ */
+ int auto_tags_OK;
+
+ /*
* Members of the constructed type.
*/
TQ_HEAD(struct asn1p_expr_s) members;
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index e8281df6..41b2b719 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -533,11 +533,10 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
* Print the expression as it were a stand-alone type.
*/
asn1print_expr(asn, mod, se, flags, level + 4);
- switch(se->marker) {
- case EM_NOMARK: break;
- case EM_OPTIONAL: printf(" OPTIONAL"); break;
- case EM_DEFAULT: printf(" DEFAULT <?>"); break;
- }
+ if(se->marker & EM_DEFAULT)
+ printf(" DEFAULT <?>");
+ else if(se->marker & EM_OPTIONAL)
+ printf(" OPTIONAL");
if(TQ_NEXT(se, next)) {
printf(",");
INDENT("\n");