blob: 5436d58b6c588f5f9979cacc2faf1d3c62e8821f [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
Lev Walkindc4376d2006-03-16 11:04:55 +000041
42 if(expr->expr_type == A1TC_CLASSFIELD_FTVFS) {
43 asn1p_expr_t *child = TQ_FIRST(&expr->members);
44 int ret;
45 assert(child);
46 assert(child->marker.default_value == 0);
47 tmparg.expr = child;
48 child->marker.default_value=expr->marker.default_value;
49 ret = asn1f_fix_dereference_defaults(&tmparg);
50 expr->marker.default_value = child->marker.default_value;
51 if(ret == 0) return 0; /* Finished */
52 }
53
Lev Walkin9fb53592004-09-15 11:46:23 +000054 tmparg.expr = &tmpexpr;
55 tmpexpr.meta_type = AMT_VALUE;
56 tmpexpr.marker.default_value = 0;
57 tmpexpr.value = expr->marker.default_value;
Lev Walkin9288d1c2005-03-10 11:27:13 +000058 if(asn1f_value_resolve(&tmparg, &tmpexpr, 0))
Lev Walkin9fb53592004-09-15 11:46:23 +000059 r_value = -1;
60 expr->marker.default_value = tmpexpr.value;
Lev Walkinf15320b2004-06-03 03:38:44 +000061 }
62
63 return r_value;
64}
65