blob: 76f49a3986d5c63b14bb26cc086257493e14336d [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 Walkin9288d1c2005-03-10 11:27:13 +000012 if(asn1f_value_resolve(arg, expr, 0)) {
Lev Walkinf15320b2004-06-03 03:38:44 +000013 /* 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 Walkin3645c1c2004-10-31 00:11:50 +000018 return r_value;
19}
20
21
22/*
23 * Dereference DEFAULT values
24 */
25int
26asn1f_fix_dereference_defaults(arg_t *arg) {
27 asn1p_expr_t *expr = arg->expr;
28 int r_value = 0;
29
Lev Walkin9fb53592004-09-15 11:46:23 +000030 if(expr->marker.default_value) {
31 arg_t tmparg = *arg;
32 asn1p_expr_t tmpexpr = *expr;
33
34 switch(expr->marker.default_value->type) {
35 default:
36 return r_value;
37 case ATV_REFERENCED:
38 break;
Lev Walkinf15320b2004-06-03 03:38:44 +000039 }
Lev Walkin9fb53592004-09-15 11:46:23 +000040
41 tmparg.expr = &tmpexpr;
42 tmpexpr.meta_type = AMT_VALUE;
43 tmpexpr.marker.default_value = 0;
44 tmpexpr.value = expr->marker.default_value;
Lev Walkin9288d1c2005-03-10 11:27:13 +000045 if(asn1f_value_resolve(&tmparg, &tmpexpr, 0))
Lev Walkin9fb53592004-09-15 11:46:23 +000046 r_value = -1;
47 expr->marker.default_value = tmpexpr.value;
Lev Walkinf15320b2004-06-03 03:38:44 +000048 }
49
50 return r_value;
51}
52