blob: eb67ac3f669fa0af9e790136ae7c893774682610 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001#include "asn1fix_internal.h"
2
3/*
4 * Dereference DefinedValues:
5 */
6int
7asn1f_fix_dereference_values(arg_t *arg) {
8 asn1p_expr_t *expr = arg->expr;
9 int r_value = 0;
10
Lev Walkin9fb53592004-09-15 11:46:23 +000011 if(expr->value && expr->meta_type == AMT_VALUE) {
Lev Walkinf15320b2004-06-03 03:38:44 +000012 if(asn1f_value_resolve(arg, expr)) {
13 /* This function will emit messages */
14 r_value = -1;
15 }
Lev Walkin9fb53592004-09-15 11:46:23 +000016 }
Lev Walkinf15320b2004-06-03 03:38:44 +000017
Lev Walkin9fb53592004-09-15 11:46:23 +000018 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;
Lev Walkinf15320b2004-06-03 03:38:44 +000027 }
Lev Walkin9fb53592004-09-15 11:46:23 +000028
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;
Lev Walkinf15320b2004-06-03 03:38:44 +000036 }
37
38 return r_value;
39}
40