Skip to content
Snippets Groups Projects
Commit d8095522 authored by Lev Walkin's avatar Lev Walkin
Browse files

better debugging

parent 1a447955
No related branches found
No related tags found
No related merge requests found
...@@ -48,6 +48,13 @@ asn1f_lookup_in_imports(arg_t *arg, asn1p_module_t *mod, const char *name) { ...@@ -48,6 +48,13 @@ asn1f_lookup_in_imports(arg_t *arg, asn1p_module_t *mod, const char *name) {
*/ */
mod = asn1f_lookup_module(arg, xp->from, xp->from_oid); mod = asn1f_lookup_module(arg, xp->from, xp->from_oid);
if(mod == NULL) { if(mod == NULL) {
/* Conditional debug */
if(!(arg->expr->_mark & TM_BROKEN)) {
arg->expr->_mark |= TM_BROKEN;
FATAL("Cannot find module %s "
"mentioned for %s at line %d",
xp->from, name, arg->expr->_lineno);
}
/* ENOENT/ETOOMANYREFS */ /* ENOENT/ETOOMANYREFS */
return NULL; return NULL;
} }
...@@ -220,6 +227,7 @@ asn1f_lookup_symbol(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) { ...@@ -220,6 +227,7 @@ asn1f_lookup_symbol(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) {
*/ */
if(imports_from) { if(imports_from) {
asn1p_ref_t tmpref = *ref; asn1p_ref_t tmpref = *ref;
asn1p_expr_t *expr;
if(modulename) { if(modulename) {
/* /*
* The modulename is specified inside this reference. * The modulename is specified inside this reference.
...@@ -230,7 +238,26 @@ asn1f_lookup_symbol(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) { ...@@ -230,7 +238,26 @@ asn1f_lookup_symbol(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) {
tmpref.comp_count--; tmpref.comp_count--;
assert(tmpref.comp_count > 0); assert(tmpref.comp_count > 0);
} }
return asn1f_lookup_symbol(arg, imports_from, &tmpref);
expr = asn1f_lookup_symbol(arg, imports_from, &tmpref);
if(!expr && !(arg->expr->_mark & TM_BROKEN)) {
arg->expr->_mark |= TM_BROKEN;
if(modulename) {
FATAL("Module %s referred by %s in module %s "
"does not contain the requested symbol",
imports_from->Identifier,
asn1f_printable_reference(ref),
mod->Identifier);
} else {
FATAL("Module %s referred in IMPORTS section "
"for %s of module %s does not contain "
"the requested symbol",
imports_from->Identifier,
asn1f_printable_reference(ref),
mod->Identifier);
}
}
return expr;
} }
/* /*
...@@ -316,7 +343,7 @@ asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, int type_or_value) { ...@@ -316,7 +343,7 @@ asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, int type_or_value) {
} }
/* /*
* Lookup inside the default module. * Lookup inside the default module and its IMPORTS section.
*/ */
tc = asn1f_lookup_symbol(arg, expr->module, ref); tc = asn1f_lookup_symbol(arg, expr->module, ref);
if(tc == NULL) { if(tc == NULL) {
...@@ -367,8 +394,14 @@ asn1f_compatible_with_exports(arg_t *arg, asn1p_module_t *mod, const char *name) ...@@ -367,8 +394,14 @@ asn1f_compatible_with_exports(arg_t *arg, asn1p_module_t *mod, const char *name)
return 0; return 0;
} }
DEBUG("Symbol \"%s\" contradicts with EXPORTS of module %s", /* Conditional debug */
name, mod->Identifier); if(!(arg->expr->_mark & TM_BROKEN)) {
arg->expr->_mark |= TM_BROKEN;
FATAL("EXPORTS section of module %s in %s "
"does not mention %s at line %d",
mod->Identifier, mod->source_file_name, name,
arg->expr->_lineno);
}
errno = ESRCH; errno = ESRCH;
return -1; return -1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment