calling conventions refactored
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@820 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1fix/asn1fix_retrieve.c b/libasn1fix/asn1fix_retrieve.c
index f9e593b..39a47c1 100644
--- a/libasn1fix/asn1fix_retrieve.c
+++ b/libasn1fix/asn1fix_retrieve.c
@@ -1,6 +1,11 @@
#include "asn1fix_internal.h"
-static asn1p_expr_t *asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, int type_or_value);
+enum ftt_what {
+ FTT_TYPE, /* Find the type of the given expression */
+ FTT_VALUE, /* Find the value of the given expression */
+};
+
+static asn1p_expr_t *asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, enum ftt_what);
static int asn1f_compatible_with_exports(arg_t *arg, asn1p_module_t *mod, const char *name);
@@ -290,37 +295,38 @@
asn1p_expr_t *
asn1f_find_terminal_type(arg_t *arg, asn1p_expr_t *expr) {
- return asn1f_find_terminal_thing(arg, expr, 0);
+ return asn1f_find_terminal_thing(arg, expr, FTT_TYPE);
}
asn1p_expr_t *
asn1f_find_terminal_value(arg_t *arg, asn1p_expr_t *expr) {
- return asn1f_find_terminal_thing(arg, expr, 1);
+ return asn1f_find_terminal_thing(arg, expr, FTT_VALUE);
}
static asn1p_expr_t *
-asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, int type_or_value) {
+asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, enum ftt_what what) {
asn1p_ref_t *ref;
asn1p_expr_t *tc;
- if(type_or_value) {
- /* VALUE */
+ switch(what) {
+ case FTT_TYPE:
+ /* Expression may be a terminal type itself */
+ if(expr->expr_type != A1TC_REFERENCE)
+ return expr;
+ ref = expr->reference;
+ break;
+ case FTT_VALUE:
assert(expr->meta_type == AMT_VALUE);
assert(expr->value);
/* Expression may be a terminal type itself */
if(expr->value->type != ATV_REFERENCED)
return expr;
ref = expr->value->value.reference;
- } else {
- /* TYPE */
- /* Expression may be a terminal type itself */
- if(expr->expr_type != A1TC_REFERENCE)
- return expr;
- ref = expr->reference;
+ break;
}
DEBUG("%s(%s->%s) for line %d",
- type_or_value?"VALUE":"TYPE",
+ (what == FTT_VALUE)?"VALUE":"TYPE",
expr->Identifier, asn1f_printable_reference(ref),
expr->_lineno);
@@ -329,7 +335,7 @@
/*
* Lookup inside the type itself (ENUMERATED, INTEGER, etc).
*/
- if(type_or_value) {
+ if(what == FTT_VALUE) {
asn1p_expr_t *val_type_tc;
val_type_tc = asn1f_find_terminal_type(arg, expr);
if(val_type_tc
@@ -365,7 +371,7 @@
tc->_mark |= TM_RECURSION;
WITH_MODULE(tc->module,
- expr = asn1f_find_terminal_thing(arg, tc, type_or_value));
+ expr = asn1f_find_terminal_thing(arg, tc, what));
tc->_mark &= ~TM_RECURSION;
return expr;