From 1dec58051f7685fac25aac07cacedefec119e630 Mon Sep 17 00:00:00 2001 From: Lev Walkin Date: Fri, 4 Mar 2005 09:02:27 +0000 Subject: unique index for maintaining dependencies --- libasn1fix/asn1fix.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'libasn1fix/asn1fix.c') 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 */ -- cgit v1.2.3