diff options
author | Lev Walkin <vlm@lionet.info> | 2005-03-04 09:02:27 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-03-04 09:02:27 +0000 |
commit | 1dec58051f7685fac25aac07cacedefec119e630 (patch) | |
tree | a43da3ec922aaa69d8cbd85cbb8230bb536fef8d /libasn1fix/asn1fix.c | |
parent | b59d94c97057b36617ddbf86b01d2a77316a9d75 (diff) |
unique index for maintaining dependencies
Diffstat (limited to 'libasn1fix/asn1fix.c')
-rw-r--r-- | libasn1fix/asn1fix.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c index 22cd3671..cce1b7e2 100644 --- a/libasn1fix/asn1fix.c +++ b/libasn1fix/asn1fix.c @@ -14,6 +14,7 @@ static int asn1f_fix_constructed(arg_t *arg); /* For SEQUENCE/SET/CHOICE */ static int asn1f_resolve_constraints(arg_t *arg); /* For subtype constraints */ static int asn1f_check_constraints(arg_t *arg); /* For subtype constraints */ static int asn1f_check_duplicate(arg_t *arg); +static int asn1f_apply_unique_index(arg_t *arg); arg_t a1f_replace_me_with_proper_interface_arg; @@ -274,6 +275,13 @@ asn1f_fix_module__phase_2(arg_t *arg) { ret = asn1f_recurse_expr(arg, asn1f_check_constraints); RET2RVAL(ret, rvalue); + /* + * Uniquely tag each inner type. + */ + asn1f_apply_unique_index(0); + ret = asn1f_recurse_expr(arg, asn1f_apply_unique_index); + RET2RVAL(ret, rvalue); + assert(arg->expr == expr); } @@ -429,6 +437,25 @@ asn1f_check_duplicate(arg_t *arg) { return 0; } +static int +asn1f_apply_unique_index(arg_t *arg) { + static int unique_index; + if(!arg) { unique_index = 0; return 0; } + + switch(arg->expr->expr_type) { + case ASN_BASIC_ENUMERATED: + break; + default: + if(arg->expr->expr_type & ASN_CONSTR_MASK) + break; + return 0; + } + + arg->expr->_type_unique_index = ++unique_index; + + return 0; +} + /* * Print everything to stderr */ |