some more parameterization


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1104 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/ChangeLog b/ChangeLog
index c9358e5..9646d94 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
 	  (Severity: medim; Security impact: none)
 	* Refactored Information Object Classes parsing.
 	* Refactored Parameterization support.
+	* [typedef enum foo {}] foo_e; is now e_foo, see #1287989
 
 0.9.20:	2006-Mar-06
 
diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index f887adf..2149793 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -158,9 +158,9 @@
 				return -1;
 			}
 		}
-		OUT("} ");
+		OUT("} e_");
 			out_name_chain(arg, ONC_noflags);
-		OUT("_e;\n");
+		OUT(";\n");
 		assert(eidx == el_count);
 	}
 
@@ -259,9 +259,9 @@
 				v->value->value.v_integer,
 				(eidx < el_count) ? "," : "");
 		}
-		OUT("} ");
+		OUT("} e_");
 			out_name_chain(arg, ONC_noflags);
-		OUT("_e;\n");
+		OUT(";\n");
 		assert(eidx == el_count);
 	}
 
diff --git a/tests/103-reference-SE.asn1 b/tests/103-reference-SE.asn1
index 38cb0aa..8b01ef8 100644
--- a/tests/103-reference-SE.asn1
+++ b/tests/103-reference-SE.asn1
@@ -3,11 +3,11 @@
 
 -- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
 -- .spelio.software.asn1c.test (9363.1.5.1)
--- .102
+-- .103
 
 ModuleReference
 	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
-		spelio(9363) software(1) asn1c(5) test(1) 102 }
+		spelio(9363) software(1) asn1c(5) test(1) 103 }
 	DEFINITIONS ::=
 BEGIN
 	IMPORTS Type FROM ModuleReference;
diff --git a/tests/104-param-1-OK.asn1 b/tests/104-param-1-OK.asn1
index 4ffb603..9c1527a 100644
--- a/tests/104-param-1-OK.asn1
+++ b/tests/104-param-1-OK.asn1
@@ -5,7 +5,7 @@
 -- .spelio.software.asn1c.test (9363.1.5.1)
 -- .104
 
-ModuleParametrization1
+ModuleParameterization1
 	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 104 }
 	DEFINITIONS ::=
diff --git a/tests/104-param-1-OK.asn1.-EFprint-class-matrix b/tests/104-param-1-OK.asn1.-EFprint-class-matrix
index 26a81ef..754ba54 100644
--- a/tests/104-param-1-OK.asn1.-EFprint-class-matrix
+++ b/tests/104-param-1-OK.asn1.-EFprint-class-matrix
@@ -1,4 +1,4 @@
-ModuleParametrization1 { iso org(3) dod(6) internet(1) private(4)
+ModuleParameterization1 { iso org(3) dod(6) internet(1) private(4)
 	enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 104 }
 DEFINITIONS ::=
 BEGIN
diff --git a/tests/105-param-2-OK.asn1 b/tests/105-param-2-OK.asn1
index eeee4c4..e3ac589 100644
--- a/tests/105-param-2-OK.asn1
+++ b/tests/105-param-2-OK.asn1
@@ -5,7 +5,7 @@
 -- .spelio.software.asn1c.test (9363.1.5.1)
 -- .105
 
-ModuleParametrization2
+ModuleParameterization2
 	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 105 }
 	DEFINITIONS ::=
diff --git a/tests/106-param-constr-OK.asn1 b/tests/106-param-constr-OK.asn1
index 7dd8c4b..ea63c3d 100644
--- a/tests/106-param-constr-OK.asn1
+++ b/tests/106-param-constr-OK.asn1
@@ -5,7 +5,7 @@
 -- .spelio.software.asn1c.test (9363.1.5.1)
 -- .106
 
-ModuleParametrizationWithConstraints
+ModuleParameterizationWithConstraints
 	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 106 }
 	DEFINITIONS ::=
diff --git a/tests/107-param-constr-2-OK.asn1 b/tests/107-param-constr-2-OK.asn1
index 40aefab..23d23ec 100644
--- a/tests/107-param-constr-2-OK.asn1
+++ b/tests/107-param-constr-2-OK.asn1
@@ -5,7 +5,7 @@
 -- .spelio.software.asn1c.test (9363.1.5.1)
 -- .107
 
-ModuleParametrizationWithConstraints2
+ModuleParameterizationWithConstraints2
 	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 107 }
 	DEFINITIONS ::=
