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

more advanced stuff with defaults

parent d370e9f5
No related branches found
No related tags found
No related merge requests found
......@@ -138,11 +138,9 @@ _asn1f_parse_class_object_data(arg_t *arg, asn1p_expr_t *eclass,
chunk->content.token,
buf, p - buf);
ret = _asn1f_assign_cell_value(arg, row, cell, buf, p);
if(ret) {
if(newpos) *newpos = buf;
return ret;
}
if(ret) return ret;
buf = p;
if(newpos) *newpos = buf;
} break;
case WC_OPTIONALGROUP: {
uint8_t *np = 0;
......@@ -152,6 +150,7 @@ _asn1f_parse_class_object_data(arg_t *arg, asn1p_expr_t *eclass,
if(newpos) *newpos = np;
if(ret && np != buf)
return ret;
buf = np;
} break;
}
}
......
......@@ -38,6 +38,19 @@ asn1f_fix_dereference_defaults(arg_t *arg) {
break;
}
if(expr->expr_type == A1TC_CLASSFIELD_FTVFS) {
asn1p_expr_t *child = TQ_FIRST(&expr->members);
int ret;
assert(child);
assert(child->marker.default_value == 0);
tmparg.expr = child;
child->marker.default_value=expr->marker.default_value;
ret = asn1f_fix_dereference_defaults(&tmparg);
expr->marker.default_value = child->marker.default_value;
if(ret == 0) return 0; /* Finished */
}
tmparg.expr = &tmpexpr;
tmpexpr.meta_type = AMT_VALUE;
tmpexpr.marker.default_value = 0;
......
......@@ -248,7 +248,8 @@ asn1f_lookup_symbol(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) {
}
expr = asn1f_lookup_symbol(arg, imports_from, &tmpref);
if(!expr && !(arg->expr->_mark & TM_BROKEN)) {
if(!expr && !(arg->expr->_mark & TM_BROKEN)
&& !(imports_from->_tags & MT_STANDARD_MODULE)) {
arg->expr->_mark |= TM_BROKEN;
if(modulename) {
FATAL("Module %s referred by %s in module %s "
......
-- OK: Everything is fine
-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
-- .spelio.software.asn1c.test (9363.1.5.1)
-- .99
ModuleClassSample
{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
spelio(9363) software(1) asn1c(5) test(1) 99 }
DEFINITIONS ::=
BEGIN
SAMPLE-CLASS ::= CLASS {
&id RELATIVE-OID UNIQUE,
&code ENUMERATED { request, response, status }
DEFAULT request,
&Type OPTIONAL
} WITH SYNTAX { [TYPE &Type] [WITH CODE &code] IDENTIFIED BY &id }
request-Whatever SAMPLE-CLASS
::= { IDENTIFIED BY request-whatever }
respond-Stuff SAMPLE-CLASS
::= { WITH CODE 1 IDENTIFIED BY response-stuff }
request-Status SAMPLE-CLASS
::= { TYPE SampleType WITH CODE 2 IDENTIFIED BY request-id }
request-Salt SAMPLE-CLASS
::= { TYPE Salt IDENTIFIED BY request-salt }
request-id RELATIVE-OID ::= { 1 1 1 }
request-salt RELATIVE-OID ::= { 1 1 1 }
request-whatever RELATIVE-OID ::= { 1 1 5 }
response-stuff RELATIVE-OID ::= { 2 0 1 }
SampleType ::= SEQUENCE { ... }
Salt ::= SET { ... }
END
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