mirror of https://gerrit.osmocom.org/asn1c
preliminary stupid things
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@950 59561ff5-6e30-0410-9f3c-9617f08c8826
This commit is contained in:
parent
131ba38663
commit
04a08da36a
|
@ -23,32 +23,37 @@ void asn1p_lexer_hack_push_encoding_control(void);
|
|||
#define yylineno asn1p_lineno
|
||||
extern int asn1p_lineno;
|
||||
|
||||
/*
|
||||
* This temporary variable is used to solve the shortcomings of 1-lookahead
|
||||
* parser.
|
||||
*/
|
||||
static struct AssignedIdentifier *saved_aid;
|
||||
|
||||
static asn1p_value_t *
|
||||
_convert_bitstring2binary(char *str, int base);
|
||||
|
||||
#define checkmem(ptr) do { \
|
||||
if(!(ptr)) \
|
||||
return yyerror("Memory failure"); \
|
||||
#define checkmem(ptr) do { \
|
||||
if(!(ptr)) \
|
||||
return yyerror("Memory failure"); \
|
||||
} while(0)
|
||||
|
||||
#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
|
||||
if(arg1->type != constr_type) { \
|
||||
int __ret; \
|
||||
root = asn1p_constraint_new(yylineno); \
|
||||
checkmem(root); \
|
||||
root->type = constr_type; \
|
||||
__ret = asn1p_constraint_insert(root, \
|
||||
arg1); \
|
||||
checkmem(__ret == 0); \
|
||||
} else { \
|
||||
root = arg1; \
|
||||
} \
|
||||
if(arg2) { \
|
||||
int __ret \
|
||||
= asn1p_constraint_insert(root, arg2); \
|
||||
checkmem(__ret == 0); \
|
||||
} \
|
||||
#define CONSTRAINT_INSERT(root, lloc, constr_type, arg1, arg2) do { \
|
||||
if(arg1->type != constr_type) { \
|
||||
int __ret; \
|
||||
root = asn1p_constraint_new(yylineno); \
|
||||
checkmem(root); \
|
||||
root->type = constr_type; \
|
||||
__ret = asn1p_constraint_insert(root, \
|
||||
arg1); \
|
||||
checkmem(__ret == 0); \
|
||||
} else { \
|
||||
root = arg1; \
|
||||
} \
|
||||
if(arg2) { \
|
||||
int __ret \
|
||||
= asn1p_constraint_insert(root, arg2); \
|
||||
checkmem(__ret == 0); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
%}
|
||||
|
@ -68,6 +73,7 @@ static asn1p_value_t *
|
|||
asn1p_constraint_t *a_constr; /* Constraint */
|
||||
enum asn1p_constraint_type_e a_ctype;/* Constraint type */
|
||||
asn1p_xports_t *a_xports; /* IMports/EXports */
|
||||
struct AssignedIdentifier a_aid; /* Assigned Identifier */
|
||||
asn1p_oid_t *a_oid; /* Object Identifier */
|
||||
asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
|
||||
struct asn1p_type_tag_s a_tag; /* A tag */
|
||||
|
@ -258,6 +264,7 @@ static asn1p_value_t *
|
|||
%type <a_plist> ParameterArgumentList
|
||||
%type <a_expr> ActualParameter
|
||||
%type <a_expr> ActualParameterList
|
||||
%type <a_aid> AssignedIdentifier /* OID/DefinedValue */
|
||||
%type <a_oid> ObjectIdentifier /* OID */
|
||||
%type <a_oid> optObjectIdentifier /* Optional OID */
|
||||
%type <a_oid> ObjectIdentifierBody
|
||||
|
@ -346,7 +353,7 @@ ModuleSpecification:
|
|||
}
|
||||
checkmem($$);
|
||||
|
||||
$$->Identifier = $1;
|
||||
$$->ModuleName = $1;
|
||||
$$->module_oid = $2;
|
||||
$$->module_flags = $4;
|
||||
}
|
||||
|
@ -574,6 +581,10 @@ ModuleSpecificationElement:
|
|||
*/
|
||||
ImportsDefinition:
|
||||
TOK_IMPORTS ImportsBundleSet ';' {
|
||||
if(!saved_aid && 0)
|
||||
return yyerror("Unterminated IMPORTS FROM, "
|
||||
"expected semicolon ';'");
|
||||
saved_aid = 0;
|
||||
$$ = $2;
|
||||
}
|
||||
/*
|
||||
|
@ -596,11 +607,18 @@ ImportsBundleSet:
|
|||
}
|
||||
;
|
||||
|
||||
AssignedIdentifier:
|
||||
{ memset(&$$, 0, sizeof($$)); }
|
||||
| ObjectIdentifier { $$.oid = $1; };
|
||||
/* | DefinedValue { $$.value = $1; }; // Handled through saved_aid */
|
||||
|
||||
ImportsBundle:
|
||||
ImportsList TOK_FROM TypeRefName optObjectIdentifier {
|
||||
ImportsList TOK_FROM TypeRefName AssignedIdentifier {
|
||||
$$ = $1;
|
||||
$$->from = $3;
|
||||
$$->from_oid = $4;
|
||||
$$->fromModuleName = $3;
|
||||
$$->identifier = $4;
|
||||
/* This stupid thing is used for look-back hack. */
|
||||
saved_aid = $$->identifier.oid ? 0 : &($$->identifier);
|
||||
checkmem($$);
|
||||
}
|
||||
;
|
||||
|
@ -1520,14 +1538,14 @@ optConstraints:
|
|||
|
||||
Constraints:
|
||||
SetOfConstraints {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_SET, $1, 0);
|
||||
}
|
||||
| TOK_SIZE '(' ElementSetSpecs ')' {
|
||||
/*
|
||||
* This is a special case, for compatibility purposes.
|
||||
* It goes without parentheses.
|
||||
*/
|
||||
CONSTRAINT_INSERT($$, ACT_CT_SIZE, $3, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CT_SIZE, $3, 0);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1536,7 +1554,7 @@ SetOfConstraints:
|
|||
$$ = $2;
|
||||
}
|
||||
| SetOfConstraints '(' ElementSetSpecs ')' {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_SET, $1, $3);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1548,15 +1566,15 @@ ElementSetSpecs:
|
|||
asn1p_constraint_t *ct;
|
||||
ct = asn1p_constraint_new(yylineno);
|
||||
ct->type = ACT_EL_EXT;
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CSV, $1, ct);
|
||||
}
|
||||
| ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
|
||||
asn1p_constraint_t *ct;
|
||||
ct = asn1p_constraint_new(yylineno);
|
||||
ct->type = ACT_EL_EXT;
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CSV, $1, ct);
|
||||
ct = $$;
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CSV, ct, $5);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1565,16 +1583,16 @@ ElementSetSpec:
|
|||
$$ = $1;
|
||||
}
|
||||
| TOK_ALL TOK_EXCEPT ConstraintSubtypeElement {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_AEX, $3, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_AEX, $3, 0);
|
||||
}
|
||||
| ElementSetSpec Union ConstraintSubtypeElement {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_UNI, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_UNI, $1, $3);
|
||||
}
|
||||
| ElementSetSpec Intersection ConstraintSubtypeElement {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_INT, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_INT, $1, $3);
|
||||
}
|
||||
| ConstraintSubtypeElement Except ConstraintSubtypeElement {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_EXC, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_EXC, $1, $3);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1718,10 +1736,10 @@ ContainedSubtype:
|
|||
|
||||
InnerTypeConstraint:
|
||||
TOK_WITH TOK_COMPONENT SetOfConstraints {
|
||||
CONSTRAINT_INSERT($$, ACT_CT_WCOMP, $3, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CT_WCOMP, $3, 0);
|
||||
}
|
||||
| TOK_WITH TOK_COMPONENTS '{' WithComponentsList '}' {
|
||||
CONSTRAINT_INSERT($$, ACT_CT_WCOMPS, $4, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CT_WCOMPS, $4, 0);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1730,7 +1748,7 @@ WithComponentsList:
|
|||
$$ = $1;
|
||||
}
|
||||
| WithComponentsList ',' WithComponentsElement {
|
||||
CONSTRAINT_INSERT($$, ACT_CT_WCOMPS, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CT_WCOMPS, $1, $3);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1794,13 +1812,13 @@ SimpleTableConstraint:
|
|||
checkmem($$);
|
||||
ct->type = ACT_EL_VALUE;
|
||||
ct->value = asn1p_value_fromref(ref, 0);
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CRC, ct, 0);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CRC, ct, 0);
|
||||
}
|
||||
;
|
||||
|
||||
ComponentRelationConstraint:
|
||||
SimpleTableConstraint '{' AtNotationList '}' {
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CRC, $1, $3);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CRC, $1, $3);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1817,7 +1835,7 @@ AtNotationList:
|
|||
checkmem(ct);
|
||||
ct->type = ACT_EL_VALUE;
|
||||
ct->value = asn1p_value_fromref($3, 0);
|
||||
CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
|
||||
CONSTRAINT_INSERT($$, @1, ACT_CA_CSV, $1, ct);
|
||||
}
|
||||
;
|
||||
|
||||
|
|
Loading…
Reference in New Issue