diff --git a/tests/108-param-constr-3-OK.asn1 b/tests/108-param-constr-3-OK.asn1
new file mode 100644
index 0000000..2b52486
--- /dev/null
+++ b/tests/108-param-constr-3-OK.asn1
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .108
+
+ModuleParameterizationWithConstraints3
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 108 }
+	DEFINITIONS ::=
+BEGIN
+
+	MinMax {Type, INTEGER:low-bound} ::= Type (low-bound..MAX)
+
+	ThreePlus ::= MinMax {INTEGER, 3}
+
+END
diff --git a/tests/108-param-constr-3-OK.asn1.-P b/tests/108-param-constr-3-OK.asn1.-P
new file mode 100644
index 0000000..ee5a504
--- /dev/null
+++ b/tests/108-param-constr-3-OK.asn1.-P
@@ -0,0 +1,292 @@
+
+/*** <<< INCLUDES [MinMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [MinMax] >>> ***/
+
+typedef INTEGER_t	 MinMax_16P0_t;
+
+/*** <<< FUNC-DECLS [MinMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_MinMax_16P0;
+asn_struct_free_f MinMax_16P0_free;
+asn_struct_print_f MinMax_16P0_print;
+asn_constr_check_f MinMax_16P0_constraint;
+ber_type_decoder_f MinMax_16P0_decode_ber;
+der_type_encoder_f MinMax_16P0_encode_der;
+xer_type_decoder_f MinMax_16P0_decode_xer;
+xer_type_encoder_f MinMax_16P0_encode_xer;
+
+/*** <<< CODE [MinMax] >>> ***/
+
+int
+MinMax_16P0_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+MinMax_16P0_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_INTEGER.free_struct;
+	td->print_struct   = asn_DEF_INTEGER.print_struct;
+	td->ber_decoder    = asn_DEF_INTEGER.ber_decoder;
+	td->der_encoder    = asn_DEF_INTEGER.der_encoder;
+	td->xer_decoder    = asn_DEF_INTEGER.xer_decoder;
+	td->xer_encoder    = asn_DEF_INTEGER.xer_encoder;
+	td->uper_decoder   = asn_DEF_INTEGER.uper_decoder;
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_INTEGER.per_constraints;
+	td->elements       = asn_DEF_INTEGER.elements;
+	td->elements_count = asn_DEF_INTEGER.elements_count;
+	td->specifics      = asn_DEF_INTEGER.specifics;
+}
+
+void
+MinMax_16P0_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+MinMax_16P0_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+MinMax_16P0_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+MinMax_16P0_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+MinMax_16P0_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+MinMax_16P0_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	MinMax_16P0_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [MinMax] >>> ***/
+
+static ber_tlv_tag_t asn_DEF_MinMax_16P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MinMax_16P0 = {
+	"MinMax",
+	"MinMax",
+	MinMax_16P0_free,
+	MinMax_16P0_print,
+	MinMax_16P0_constraint,
+	MinMax_16P0_decode_ber,
+	MinMax_16P0_encode_der,
+	MinMax_16P0_decode_xer,
+	MinMax_16P0_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_MinMax_16P0_tags_1,
+	sizeof(asn_DEF_MinMax_16P0_tags_1)
+		/sizeof(asn_DEF_MinMax_16P0_tags_1[0]), /* 1 */
+	asn_DEF_MinMax_16P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_MinMax_16P0_tags_1)
+		/sizeof(asn_DEF_MinMax_16P0_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+
+/*** <<< INCLUDES [ThreePlus] >>> ***/
+
+#include <MinMax.h>
+
+/*** <<< TYPE-DECLS [ThreePlus] >>> ***/
+
+typedef MinMax_16P0_t	 ThreePlus_t;
+
+/*** <<< FUNC-DECLS [ThreePlus] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ThreePlus;
+asn_struct_free_f ThreePlus_free;
+asn_struct_print_f ThreePlus_print;
+asn_constr_check_f ThreePlus_constraint;
+ber_type_decoder_f ThreePlus_decode_ber;
+der_type_encoder_f ThreePlus_encode_der;
+xer_type_decoder_f ThreePlus_decode_xer;
+xer_type_encoder_f ThreePlus_encode_xer;
+
+/*** <<< CODE [ThreePlus] >>> ***/
+
+int
+ThreePlus_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	const MinMax_16P0_t *st = (const MinMax_16P0_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using MinMax_16P0,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ThreePlus_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_MinMax_16P0.free_struct;
+	td->print_struct   = asn_DEF_MinMax_16P0.print_struct;
+	td->ber_decoder    = asn_DEF_MinMax_16P0.ber_decoder;
+	td->der_encoder    = asn_DEF_MinMax_16P0.der_encoder;
+	td->xer_decoder    = asn_DEF_MinMax_16P0.xer_decoder;
+	td->xer_encoder    = asn_DEF_MinMax_16P0.xer_encoder;
+	td->uper_decoder   = asn_DEF_MinMax_16P0.uper_decoder;
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_MinMax_16P0.per_constraints;
+	td->elements       = asn_DEF_MinMax_16P0.elements;
+	td->elements_count = asn_DEF_MinMax_16P0.elements_count;
+	td->specifics      = asn_DEF_MinMax_16P0.specifics;
+}
+
+void
+ThreePlus_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ThreePlus_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ThreePlus_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ThreePlus_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ThreePlus_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ThreePlus_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	ThreePlus_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [ThreePlus] >>> ***/
+
+static ber_tlv_tag_t asn_DEF_ThreePlus_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ThreePlus = {
+	"ThreePlus",
+	"ThreePlus",
+	ThreePlus_free,
+	ThreePlus_print,
+	ThreePlus_constraint,
+	ThreePlus_decode_ber,
+	ThreePlus_encode_der,
+	ThreePlus_decode_xer,
+	ThreePlus_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_ThreePlus_tags_1,
+	sizeof(asn_DEF_ThreePlus_tags_1)
+		/sizeof(asn_DEF_ThreePlus_tags_1[0]), /* 1 */
+	asn_DEF_ThreePlus_tags_1,	/* Same as above */
+	sizeof(asn_DEF_ThreePlus_tags_1)
+		/sizeof(asn_DEF_ThreePlus_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/tests/110-param-3-OK.asn1 b/tests/110-param-3-OK.asn1
new file mode 100644
index 0000000..383f16c
--- /dev/null
+++ b/tests/110-param-3-OK.asn1
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .110
+
+ModuleParameterization3
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 110 }
+	DEFINITIONS ::=
+BEGIN
+
+	Flag{Color} ::= SEQUENCE {
+		field	Color DEFAULT blue
+	}
+
+	IntegerColorFlag ::= Flag{INTEGER{ red(0), green(1), blue(5) }}
+	EnumeratedColorFlag ::= Flag{ENUMERATED{ red(3), green, blue }}
+
+END
diff --git a/tests/110-param-3-OK.asn1.-P b/tests/110-param-3-OK.asn1.-P
new file mode 100644
index 0000000..37ab930
--- /dev/null
+++ b/tests/110-param-3-OK.asn1.-P
@@ -0,0 +1,530 @@
+
+/*** <<< INCLUDES [Flag] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Flag] >>> ***/
+
+typedef enum field {
+	field_red	= 0,
+	field_green	= 1,
+	field_blue	= 5
+} e_field;
+typedef enum field {
+	field_red	= 3,
+	field_green	= 4,
+	field_blue	= 5
+} e_field;
+
+/*** <<< TYPE-DECLS [Flag] >>> ***/
+
+typedef struct Flag_16P0 {
+	INTEGER_t	*field	/* DEFAULT 5 */;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Flag_16P0_t;
+typedef struct Flag_16P1 {
+	ENUMERATED_t	*field	/* DEFAULT 5 */;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Flag_16P1_t;
+
+/*** <<< FUNC-DECLS [Flag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Flag_16P0;
+/* extern asn_TYPE_descriptor_t asn_DEF_field_7;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Flag_16P1;
+
+/*** <<< CODE [Flag] >>> ***/
+
+static int
+field_7_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_ENUMERATED.check_constraints;
+	return td->check_constraints(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+field_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_ENUMERATED.free_struct;
+	td->print_struct   = asn_DEF_ENUMERATED.print_struct;
+	td->ber_decoder    = asn_DEF_ENUMERATED.ber_decoder;
+	td->der_encoder    = asn_DEF_ENUMERATED.der_encoder;
+	td->xer_decoder    = asn_DEF_ENUMERATED.xer_decoder;
+	td->xer_encoder    = asn_DEF_ENUMERATED.xer_encoder;
+	td->uper_decoder   = asn_DEF_ENUMERATED.uper_decoder;
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_ENUMERATED.per_constraints;
+	td->elements       = asn_DEF_ENUMERATED.elements;
+	td->elements_count = asn_DEF_ENUMERATED.elements_count;
+     /* td->specifics      = asn_DEF_ENUMERATED.specifics;	// Defined explicitly */
+}
+
+static void
+field_7_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	field_7_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+static int
+field_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	field_7_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+static asn_dec_rval_t
+field_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	field_7_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+static asn_enc_rval_t
+field_7_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	field_7_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+static asn_dec_rval_t
+field_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	field_7_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+static asn_enc_rval_t
+field_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	field_7_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [Flag] >>> ***/
+
+static int asn_DFL_2_set_5(void **sptr) {
+	INTEGER_t *st = *sptr;
+	
+	if(!st) {
+		st = (*sptr = CALLOC(1, sizeof(*st)));
+		if(!st) return -1;
+	}
+	
+	/* Install default value 5 */
+	return asn_long2INTEGER(st, 5);
+}
+static asn_TYPE_member_t asn_MBR_Flag_16P0_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct Flag_16P0, field),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = &asn_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = asn_DFL_2_set_5,	/* DEFAULT 5 */
+		.name = "field"
+		},
+};
+static ber_tlv_tag_t asn_DEF_Flag_16P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_TYPE_tag2member_t asn_MAP_Flag_16P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* field at 18 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Flag_16P0_specs_1 = {
+	sizeof(struct Flag_16P0),
+	offsetof(struct Flag_16P0, _asn_ctx),
+	asn_MAP_Flag_16P0_tag2el_1,
+	1,	/* 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_Flag_16P0 = {
+	"Flag",
+	"Flag",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Flag_16P0_tags_1,
+	sizeof(asn_DEF_Flag_16P0_tags_1)
+		/sizeof(asn_DEF_Flag_16P0_tags_1[0]), /* 1 */
+	asn_DEF_Flag_16P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_Flag_16P0_tags_1)
+		/sizeof(asn_DEF_Flag_16P0_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Flag_16P0_1,
+	1,	/* Elements count */
+	&asn_SPC_Flag_16P0_specs_1	/* Additional specs */
+};
+
+static int asn_DFL_7_set_5(void **sptr) {
+	ENUMERATED_t *st = *sptr;
+	
+	if(!st) {
+		st = (*sptr = CALLOC(1, sizeof(*st)));
+		if(!st) return -1;
+	}
+	
+	/* Install default value 5 */
+	return asn_long2INTEGER(st, 5);
+}
+static asn_INTEGER_enum_map_t asn_MAP_field_value2enum_7[] = {
+	{ 3,	3,	"red" },
+	{ 4,	5,	"green" },
+	{ 5,	4,	"blue" }
+};
+static unsigned int asn_MAP_field_enum2value_7[] = {
+	2,	/* blue(5) */
+	1,	/* green(4) */
+	0	/* red(3) */
+};
+static asn_INTEGER_specifics_t asn_SPC_field_specs_7 = {
+	asn_MAP_field_value2enum_7,	/* "tag" => N; sorted by tag */
+	asn_MAP_field_enum2value_7,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1	/* Strict enumeration */
+};
+static ber_tlv_tag_t asn_DEF_field_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_field_7 = {
+	"field",
+	"field",
+	field_7_free,
+	field_7_print,
+	field_7_constraint,
+	field_7_decode_ber,
+	field_7_encode_der,
+	field_7_decode_xer,
+	field_7_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_field_tags_7,
+	sizeof(asn_DEF_field_tags_7)
+		/sizeof(asn_DEF_field_tags_7[0]), /* 1 */
+	asn_DEF_field_tags_7,	/* Same as above */
+	sizeof(asn_DEF_field_tags_7)
+		/sizeof(asn_DEF_field_tags_7[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_field_specs_7	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Flag_16P1_6[] = {
+	{ ATF_POINTER, 1, offsetof(struct Flag_16P1, field),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		.tag_mode = 0,
+		.type = &asn_DEF_field_7,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = asn_DFL_7_set_5,	/* DEFAULT 5 */
+		.name = "field"
+		},
+};
+static ber_tlv_tag_t asn_DEF_Flag_16P1_tags_6[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_TYPE_tag2member_t asn_MAP_Flag_16P1_tag2el_6[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* field at 19 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Flag_16P1_specs_6 = {
+	sizeof(struct Flag_16P1),
+	offsetof(struct Flag_16P1, _asn_ctx),
+	asn_MAP_Flag_16P1_tag2el_6,
+	1,	/* 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_Flag_16P1 = {
+	"Flag",
+	"Flag",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Flag_16P1_tags_6,
+	sizeof(asn_DEF_Flag_16P1_tags_6)
+		/sizeof(asn_DEF_Flag_16P1_tags_6[0]), /* 1 */
+	asn_DEF_Flag_16P1_tags_6,	/* Same as above */
+	sizeof(asn_DEF_Flag_16P1_tags_6)
+		/sizeof(asn_DEF_Flag_16P1_tags_6[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Flag_16P1_6,
+	1,	/* Elements count */
+	&asn_SPC_Flag_16P1_specs_6	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IntegerColorFlag] >>> ***/
+
+#include <Flag.h>
+
+/*** <<< TYPE-DECLS [IntegerColorFlag] >>> ***/
+
+typedef Flag_16P0_t	 IntegerColorFlag_t;
+
+/*** <<< FUNC-DECLS [IntegerColorFlag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag;
+asn_struct_free_f IntegerColorFlag_free;
+asn_struct_print_f IntegerColorFlag_print;
+asn_constr_check_f IntegerColorFlag_constraint;
+ber_type_decoder_f IntegerColorFlag_decode_ber;
+der_type_encoder_f IntegerColorFlag_encode_der;
+xer_type_decoder_f IntegerColorFlag_decode_xer;
+xer_type_encoder_f IntegerColorFlag_encode_xer;
+
+/*** <<< CODE [IntegerColorFlag] >>> ***/
+
+int
+IntegerColorFlag_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_Flag_16P0.check_constraints;
+	return td->check_constraints(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using Flag_16P0,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+IntegerColorFlag_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_Flag_16P0.free_struct;
+	td->print_struct   = asn_DEF_Flag_16P0.print_struct;
+	td->ber_decoder    = asn_DEF_Flag_16P0.ber_decoder;
+	td->der_encoder    = asn_DEF_Flag_16P0.der_encoder;
+	td->xer_decoder    = asn_DEF_Flag_16P0.xer_decoder;
+	td->xer_encoder    = asn_DEF_Flag_16P0.xer_encoder;
+	td->uper_decoder   = asn_DEF_Flag_16P0.uper_decoder;
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_Flag_16P0.per_constraints;
+	td->elements       = asn_DEF_Flag_16P0.elements;
+	td->elements_count = asn_DEF_Flag_16P0.elements_count;
+	td->specifics      = asn_DEF_Flag_16P0.specifics;
+}
+
+void
+IntegerColorFlag_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+IntegerColorFlag_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+IntegerColorFlag_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+IntegerColorFlag_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+IntegerColorFlag_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+IntegerColorFlag_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	IntegerColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [IntegerColorFlag] >>> ***/
+
+static ber_tlv_tag_t asn_DEF_IntegerColorFlag_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag = {
+	"IntegerColorFlag",
+	"IntegerColorFlag",
+	IntegerColorFlag_free,
+	IntegerColorFlag_print,
+	IntegerColorFlag_constraint,
+	IntegerColorFlag_decode_ber,
+	IntegerColorFlag_encode_der,
+	IntegerColorFlag_decode_xer,
+	IntegerColorFlag_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_IntegerColorFlag_tags_1,
+	sizeof(asn_DEF_IntegerColorFlag_tags_1)
+		/sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
+	asn_DEF_IntegerColorFlag_tags_1,	/* Same as above */
+	sizeof(asn_DEF_IntegerColorFlag_tags_1)
+		/sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	0, 0,	/* Defined elsewhere */
+	0	/* No specifics */
+};
+
+
+/*** <<< INCLUDES [EnumeratedColorFlag] >>> ***/
+
+#include <Flag.h>
+
+/*** <<< TYPE-DECLS [EnumeratedColorFlag] >>> ***/
+
+typedef Flag_16P1_t	 EnumeratedColorFlag_t;
+
+/*** <<< FUNC-DECLS [EnumeratedColorFlag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag;
+asn_struct_free_f EnumeratedColorFlag_free;
+asn_struct_print_f EnumeratedColorFlag_print;
+asn_constr_check_f EnumeratedColorFlag_constraint;
+ber_type_decoder_f EnumeratedColorFlag_decode_ber;
+der_type_encoder_f EnumeratedColorFlag_encode_der;
+xer_type_decoder_f EnumeratedColorFlag_decode_xer;
+xer_type_encoder_f EnumeratedColorFlag_encode_xer;
+
+/*** <<< CODE [EnumeratedColorFlag] >>> ***/
+
+int
+EnumeratedColorFlag_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_Flag_16P1.check_constraints;
+	return td->check_constraints(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using Flag_16P1,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+EnumeratedColorFlag_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_Flag_16P1.free_struct;
+	td->print_struct   = asn_DEF_Flag_16P1.print_struct;
+	td->ber_decoder    = asn_DEF_Flag_16P1.ber_decoder;
+	td->der_encoder    = asn_DEF_Flag_16P1.der_encoder;
+	td->xer_decoder    = asn_DEF_Flag_16P1.xer_decoder;
+	td->xer_encoder    = asn_DEF_Flag_16P1.xer_encoder;
+	td->uper_decoder   = asn_DEF_Flag_16P1.uper_decoder;
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_Flag_16P1.per_constraints;
+	td->elements       = asn_DEF_Flag_16P1.elements;
+	td->elements_count = asn_DEF_Flag_16P1.elements_count;
+	td->specifics      = asn_DEF_Flag_16P1.specifics;
+}
+
+void
+EnumeratedColorFlag_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+EnumeratedColorFlag_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+EnumeratedColorFlag_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+EnumeratedColorFlag_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+EnumeratedColorFlag_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+EnumeratedColorFlag_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	EnumeratedColorFlag_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [EnumeratedColorFlag] >>> ***/
+
+static ber_tlv_tag_t asn_DEF_EnumeratedColorFlag_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag = {
+	"EnumeratedColorFlag",
+	"EnumeratedColorFlag",
+	EnumeratedColorFlag_free,
+	EnumeratedColorFlag_print,
+	EnumeratedColorFlag_constraint,
+	EnumeratedColorFlag_decode_ber,
+	EnumeratedColorFlag_encode_der,
+	EnumeratedColorFlag_decode_xer,
+	EnumeratedColorFlag_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_EnumeratedColorFlag_tags_1,
+	sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
+		/sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
+	asn_DEF_EnumeratedColorFlag_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
+		/sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	0, 0,	/* Defined elsewhere */
+	0	/* No specifics */
+};
+
diff --git a/tests/111-param-4-SE.asn1 b/tests/111-param-4-SE.asn1
new file mode 100644
index 0000000..4c542b8
--- /dev/null
+++ b/tests/111-param-4-SE.asn1
@@ -0,0 +1,21 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .111
+
+ModuleParameterization4
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 111 }
+	DEFINITIONS ::=
+BEGIN
+
+	Flag{Color} ::= SEQUENCE {
+		field	Color DEFAULT cyan
+	}
+
+	IntegerColorFlag ::= Flag{INTEGER{ red(0), green(1), blue(5) }}
+	EnumeratedColorFlag ::= Flag{ENUMERATED{ red(3), green, blue }}
+
+END
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index 4c41f53..7e752af 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -604,7 +604,7 @@
 	/*
 	 * Enumeration is extensible
 	 */
-} accept_as_e;
+} e_accept_as;
 
 /*** <<< TYPE-DECLS [ActionItem] >>> ***/
 
diff --git a/tests/50-constraint-OK.asn1.-P b/tests/50-constraint-OK.asn1.-P
index 18ed940..6426a93 100644
--- a/tests/50-constraint-OK.asn1.-P
+++ b/tests/50-constraint-OK.asn1.-P
@@ -3484,7 +3484,7 @@
 	 * Enumeration is extensible
 	 */
 	enum_c_three	= 3
-} enum_c_e;
+} e_enum_c;
 
 /*** <<< TYPE-DECLS [Sequence] >>> ***/
 
@@ -3941,7 +3941,7 @@
 typedef enum Enum0 {
 	Enum0_one	= 0,
 	Enum0_two	= 1
-} Enum0_e;
+} e_Enum0;
 
 /*** <<< TYPE-DECLS [Enum0] >>> ***/
 
@@ -4086,7 +4086,7 @@
 typedef enum Enum1 {
 	Enum1_one	= 0,
 	Enum1_two	= 1
-} Enum1_e;
+} e_Enum1;
 
 /*** <<< TYPE-DECLS [Enum1] >>> ***/
 
diff --git a/tests/50-constraint-OK.asn1.-Pgen-PER b/tests/50-constraint-OK.asn1.-Pgen-PER
index a5c37ad..5092b01 100644
--- a/tests/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/50-constraint-OK.asn1.-Pgen-PER
@@ -3744,7 +3744,7 @@
 	 * Enumeration is extensible
 	 */
 	enum_c_three	= 3
-} enum_c_e;
+} e_enum_c;
 
 /*** <<< TYPE-DECLS [Sequence] >>> ***/
 
