vlm | fa67ddc | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 1 | #include "asn1fix_internal.h" |
| 2 | |
| 3 | /* |
| 4 | * Dereference DefinedValues: |
| 5 | */ |
| 6 | int |
| 7 | asn1f_fix_dereference_values(arg_t *arg) { |
| 8 | asn1p_expr_t *expr = arg->expr; |
| 9 | int r_value = 0; |
| 10 | |
vlm | 44a9b52 | 2004-09-15 11:46:23 +0000 | [diff] [blame] | 11 | if(expr->value && expr->meta_type == AMT_VALUE) { |
vlm | fa67ddc | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 12 | if(asn1f_value_resolve(arg, expr)) { |
| 13 | /* This function will emit messages */ |
| 14 | r_value = -1; |
| 15 | } |
vlm | 44a9b52 | 2004-09-15 11:46:23 +0000 | [diff] [blame] | 16 | } |
vlm | fa67ddc | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 17 | |
vlm | 44a9b52 | 2004-09-15 11:46:23 +0000 | [diff] [blame] | 18 | if(expr->marker.default_value) { |
| 19 | arg_t tmparg = *arg; |
| 20 | asn1p_expr_t tmpexpr = *expr; |
| 21 | |
| 22 | switch(expr->marker.default_value->type) { |
| 23 | default: |
| 24 | return r_value; |
| 25 | case ATV_REFERENCED: |
| 26 | break; |
vlm | fa67ddc | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 27 | } |
vlm | 44a9b52 | 2004-09-15 11:46:23 +0000 | [diff] [blame] | 28 | |
| 29 | tmparg.expr = &tmpexpr; |
| 30 | tmpexpr.meta_type = AMT_VALUE; |
| 31 | tmpexpr.marker.default_value = 0; |
| 32 | tmpexpr.value = expr->marker.default_value; |
| 33 | if(asn1f_value_resolve(&tmparg, &tmpexpr)) |
| 34 | r_value = -1; |
| 35 | expr->marker.default_value = tmpexpr.value; |
vlm | fa67ddc | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 36 | } |
| 37 | |
| 38 | return r_value; |
| 39 | } |
| 40 | |