parameterization: direct assignment


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1103 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/tests/106-param-constr-OK.asn1.-P b/tests/106-param-constr-OK.asn1.-P
index 4904620..db11516 100644
--- a/tests/106-param-constr-OK.asn1.-P
+++ b/tests/106-param-constr-OK.asn1.-P
@@ -6,21 +6,48 @@
 
 /*** <<< TYPE-DECLS [Narrow] >>> ***/
 
-typedef struct Narrow_16P0 {
-	long	 narrower;
+typedef struct Narrow_15P0 {
+	long	*narrow1	/* DEFAULT 3 */;
+	long	 narrow2;
+	long	*narrow3	/* OPTIONAL */;
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} Narrow_16P0_t;
+} Narrow_15P0_t;
 
 /*** <<< FUNC-DECLS [Narrow] >>> ***/
 
-extern asn_TYPE_descriptor_t asn_DEF_Narrow_16P0;
+extern asn_TYPE_descriptor_t asn_DEF_Narrow_15P0;
 
 /*** <<< CODE [Narrow] >>> ***/
 
 static int
-memb_narrower_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_narrow1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 5)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_narrow2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	long value;
 	
@@ -44,36 +71,93 @@
 	}
 }
 
+static int
+memb_narrow3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 3 && value <= 5)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
 
 /*** <<< STAT-DEFS [Narrow] >>> ***/
 
-static asn_TYPE_member_t asn_MBR_Narrow_16P0_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Narrow_16P0, narrower),
+static int asn_DFL_2_set_3(void **sptr) {
+	long *st = *sptr;
+	
+	if(!st) {
+		st = (*sptr = CALLOC(1, sizeof(*st)));
+		if(!st) return -1;
+	}
+	
+	/* Install default value 3 */
+	*st = 3;
+	return 0;
+}
+static asn_TYPE_member_t asn_MBR_Narrow_15P0_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow1),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
 		.tag_mode = 0,
 		.type = &asn_DEF_NativeInteger,
-		.memb_constraints = memb_narrower_constraint_1,
+		.memb_constraints = memb_narrow1_constraint_1,
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = asn_DFL_2_set_3,	/* DEFAULT 3 */
+		.name = "narrow1"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Narrow_15P0, narrow2),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		.tag_mode = +1,	/* EXPLICIT tag at current level */
+		.type = &asn_DEF_NativeInteger,
+		.memb_constraints = memb_narrow2_constraint_1,
 		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
 		.default_value = 0,
-		.name = "narrower"
+		.name = "narrow2"
+		},
+	{ ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow3),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		.tag_mode = +1,	/* EXPLICIT tag at current level */
+		.type = &asn_DEF_NativeInteger,
+		.memb_constraints = memb_narrow3_constraint_1,
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = 0,
+		.name = "narrow3"
 		},
 };