@@ -4234,7 +4234,7 @@
 typedef enum Enum0 {
 	Enum0_one	= 0,
 	Enum0_two	= 1
-} Enum0_e;
+} e_Enum0;
 
 /*** <<< TYPE-DECLS [Enum0] >>> ***/
 
@@ -4391,7 +4391,7 @@
 typedef enum Enum1 {
 	Enum1_one	= 0,
 	Enum1_two	= 1
-} Enum1_e;
+} e_Enum1;
 
 /*** <<< TYPE-DECLS [Enum1] >>> ***/
 
diff --git a/tests/66-ref-simple-OK.asn1.-P b/tests/66-ref-simple-OK.asn1.-P
index 1e6f4ed..b424e47 100644
--- a/tests/66-ref-simple-OK.asn1.-P
+++ b/tests/66-ref-simple-OK.asn1.-P
@@ -74,7 +74,7 @@
 	SimpleType_one	= 0,
 	SimpleType_two	= 1,
 	SimpleType_three	= 2
-} SimpleType_e;
+} e_SimpleType;
 
 /*** <<< TYPE-DECLS [SimpleType] >>> ***/
 
diff --git a/tests/70-xer-test-OK.asn1.-P b/tests/70-xer-test-OK.asn1.-P
index 45d6a69..b3d2ff9 100644
--- a/tests/70-xer-test-OK.asn1.-P
+++ b/tests/70-xer-test-OK.asn1.-P
@@ -499,7 +499,7 @@
 typedef enum Enum {
 	enum_b	= 0,
 	enum_a	= 1
-} enum_e;
+} e_enum;
 
 /*** <<< TYPE-DECLS [ExtensibleSet] >>> ***/
 
