XER decoders


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@546 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/tests/46-redefine-OK.asn1.-PR b/tests/46-redefine-OK.asn1.-PR
index 4650b51..5ba6bcc 100644
--- a/tests/46-redefine-OK.asn1.-PR
+++ b/tests/46-redefine-OK.asn1.-PR
@@ -102,6 +102,7 @@
 asn_constr_check_f T_constraint;
 ber_type_decoder_f T_decode_ber;
 der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
 xer_type_encoder_f T_encode_xer;
 
 /*** <<< CODE [T] >>> ***/
@@ -160,6 +161,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -183,7 +191,7 @@
 	T_constraint,
 	T_decode_ber,
 	T_encode_der,
-	0,				/* Not implemented yet */
+	T_decode_xer,
 	T_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags,
diff --git a/tests/50-constraint-OK.asn1.-P b/tests/50-constraint-OK.asn1.-P
index 6f4dac1..2700676 100644
--- a/tests/50-constraint-OK.asn1.-P
+++ b/tests/50-constraint-OK.asn1.-P
@@ -35,6 +35,7 @@
 asn_constr_check_f Int2_constraint;
 ber_type_decoder_f Int2_decode_ber;
 der_type_encoder_f Int2_encode_der;
+xer_type_decoder_f Int2_decode_xer;
 xer_type_encoder_f Int2_encode_xer;
 
 /*** <<< CODE [Int2] >>> ***/
@@ -112,6 +113,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -134,7 +142,7 @@
 	Int2_constraint,
 	Int2_decode_ber,
 	Int2_encode_der,
-	0,				/* Not implemented yet */
+	Int2_decode_xer,
 	Int2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int2_tags,
@@ -165,6 +173,7 @@
 asn_constr_check_f Int3_constraint;
 ber_type_decoder_f Int3_decode_ber;
 der_type_encoder_f Int3_encode_der;
+xer_type_decoder_f Int3_decode_xer;
 xer_type_encoder_f Int3_encode_xer;
 
 /*** <<< CODE [Int3] >>> ***/
@@ -246,6 +255,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -268,7 +284,7 @@
 	Int3_constraint,
 	Int3_decode_ber,
 	Int3_encode_der,
-	0,				/* Not implemented yet */
+	Int3_decode_xer,
 	Int3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int3_tags,
@@ -299,6 +315,7 @@
 asn_constr_check_f Int4_constraint;
 ber_type_decoder_f Int4_decode_ber;
 der_type_encoder_f Int4_encode_der;
+xer_type_decoder_f Int4_decode_xer;
 xer_type_encoder_f Int4_encode_xer;
 
 /*** <<< CODE [Int4] >>> ***/
@@ -380,6 +397,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -402,7 +426,7 @@
 	Int4_constraint,
 	Int4_decode_ber,
 	Int4_encode_der,
-	0,				/* Not implemented yet */
+	Int4_decode_xer,
 	Int4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int4_tags,
@@ -433,6 +457,7 @@
 asn_constr_check_f Int5_constraint;
 ber_type_decoder_f Int5_decode_ber;
 der_type_encoder_f Int5_encode_der;
+xer_type_decoder_f Int5_decode_xer;
 xer_type_encoder_f Int5_encode_xer;
 
 /*** <<< CODE [Int5] >>> ***/
@@ -514,6 +539,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int5_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int5_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -536,7 +568,7 @@
 	Int5_constraint,
 	Int5_decode_ber,
 	Int5_encode_der,
-	0,				/* Not implemented yet */
+	Int5_decode_xer,
 	Int5_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int5_tags,
@@ -567,6 +599,7 @@
 asn_constr_check_f ExtensibleExtensions_constraint;
 ber_type_decoder_f ExtensibleExtensions_decode_ber;
 der_type_encoder_f ExtensibleExtensions_encode_der;
+xer_type_decoder_f ExtensibleExtensions_decode_xer;
 xer_type_encoder_f ExtensibleExtensions_encode_xer;
 
 /*** <<< CODE [ExtensibleExtensions] >>> ***/