-static ber_tlv_tag_t asn_DEF_Narrow_16P0_tags_1[] = {
+static ber_tlv_tag_t asn_DEF_Narrow_15P0_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_TYPE_tag2member_t asn_MAP_Narrow_16P0_tag2el_1[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* narrower at 18 */
+static asn_TYPE_tag2member_t asn_MAP_Narrow_15P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* narrow1 at 20 */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* narrow2 at 20 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* narrow3 at 20 */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Narrow_16P0_specs_1 = {
-	sizeof(struct Narrow_16P0),
-	offsetof(struct Narrow_16P0, _asn_ctx),
-	asn_MAP_Narrow_16P0_tag2el_1,
-	1,	/* Count of tags in the map */
+static asn_SEQUENCE_specifics_t asn_SPC_Narrow_15P0_specs_1 = {
+	sizeof(struct Narrow_15P0),
+	offsetof(struct Narrow_15P0, _asn_ctx),
+	asn_MAP_Narrow_15P0_tag2el_1,
+	3,	/* Count of tags in the map */
 	0, 0, 0,	/* Optional elements (not needed) */
 	-1,	/* Start extensions */
 	-1	/* Stop extensions */
 };
-asn_TYPE_descriptor_t asn_DEF_Narrow_16P0 = {
+asn_TYPE_descriptor_t asn_DEF_Narrow_15P0 = {
 	"Narrow",
 	"Narrow",
 	SEQUENCE_free,
@@ -85,16 +169,16 @@
 	SEQUENCE_encode_xer,
 	0,	/* No PER decoder, -gen-PER to enable */
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Narrow_16P0_tags_1,
-	sizeof(asn_DEF_Narrow_16P0_tags_1)
-		/sizeof(asn_DEF_Narrow_16P0_tags_1[0]), /* 1 */
-	asn_DEF_Narrow_16P0_tags_1,	/* Same as above */
-	sizeof(asn_DEF_Narrow_16P0_tags_1)
-		/sizeof(asn_DEF_Narrow_16P0_tags_1[0]), /* 1 */
+	asn_DEF_Narrow_15P0_tags_1,
+	sizeof(asn_DEF_Narrow_15P0_tags_1)
+		/sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
+	asn_DEF_Narrow_15P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_Narrow_15P0_tags_1)
+		/sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Narrow_16P0_1,
-	1,	/* Elements count */
-	&asn_SPC_Narrow_16P0_specs_1	/* Additional specs */
+	asn_MBR_Narrow_15P0_1,
+	3,	/* Elements count */
+	&asn_SPC_Narrow_15P0_specs_1	/* Additional specs */
 };
 
 
@@ -104,7 +188,7 @@
 
 /*** <<< TYPE-DECLS [NarrowInteger] >>> ***/
 
-typedef Narrow_16P0_t	 NarrowInteger_t;
+typedef Narrow_15P0_t	 NarrowInteger_t;
 
 /*** <<< FUNC-DECLS [NarrowInteger] >>> ***/
 
@@ -123,28 +207,28 @@
 NarrowInteger_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_Narrow_16P0.check_constraints;
+	td->check_constraints = asn_DEF_Narrow_15P0.check_constraints;
 	return td->check_constraints(td, sptr, app_errlog, app_key);
 }
 
 /*
- * This type is implemented using Narrow_16P0,
+ * This type is implemented using Narrow_15P0,
  * so here we adjust the DEF accordingly.
  */
 static void
 NarrowInteger_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_Narrow_16P0.free_struct;
-	td->print_struct   = asn_DEF_Narrow_16P0.print_struct;
-	td->ber_decoder    = asn_DEF_Narrow_16P0.ber_decoder;
-	td->der_encoder    = asn_DEF_Narrow_16P0.der_encoder;
-	td->xer_decoder    = asn_DEF_Narrow_16P0.xer_decoder;
-	td->xer_encoder    = asn_DEF_Narrow_16P0.xer_encoder;
-	td->uper_decoder   = asn_DEF_Narrow_16P0.uper_decoder;
+	td->free_struct    = asn_DEF_Narrow_15P0.free_struct;
+	td->print_struct   = asn_DEF_Narrow_15P0.print_struct;
+	td->ber_decoder    = asn_DEF_Narrow_15P0.ber_decoder;
+	td->der_encoder    = asn_DEF_Narrow_15P0.der_encoder;
+	td->xer_decoder    = asn_DEF_Narrow_15P0.xer_decoder;
+	td->xer_encoder    = asn_DEF_Narrow_15P0.xer_encoder;
+	td->uper_decoder   = asn_DEF_Narrow_15P0.uper_decoder;
 	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_Narrow_16P0.per_constraints;
-	td->elements       = asn_DEF_Narrow_16P0.elements;
-	td->elements_count = asn_DEF_Narrow_16P0.elements_count;
-	td->specifics      = asn_DEF_Narrow_16P0.specifics;
+		td->per_constraints = asn_DEF_Narrow_15P0.per_constraints;
+	td->elements       = asn_DEF_Narrow_15P0.elements;
+	td->elements_count = asn_DEF_Narrow_15P0.elements_count;
+	td->specifics      = asn_DEF_Narrow_15P0.specifics;
 }
 
 void