@@ -1037,7 +1037,7 @@
 typedef enum Member {
 	Member_one	= 0,
 	Member_oneMore	= 1
-} Member_e;
+} e_Member;
 
 /*** <<< TYPE-DECLS [SetOfEnums] >>> ***/
 
@@ -1357,7 +1357,7 @@
 typedef enum name {
 	name_one	= 0,
 	name_oneMore	= 1
-} name_e;
+} e_name;
 
 /*** <<< TYPE-DECLS [NamedSetOfEnums] >>> ***/
 
diff --git a/tests/72-same-names-OK.asn1.-P b/tests/72-same-names-OK.asn1.-P
index e4d210c..4b804ea 100644
--- a/tests/72-same-names-OK.asn1.-P
+++ b/tests/72-same-names-OK.asn1.-P
@@ -352,7 +352,7 @@
 } Type2_PR;
 typedef enum a {
 	a_one	= 0
-} a_e;
+} e_a;
 
 /*
  * Method of determining the components presence
@@ -362,7 +362,7 @@
 } two_name_PR;
 typedef enum a {
 	a_one	= 0
-} a_e;
+} e_a;
 
 /*** <<< TYPE-DECLS [Type2] >>> ***/
 
diff --git a/tests/73-circular-OK.asn1.-P b/tests/73-circular-OK.asn1.-P
index 4e29c9b..5fe6fc3 100644
--- a/tests/73-circular-OK.asn1.-P
+++ b/tests/73-circular-OK.asn1.-P
@@ -703,7 +703,7 @@
 typedef enum EnumType {
 	EnumType_one	= 0,
 	EnumType_two	= 1
-} EnumType_e;
+} e_EnumType;
 
 /*** <<< TYPE-DECLS [EnumType] >>> ***/
 
