ObjectSets
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1107 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 597f77c..f3131df 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -272,8 +272,8 @@
%type <tv_str> optIdentifier
%type <a_parg> ParameterArgumentName
%type <a_plist> ParameterArgumentList
-%type <a_expr> Specialization
-%type <a_expr> Specializations
+%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 */
@@ -747,9 +747,9 @@
$$->meta_type = AMT_TYPEREF;
}
/*
- * A parametrized assignment.
+ * A parameterized assignment.
*/
- | ComplexTypeReference '{' Specializations '}' {
+ | ComplexTypeReference '{' ActualParameterList '}' {
$$ = asn1p_expr_new(yylineno);
checkmem($$);
$$->reference = $1;
@@ -782,7 +782,7 @@
assert($$->meta_type == AMT_OBJECTCLASS);
}
/*
- * Parametrized <Type> declaration:
+ * Parameterized <Type> declaration:
* === EXAMPLE ===
* SIGNED { ToBeSigned } ::= SEQUENCE {
* toBeSigned ToBeSigned,
@@ -793,7 +793,12 @@
*/
| TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ Type {
$$ = $6;
- assert($$->Identifier == 0);
+ $$->Identifier = $1;
+ $$->lhs_params = $3;
+ }
+ /* Parameterized CLASS declaration */
+ | TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ ObjectClass {
+ $$ = $6;
$$->Identifier = $1;
$$->lhs_params = $3;
}
@@ -846,21 +851,29 @@
checkmem(ret == 0);
$$.argument = $3;
}
+ | BasicTypeId ':' TypeRefName {
+ int ret;
+ $$.governor = asn1p_ref_new(yylineno);
+ ret = asn1p_ref_add_component($$.governor,
+ ASN_EXPR_TYPE2STR($1), 1);
+ checkmem(ret == 0);
+ $$.argument = $3;
+ }
;
-Specializations:
- Specialization {
+ActualParameterList:
+ ActualParameter {
$$ = asn1p_expr_new(yylineno);
checkmem($$);
asn1p_expr_add($$, $1);
}
- | Specializations ',' Specialization {
+ | ActualParameterList ',' ActualParameter {
$$ = $1;
asn1p_expr_add($$, $3);
}
;
-Specialization:
+ActualParameter:
Type {
$$ = $1;
}
@@ -883,10 +896,16 @@
asn1p_ref_add_component(ref, $1, RLT_lowercase);
$$->value = asn1p_value_fromref(ref, 0);
}
+ | ValueSet {
+ $$ = asn1p_expr_new(yylineno);
+ $$->expr_type = A1TC_VALUESET;
+ $$->meta_type = AMT_VALUESET;
+ $$->constraints = $1;
+ }
;
/*
- | '{' Specialization '}' {
+ | '{' ActualParameter '}' {
$$ = asn1p_expr_new(yylineno);
checkmem($$);
asn1p_expr_add($$, $2);
@@ -1255,7 +1274,6 @@
$$->expr_type = ASN_TYPE_ANY;
$$->meta_type = AMT_TYPE;
}
-
| TOK_INSTANCE TOK_OF ComplexTypeReference {
$$ = asn1p_expr_new(yylineno);
checkmem($$);
@@ -1674,7 +1692,11 @@
;
ElementSetSpecs:
- ElementSetSpec {
+ TOK_ThreeDots {
+ $$ = asn1p_constraint_new(yylineno);
+ $$->type = ACT_EL_EXT;
+ }
+ | ElementSetSpec {
$$ = $1;
}
| ElementSetSpec ',' TOK_ThreeDots {