@@ -648,6 +681,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+ExtensibleExtensions_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	ExtensibleExtensions_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 ExtensibleExtensions_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -670,7 +710,7 @@
 	ExtensibleExtensions_constraint,
 	ExtensibleExtensions_decode_ber,
 	ExtensibleExtensions_encode_der,
-	0,				/* Not implemented yet */
+	ExtensibleExtensions_decode_xer,
 	ExtensibleExtensions_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_ExtensibleExtensions_tags,
@@ -720,6 +760,7 @@
 asn_constr_check_f Str2_constraint;
 ber_type_decoder_f Str2_decode_ber;
 der_type_encoder_f Str2_encode_der;
+xer_type_decoder_f Str2_decode_xer;
 xer_type_encoder_f Str2_encode_xer;
 
 /*** <<< CTABLES [Str2] >>> ***/
@@ -813,6 +854,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -835,7 +883,7 @@
 	Str2_constraint,
 	Str2_decode_ber,
 	Str2_encode_der,
-	0,				/* Not implemented yet */
+	Str2_decode_xer,
 	Str2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str2_tags,
@@ -866,6 +914,7 @@
 asn_constr_check_f Str3_constraint;
 ber_type_decoder_f Str3_decode_ber;
 der_type_encoder_f Str3_encode_der;
+xer_type_decoder_f Str3_decode_xer;
 xer_type_encoder_f Str3_encode_xer;
 
 /*** <<< CTABLES [Str3] >>> ***/
@@ -970,6 +1019,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -992,7 +1048,7 @@
 	Str3_constraint,
 	Str3_decode_ber,
 	Str3_encode_der,
-	0,				/* Not implemented yet */
+	Str3_decode_xer,
 	Str3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str3_tags,
@@ -1023,6 +1079,7 @@
 asn_constr_check_f Str4_constraint;
 ber_type_decoder_f Str4_decode_ber;
 der_type_encoder_f Str4_encode_der;
+xer_type_decoder_f Str4_decode_xer;
 xer_type_encoder_f Str4_encode_xer;
 
 /*** <<< CTABLES [Str4] >>> ***/
@@ -1113,6 +1170,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1135,7 +1199,7 @@
 	Str4_constraint,
 	Str4_decode_ber,
 	Str4_encode_der,
-	0,				/* Not implemented yet */
+	Str4_decode_xer,
 	Str4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str4_tags,
@@ -1166,6 +1230,7 @@
 asn_constr_check_f PER_Visible_constraint;
 ber_type_decoder_f PER_Visible_decode_ber;
 der_type_encoder_f PER_Visible_encode_der;
+xer_type_decoder_f PER_Visible_decode_xer;
 xer_type_encoder_f PER_Visible_encode_xer;
 
 /*** <<< CTABLES [PER-Visible] >>> ***/
@@ -1256,6 +1321,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+PER_Visible_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	PER_Visible_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 PER_Visible_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1278,7 +1350,7 @@
 	PER_Visible_constraint,
 	PER_Visible_decode_ber,
 	PER_Visible_encode_der,
-	0,				/* Not implemented yet */
+	PER_Visible_decode_xer,
 	PER_Visible_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_tags,
@@ -1309,6 +1381,7 @@
 asn_constr_check_f PER_Visible_2_constraint;
 ber_type_decoder_f PER_Visible_2_decode_ber;
 der_type_encoder_f PER_Visible_2_encode_der;
+xer_type_decoder_f PER_Visible_2_decode_xer;
 xer_type_encoder_f PER_Visible_2_encode_xer;
 
 /*** <<< CTABLES [PER-Visible-2] >>> ***/
@@ -1399,6 +1472,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+PER_Visible_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	PER_Visible_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 PER_Visible_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1421,7 +1501,7 @@
 	PER_Visible_2_constraint,
 	PER_Visible_2_decode_ber,
 	PER_Visible_2_encode_der,
-	0,				/* Not implemented yet */
+	PER_Visible_2_decode_xer,
 	PER_Visible_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_2_tags,
@@ -1452,6 +1532,7 @@
 asn_constr_check_f Not_PER_Visible_1_constraint;
 ber_type_decoder_f Not_PER_Visible_1_decode_ber;
 der_type_encoder_f Not_PER_Visible_1_encode_der;