diff --git a/tests/84-param-tags-OK.asn1 b/tests/84-param-tags-OK.asn1
index 3cedc41..cddf846 100644
--- a/tests/84-param-tags-OK.asn1
+++ b/tests/84-param-tags-OK.asn1
@@ -6,7 +6,7 @@
 -- .84 1
 -- .84 2
 
-ModuleTestParametrizationTags1
+ModuleTestParameterizationTags1
 	{ iso org(3) dod(6) internet(1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 84 1 }
 	DEFINITIONS ::=
@@ -23,7 +23,7 @@
 
 END
 
-ModuleTestParametrizationTagsAuto2
+ModuleTestParameterizationTagsAuto2
 	{ iso org(3) dod(6) internet(1) private(4) enterprise(1)
 		spelio(9363) software(1) asn1c(5) test(1) 84 2 }
 	DEFINITIONS AUTOMATIC TAGS ::=
diff --git a/tests/84-param-tags-OK.asn1.-EF b/tests/84-param-tags-OK.asn1.-EF
index b5889ae..a307434 100644
--- a/tests/84-param-tags-OK.asn1.-EF
+++ b/tests/84-param-tags-OK.asn1.-EF
@@ -1,4 +1,4 @@
-ModuleTestParametrizationTags1 { iso org(3) dod(6) internet(1) private(4)
+ModuleTestParameterizationTags1 { iso org(3) dod(6) internet(1) private(4)
 	enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 84 1 }
 DEFINITIONS ::=
 BEGIN
@@ -14,7 +14,7 @@
 
 END
 
-ModuleTestParametrizationTagsAuto2 { iso org(3) dod(6) internet(1) private(4)
+ModuleTestParameterizationTagsAuto2 { iso org(3) dod(6) internet(1) private(4)
 	enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 84 2 }
 DEFINITIONS AUTOMATIC TAGS ::=
 BEGIN
diff --git a/tests/88-integer-enum-OK.asn1.-P b/tests/88-integer-enum-OK.asn1.-P
index 6b73d31..bbd437a 100644
--- a/tests/88-integer-enum-OK.asn1.-P
+++ b/tests/88-integer-enum-OK.asn1.-P
@@ -8,7 +8,7 @@
 typedef enum T {
 	T_a	= 1,
 	T_b	= 2
-} T_e;
+} e_T;
 
 /*** <<< TYPE-DECLS [T] >>> ***/
 
diff --git a/tests/89-bit-string-enum-OK.asn1.-P b/tests/89-bit-string-enum-OK.asn1.-P
index 0514dad..4af0913 100644
--- a/tests/89-bit-string-enum-OK.asn1.-P
+++ b/tests/89-bit-string-enum-OK.asn1.-P
@@ -13,7 +13,7 @@
 typedef enum bs {
 	bs_a	= 1,
 	bs_b	= 2
-} bs_e;
+} e_bs;
 
 /*** <<< TYPE-DECLS [T] >>> ***/
 
diff --git a/tests/89-bit-string-enum-OK.asn1.-Pfcompound-names b/tests/89-bit-string-enum-OK.asn1.-Pfcompound-names
index dbea3a3..259dd5c 100644
--- a/tests/89-bit-string-enum-OK.asn1.-Pfcompound-names
+++ b/tests/89-bit-string-enum-OK.asn1.-Pfcompound-names
@@ -13,7 +13,7 @@
 typedef enum T__bs {
 	T__bs_a	= 1,
 	T__bs_b	= 2
-} T__bs_e;
+} e_T__bs;
 
 /*** <<< TYPE-DECLS [T] >>> ***/
 
