blob: 261425c858b89dfc248853c8fcafb293e37e6691 [file] [log] [blame]
vlmfa67ddc2004-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
vlm44a9b522004-09-15 11:46:23 +000011 if(expr->value && expr->meta_type == AMT_VALUE) {
vlmfa67ddc2004-06-03 03:38:44 +000012 if(asn1f_value_resolve(arg, expr)) {
13 /* This function will emit messages */
14 r_value = -1;
15 }
vlm44a9b522004-09-15 11:46:23 +000016 }
vlmfa67ddc2004-06-03 03:38:44 +000017
vlm79729272004-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
vlm44a9b522004-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;
vlmfa67ddc2004-06-03 03:38:44 +000039 }
vlm44a9b522004-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;
45 if(asn1f_value_resolve(&tmparg, &tmpexpr))
46 r_value = -1;
47 expr->marker.default_value = tmpexpr.value;
vlmfa67ddc2004-06-03 03:38:44 +000048 }
49
50 return r_value;
51}
52