+xer_type_decoder_f Not_PER_Visible_1_decode_xer;
 xer_type_encoder_f Not_PER_Visible_1_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-1] >>> ***/
@@ -1542,6 +1623,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_1_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1564,7 +1652,7 @@
 	Not_PER_Visible_1_constraint,
 	Not_PER_Visible_1_decode_ber,
 	Not_PER_Visible_1_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_1_decode_xer,
 	Not_PER_Visible_1_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_1_tags,
@@ -1595,6 +1683,7 @@
 asn_constr_check_f Not_PER_Visible_2_constraint;
 ber_type_decoder_f Not_PER_Visible_2_decode_ber;
 der_type_encoder_f Not_PER_Visible_2_encode_der;
+xer_type_decoder_f Not_PER_Visible_2_decode_xer;
 xer_type_encoder_f Not_PER_Visible_2_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-2] >>> ***/
@@ -1685,6 +1774,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1707,7 +1803,7 @@
 	Not_PER_Visible_2_constraint,
 	Not_PER_Visible_2_decode_ber,
 	Not_PER_Visible_2_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_2_decode_xer,
 	Not_PER_Visible_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_2_tags,
@@ -1738,6 +1834,7 @@
 asn_constr_check_f Not_PER_Visible_3_constraint;
 ber_type_decoder_f Not_PER_Visible_3_decode_ber;
 der_type_encoder_f Not_PER_Visible_3_encode_der;
+xer_type_decoder_f Not_PER_Visible_3_decode_xer;
 xer_type_encoder_f Not_PER_Visible_3_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-3] >>> ***/
@@ -1828,6 +1925,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1850,7 +1954,7 @@
 	Not_PER_Visible_3_constraint,
 	Not_PER_Visible_3_decode_ber,
 	Not_PER_Visible_3_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_3_decode_xer,
 	Not_PER_Visible_3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_3_tags,
@@ -1881,6 +1985,7 @@
 asn_constr_check_f SIZE_but_not_FROM_constraint;
 ber_type_decoder_f SIZE_but_not_FROM_decode_ber;
 der_type_encoder_f SIZE_but_not_FROM_encode_der;
+xer_type_decoder_f SIZE_but_not_FROM_decode_xer;
 xer_type_encoder_f SIZE_but_not_FROM_encode_xer;
 
 /*** <<< CTABLES [SIZE-but-not-FROM] >>> ***/
@@ -1974,6 +2079,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+SIZE_but_not_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	SIZE_but_not_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 SIZE_but_not_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1996,7 +2108,7 @@
 	SIZE_but_not_FROM_constraint,
 	SIZE_but_not_FROM_decode_ber,
 	SIZE_but_not_FROM_encode_der,
-	0,				/* Not implemented yet */
+	SIZE_but_not_FROM_decode_xer,
 	SIZE_but_not_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_but_not_FROM_tags,
@@ -2027,6 +2139,7 @@
 asn_constr_check_f SIZE_and_FROM_constraint;
 ber_type_decoder_f SIZE_and_FROM_decode_ber;
 der_type_encoder_f SIZE_and_FROM_encode_der;
+xer_type_decoder_f SIZE_and_FROM_decode_xer;
 xer_type_encoder_f SIZE_and_FROM_encode_xer;
 
 /*** <<< CTABLES [SIZE-and-FROM] >>> ***/
@@ -2120,6 +2233,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+SIZE_and_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	SIZE_and_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 SIZE_and_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2142,7 +2262,7 @@
 	SIZE_and_FROM_constraint,
 	SIZE_and_FROM_decode_ber,
 	SIZE_and_FROM_encode_der,
-	0,				/* Not implemented yet */
+	SIZE_and_FROM_decode_xer,
 	SIZE_and_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_and_FROM_tags,
@@ -2173,6 +2293,7 @@
 asn_constr_check_f Neither_SIZE_nor_FROM_constraint;
 ber_type_decoder_f Neither_SIZE_nor_FROM_decode_ber;
 der_type_encoder_f Neither_SIZE_nor_FROM_encode_der;