diff --git a/tests/90-cond-int-type-OK.asn1.-P b/tests/90-cond-int-type-OK.asn1.-P
index 9e03bc2..aae3b12 100644
--- a/tests/90-cond-int-type-OK.asn1.-P
+++ b/tests/90-cond-int-type-OK.asn1.-P
@@ -2288,7 +2288,7 @@
 typedef enum CN_IntegerEnumerated1 {
 	CN_IntegerEnumerated1_a	= 1,
 	CN_IntegerEnumerated1_b	= 2
-} CN_IntegerEnumerated1_e;
+} e_CN_IntegerEnumerated1;
 
 /*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
 
@@ -2418,7 +2418,7 @@
 typedef enum NO_IntegerEnumerated2 {
 	NO_IntegerEnumerated2_a	= 1,
 	NO_IntegerEnumerated2_b	= 3000000000
-} NO_IntegerEnumerated2_e;
+} e_NO_IntegerEnumerated2;
 
 /*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/
 
diff --git a/tests/90-cond-int-type-OK.asn1.-Pfnative-types b/tests/90-cond-int-type-OK.asn1.-Pfnative-types
index 240c70b..765d284 100644
--- a/tests/90-cond-int-type-OK.asn1.-Pfnative-types
+++ b/tests/90-cond-int-type-OK.asn1.-Pfnative-types
@@ -2269,7 +2269,7 @@
 typedef enum CN_IntegerEnumerated1 {
 	CN_IntegerEnumerated1_a	= 1,
 	CN_IntegerEnumerated1_b	= 2
-} CN_IntegerEnumerated1_e;
+} e_CN_IntegerEnumerated1;
 
 /*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
 
@@ -2399,7 +2399,7 @@
 typedef enum NO_IntegerEnumerated2 {
 	NO_IntegerEnumerated2_a	= 1,
 	NO_IntegerEnumerated2_b	= 3000000000
-} NO_IntegerEnumerated2_e;
+} e_NO_IntegerEnumerated2;
 
 /*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/
 
diff --git a/tests/90-cond-int-type-OK.asn1.-Pgen-PER b/tests/90-cond-int-type-OK.asn1.-Pgen-PER
index e0951e4..88d7b33 100644
--- a/tests/90-cond-int-type-OK.asn1.-Pgen-PER
+++ b/tests/90-cond-int-type-OK.asn1.-Pgen-PER
@@ -2476,7 +2476,7 @@
 typedef enum CN_IntegerEnumerated1 {
 	CN_IntegerEnumerated1_a	= 1,
 	CN_IntegerEnumerated1_b	= 2
-} CN_IntegerEnumerated1_e;
+} e_CN_IntegerEnumerated1;
 
 /*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
 
@@ -2614,7 +2614,7 @@
 typedef enum NO_IntegerEnumerated2 {
 	NO_IntegerEnumerated2_a	= 1,
 	NO_IntegerEnumerated2_b	= 3000000000
-} NO_IntegerEnumerated2_e;
+} e_NO_IntegerEnumerated2;
 
 /*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/