COMPONENTS OF support and other enhancements
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@185 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
index b5d9e1e..6a3477d 100644
--- a/libasn1parser/asn1parser.c
+++ b/libasn1parser/asn1parser.c
@@ -17,7 +17,7 @@
extern int asn1p_lineno;
static int _asn1p_set_flags(enum asn1p_flags flags);
-static int _asn1p_assign_filename(asn1p_t *a, const char *fname);
+static int _asn1p_fix_modules(asn1p_t *a, const char *fname);
/*
* Parse the given buffer.
@@ -52,7 +52,7 @@
if(ret == 0) {
assert(a);
- if(_asn1p_assign_filename(a, "-"))
+ if(_asn1p_fix_modules(a, "-"))
return NULL; /* FIXME: destroy (a) */
} else {
assert(a == NULL);
@@ -104,7 +104,7 @@
if(ret == 0) {
assert(a);
- if(_asn1p_assign_filename(a, filename))
+ if(_asn1p_fix_modules(a, filename))
return NULL; /* FIXME: destroy (a) */
} else {
assert(a == NULL);
@@ -159,13 +159,38 @@
return 0;
}
+/*
+ * Perform last touches.
+ */
+static void
+_asn1p_apply_module2expr(asn1p_expr_t *expr, asn1p_module_t *mod) {
+ asn1p_expr_t *e;
+
+ expr->module = mod; /* This is a useful thing */
+
+ /*
+ * Do it to children also.
+ */
+ TQ_FOR(e, &(expr->members), next) {
+ _asn1p_apply_module2expr(e, mod);
+ }
+}
+
static int
-_asn1p_assign_filename(asn1p_t *a, const char *fname) {
+_asn1p_fix_modules(asn1p_t *a, const char *fname) {
asn1p_module_t *mod;
TQ_FOR(mod, &(a->modules), mod_next) {
+ asn1p_expr_t *expr;
+
mod->source_file_name = strdup(fname);
if(mod->source_file_name == NULL)
return -1;
+
+ TQ_FOR(expr, &(mod->members), next) {
+ _asn1p_apply_module2expr(expr, mod);
+ }
}
return 0;
}
+
+