+xer_type_decoder_f Neither_SIZE_nor_FROM_decode_xer;
 xer_type_encoder_f Neither_SIZE_nor_FROM_encode_xer;
 
 /*** <<< CTABLES [Neither-SIZE-nor-FROM] >>> ***/
@@ -2263,6 +2384,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Neither_SIZE_nor_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Neither_SIZE_nor_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Neither_SIZE_nor_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2285,7 +2413,7 @@
 	Neither_SIZE_nor_FROM_constraint,
 	Neither_SIZE_nor_FROM_decode_ber,
 	Neither_SIZE_nor_FROM_encode_der,
-	0,				/* Not implemented yet */
+	Neither_SIZE_nor_FROM_decode_xer,
 	Neither_SIZE_nor_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Neither_SIZE_nor_FROM_tags,
@@ -2316,6 +2444,7 @@
 asn_constr_check_f Utf8_4_constraint;
 ber_type_decoder_f Utf8_4_decode_ber;
 der_type_encoder_f Utf8_4_encode_der;
+xer_type_decoder_f Utf8_4_decode_xer;
 xer_type_encoder_f Utf8_4_encode_xer;
 
 /*** <<< CTABLES [Utf8-4] >>> ***/
@@ -2400,6 +2529,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2422,7 +2558,7 @@
 	Utf8_4_constraint,
 	Utf8_4_decode_ber,
 	Utf8_4_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_4_decode_xer,
 	Utf8_4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_4_tags,
@@ -2453,6 +2589,7 @@
 asn_constr_check_f Utf8_3_constraint;
 ber_type_decoder_f Utf8_3_decode_ber;
 der_type_encoder_f Utf8_3_encode_der;
+xer_type_decoder_f Utf8_3_decode_xer;
 xer_type_encoder_f Utf8_3_encode_xer;
 
 /*** <<< CTABLES [Utf8-3] >>> ***/
@@ -2565,6 +2702,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2587,7 +2731,7 @@
 	Utf8_3_constraint,
 	Utf8_3_decode_ber,
 	Utf8_3_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_3_decode_xer,
 	Utf8_3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_3_tags,
@@ -2618,6 +2762,7 @@
 asn_constr_check_f Utf8_2_constraint;
 ber_type_decoder_f Utf8_2_decode_ber;
 der_type_encoder_f Utf8_2_encode_der;
+xer_type_decoder_f Utf8_2_decode_xer;
 xer_type_encoder_f Utf8_2_encode_xer;
 
 /*** <<< CODE [Utf8-2] >>> ***/
@@ -2700,6 +2845,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2722,7 +2874,7 @@
 	Utf8_2_constraint,
 	Utf8_2_decode_ber,
 	Utf8_2_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_2_decode_xer,
 	Utf8_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_2_tags,
@@ -2791,6 +2943,7 @@
 asn_constr_check_f Identifier_constraint;
 ber_type_decoder_f Identifier_decode_ber;
 der_type_encoder_f Identifier_encode_der;
+xer_type_decoder_f Identifier_decode_xer;
 xer_type_encoder_f Identifier_encode_xer;
 
 /*** <<< CTABLES [Identifier] >>> ***/
@@ -2896,6 +3049,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Identifier_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Identifier_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Identifier_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2918,7 +3078,7 @@
 	Identifier_constraint,
 	Identifier_decode_ber,
 	Identifier_encode_der,
-	0,				/* Not implemented yet */
+	Identifier_decode_xer,
 	Identifier_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Identifier_tags,
diff --git a/tests/65-multi-tag-OK.asn1.-P b/tests/65-multi-tag-OK.asn1.-P
index 4ffc4b2..5319d50 100644
--- a/tests/65-multi-tag-OK.asn1.-P
+++ b/tests/65-multi-tag-OK.asn1.-P
@@ -16,6 +16,7 @@
 asn_constr_check_f T1_constraint;
 ber_type_decoder_f T1_decode_ber;
 der_type_encoder_f T1_encode_der;
+xer_type_decoder_f T1_decode_xer;
 xer_type_encoder_f T1_encode_xer;
 
 /*** <<< CODE [T1] >>> ***/
@@ -74,6 +75,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T1_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -107,7 +115,7 @@
 	T1_constraint,
 	T1_decode_ber,
 	T1_encode_der,
-	0,				/* Not implemented yet */
+	T1_decode_xer,
 	T1_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T1_tags,
@@ -138,6 +146,7 @@
 asn_constr_check_f T2_constraint;
 ber_type_decoder_f T2_decode_ber;
 der_type_encoder_f T2_encode_der;
+xer_type_decoder_f T2_decode_xer;
 xer_type_encoder_f T2_encode_xer;
 
 /*** <<< CODE [T2] >>> ***/
@@ -196,6 +205,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -227,7 +243,7 @@
 	T2_constraint,
 	T2_decode_ber,
 	T2_encode_der,
-	0,				/* Not implemented yet */
+	T2_decode_xer,
 	T2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T2_tags,
@@ -258,6 +274,7 @@
 asn_constr_check_f T3_constraint;
 ber_type_decoder_f T3_decode_ber;
 der_type_encoder_f T3_encode_der;
+xer_type_decoder_f T3_decode_xer;
 xer_type_encoder_f T3_encode_xer;
 
 /*** <<< CODE [T3] >>> ***/
@@ -316,6 +333,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -345,7 +369,7 @@
 	T3_constraint,
 	T3_decode_ber,
 	T3_encode_der,
-	0,				/* Not implemented yet */
+	T3_decode_xer,
 	T3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T3_tags,
@@ -376,6 +400,7 @@
 asn_constr_check_f T4_constraint;
 ber_type_decoder_f T4_decode_ber;
 der_type_encoder_f T4_encode_der;
+xer_type_decoder_f T4_decode_xer;
 xer_type_encoder_f T4_encode_xer;
 
 /*** <<< CODE [T4] >>> ***/
@@ -434,6 +459,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -458,7 +490,7 @@
 	T4_constraint,
 	T4_decode_ber,
 	T4_encode_der,
-	0,				/* Not implemented yet */
+	T4_decode_xer,
 	T4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T4_tags,
@@ -489,6 +521,7 @@
 asn_constr_check_f T5_constraint;
 ber_type_decoder_f T5_decode_ber;
 der_type_encoder_f T5_encode_der;
+xer_type_decoder_f T5_decode_xer;
 xer_type_encoder_f T5_encode_xer;
 
 /*** <<< CODE [T5] >>> ***/
@@ -547,6 +580,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T5_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T5_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -570,7 +610,7 @@
 	T5_constraint,
 	T5_decode_ber,
 	T5_encode_der,
-	0,				/* Not implemented yet */
+	T5_decode_xer,
 	T5_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T5_tags,
@@ -620,6 +660,7 @@
 asn_constr_check_f T_constraint;
 ber_type_decoder_f T_decode_ber;
 der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
 xer_type_encoder_f T_encode_xer;
 
 /*** <<< CODE [T] >>> ***/
@@ -678,6 +719,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -702,7 +750,7 @@
 	T_constraint,
 	T_decode_ber,
 	T_encode_der,
-	0,				/* Not implemented yet */
+	T_decode_xer,
 	T_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags,
diff --git a/tests/65-multi-tag-OK.asn1.-Pfnative-types b/tests/65-multi-tag-OK.asn1.-Pfnative-types
index 796962a..eb2f1c4 100644
--- a/tests/65-multi-tag-OK.asn1.-Pfnative-types
+++ b/tests/65-multi-tag-OK.asn1.-Pfnative-types
@@ -16,6 +16,7 @@
 asn_constr_check_f T1_constraint;
 ber_type_decoder_f T1_decode_ber;
 der_type_encoder_f T1_encode_der;
+xer_type_decoder_f T1_decode_xer;
 xer_type_encoder_f T1_encode_xer;
 
 /*** <<< CODE [T1] >>> ***/
@@ -74,6 +75,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T1_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -107,7 +115,7 @@
 	T1_constraint,
 	T1_decode_ber,
 	T1_encode_der,
-	0,				/* Not implemented yet */
+	T1_decode_xer,
 	T1_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T1_tags,
@@ -138,6 +146,7 @@
 asn_constr_check_f T2_constraint;
 ber_type_decoder_f T2_decode_ber;
 der_type_encoder_f T2_encode_der;
+xer_type_decoder_f T2_decode_xer;
 xer_type_encoder_f T2_encode_xer;
 
 /*** <<< CODE [T2] >>> ***/
@@ -196,6 +205,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -227,7 +243,7 @@
 	T2_constraint,
 	T2_decode_ber,
 	T2_encode_der,
-	0,				/* Not implemented yet */
+	T2_decode_xer,
 	T2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T2_tags,
@@ -258,6 +274,7 @@
 asn_constr_check_f T3_constraint;
 ber_type_decoder_f T3_decode_ber;
 der_type_encoder_f T3_encode_der;
+xer_type_decoder_f T3_decode_xer;
 xer_type_encoder_f T3_encode_xer;
 
 /*** <<< CODE [T3] >>> ***/
@@ -316,6 +333,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -345,7 +369,7 @@
 	T3_constraint,
 	T3_decode_ber,
 	T3_encode_der,
-	0,				/* Not implemented yet */
+	T3_decode_xer,
 	T3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T3_tags,
@@ -376,6 +400,7 @@
 asn_constr_check_f T4_constraint;
 ber_type_decoder_f T4_decode_ber;
 der_type_encoder_f T4_encode_der;
+xer_type_decoder_f T4_decode_xer;
 xer_type_encoder_f T4_encode_xer;
 
 /*** <<< CODE [T4] >>> ***/
@@ -434,6 +459,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -458,7 +490,7 @@
 	T4_constraint,
 	T4_decode_ber,
 	T4_encode_der,
-	0,				/* Not implemented yet */
+	T4_decode_xer,
 	T4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T4_tags,
@@ -489,6 +521,7 @@
 asn_constr_check_f T5_constraint;
 ber_type_decoder_f T5_decode_ber;
 der_type_encoder_f T5_encode_der;
+xer_type_decoder_f T5_decode_xer;
 xer_type_encoder_f T5_encode_xer;
 
 /*** <<< CODE [T5] >>> ***/
@@ -547,6 +580,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T5_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T5_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -570,7 +610,7 @@
 	T5_constraint,
 	T5_decode_ber,
 	T5_encode_der,
-	0,				/* Not implemented yet */
+	T5_decode_xer,
 	T5_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T5_tags,
@@ -620,6 +660,7 @@
 asn_constr_check_f T_constraint;
 ber_type_decoder_f T_decode_ber;
 der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
 xer_type_encoder_f T_encode_xer;
 
 /*** <<< CODE [T] >>> ***/
@@ -678,6 +719,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+T_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	T_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 T_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -702,7 +750,7 @@
 	T_constraint,
 	T_decode_ber,
 	T_encode_der,
-	0,				/* Not implemented yet */
+	T_decode_xer,
 	T_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags,
diff --git a/tests/66-ref-simple-OK.asn1.-P b/tests/66-ref-simple-OK.asn1.-P
index 0131c91..a2b3357 100644
--- a/tests/66-ref-simple-OK.asn1.-P
+++ b/tests/66-ref-simple-OK.asn1.-P
@@ -86,6 +86,7 @@
 asn_constr_check_f SimpleType_constraint;
 ber_type_decoder_f SimpleType_decode_ber;
 der_type_encoder_f SimpleType_encode_der;
+xer_type_decoder_f SimpleType_decode_xer;
 xer_type_encoder_f SimpleType_encode_xer;
 
 /*** <<< CODE [SimpleType] >>> ***/
@@ -144,6 +145,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+SimpleType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	SimpleType_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 SimpleType_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -166,7 +174,7 @@
 	SimpleType_constraint,
 	SimpleType_decode_ber,
 	SimpleType_encode_der,
-	0,				/* Not implemented yet */
+	SimpleType_decode_xer,
 	SimpleType_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SimpleType_tags,