parameterization: direct assignment


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1103 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index e119f17..e009d06 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -250,10 +250,11 @@
 %type	<a_expr>		ObjectClass
 %type	<a_expr>		Type
 %type	<a_expr>		DataTypeReference	/* Type1 ::= Type2 */
-%type	<a_expr>		DefinedTypeRef
+%type	<a_expr>		DefinedType
 %type	<a_expr>		ValueSetDefinition  /* Val INTEGER ::= {1|2} */
 %type	<a_expr>		ValueDefinition		/* val INTEGER ::= 1*/
 %type	<a_value>		Value
+%type	<a_value>		SimpleValue
 %type	<a_value>		DefinedValue
 %type	<a_value>		SignedNumber
 %type	<a_expr>		optComponentTypeLists
@@ -712,7 +713,7 @@
 
 
 ValueSetDefinition:
-	TypeRefName DefinedTypeRef TOK_PPEQ
+	TypeRefName DefinedType TOK_PPEQ
 		'{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
 		$$ = $2;
 		assert($$->Identifier == 0);
@@ -722,19 +723,37 @@
 	}
 	;
 
-DefinedTypeRef:
-	ComplexTypeReference {
+DefinedType:
+	BasicType {
+		$$ = $1;
+	}
+	/*
+	 * A DefinedType reference.
+	 * "CLASS1.&id.&id2"
+	 * or
+	 * "Module.Type"
+	 * or
+	 * "Module.identifier"
+	 * or
+	 * "Type"
+	 */
+	| ComplexTypeReference {
 		$$ = asn1p_expr_new(yylineno);
 		checkmem($$);
 		$$->reference = $1;
 		$$->expr_type = A1TC_REFERENCE;
 		$$->meta_type = AMT_TYPEREF;
 	}
-	| BasicTypeId {
+	/*
+	 * A parametrized assignment.
+	 */
+	| ComplexTypeReference '{' Specializations '}' {
 		$$ = asn1p_expr_new(yylineno);
 		checkmem($$);
-		$$->expr_type = $1;
-		$$->meta_type = AMT_TYPE;
+		$$->reference = $1;
+		$$->rhs_pspecs = $3;
+		$$->expr_type = A1TC_REFERENCE;
+		$$->meta_type = AMT_TYPEREF;
 	}
 	;
 
@@ -843,6 +862,14 @@
 	Type {
 		$$ = $1;
 	}
+	| SimpleValue {
+		$$ = asn1p_expr_new(yylineno);
+		checkmem($$);
+		$$->Identifier = "?";
+		$$->expr_type = A1TC_REFERENCE;
+		$$->meta_type = AMT_VALUE;
+		$$->value = $1;
+	}
 	| Identifier {
 		asn1p_ref_t *ref;
 		$$ = asn1p_expr_new(yylineno);
@@ -1168,7 +1195,7 @@
 	;
 
 TypeDeclarationSet:
-	BasicType {
+	DefinedType {
 		$$ = $1;
 	}
 	| TOK_CHOICE '{' AlternativeTypeLists '}' {
@@ -1226,34 +1253,7 @@
 		$$->expr_type = ASN_TYPE_ANY;
 		$$->meta_type = AMT_TYPE;
 	}
-	/*
-	 * A DefinedType reference.
-	 * "CLASS1.&id.&id2"
-	 * or
-	 * "Module.Type"
-	 * or
-	 * "Module.identifier"
-	 * or
-	 * "Type"
-	 */
-	| ComplexTypeReference {
-		$$ = asn1p_expr_new(yylineno);
-		checkmem($$);
-		$$->reference = $1;
-		$$->expr_type = A1TC_REFERENCE;
-		$$->meta_type = AMT_TYPEREF;
-	}
-	/*
-	 * A parametrized assignment.
-	 */
-	| ComplexTypeReference '{' Specializations '}' {
-		$$ = asn1p_expr_new(yylineno);
-		checkmem($$);
-		$$->reference = $1;
-		$$->rhs_pspecs = $3;
-		$$->expr_type = A1TC_REFERENCE;
-		$$->meta_type = AMT_TYPEREF;
-	}
+
 	| TOK_INSTANCE TOK_OF ComplexTypeReference {
 		$$ = asn1p_expr_new(yylineno);
 		checkmem($$);
@@ -1407,7 +1407,7 @@
  * === EOF ===
  */
 ValueDefinition:
-	Identifier DefinedTypeRef TOK_PPEQ Value {
+	Identifier DefinedType TOK_PPEQ Value {
 		$$ = $2;
 		assert($$->Identifier == NULL);
 		$$->Identifier = $1;
@@ -1417,7 +1417,9 @@
 	;
 
 Value:
-	Identifier ':' Value {
+	SimpleValue
+	| DefinedValue
+	| Identifier ':' Value {
 		$$ = asn1p_value_fromint(0);
 		checkmem($$);
 		$$->type = ATV_CHOICE_IDENTIFIER;
@@ -1434,7 +1436,10 @@
 		checkmem($$);
 		$$->type = ATV_NULL;
 	}
-	| TOK_FALSE {
+	;
+
+SimpleValue:
+	TOK_FALSE {
 		$$ = asn1p_value_fromint(0);
 		checkmem($$);
 		$$->type = ATV_FALSE;
@@ -1458,9 +1463,6 @@
 	| SignedNumber {
 		$$ = $1;
 	}
-	| DefinedValue {
-		$$ = $1;
-	}
 	;
 
 DefinedValue: