XMLValueList support

diff --git a/skeletons/asn_codecs_prim.c b/skeletons/asn_codecs_prim.c
index 03f107b..5fe09ad 100644
--- a/skeletons/asn_codecs_prim.c
+++ b/skeletons/asn_codecs_prim.c
@@ -137,9 +137,10 @@
  * Local internal type passed around as an argument.
  */
 struct xdp_arg_s {
+	asn_TYPE_descriptor_t *type_descriptor;
 	void *struct_key;
-	ssize_t (*prim_body_decode)(void *struct_key,
-		void *chunk_buf, size_t chunk_size);
+	ssize_t (*prim_body_decode)(asn_TYPE_descriptor_t *td,
+		void *struct_key, void *chunk_buf, size_t chunk_size);
 	int decoded_something;
 	int want_more;
 };
@@ -159,7 +160,8 @@
 		return -1;
 	}
 
-	decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
+	decoded = arg->prim_body_decode(arg->type_descriptor,
+		arg->struct_key, chunk_buf, chunk_size);
 	if(decoded < 0) {
 		return -1;
 	} else {
@@ -196,7 +198,8 @@
 		return -1;
 	}
 
-	decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
+	decoded = arg->prim_body_decode(arg->type_descriptor,
+		arg->struct_key, chunk_buf, chunk_size);
 	if(decoded < 0) {
 		return -1;
 	} else {
@@ -213,8 +216,8 @@
 	size_t struct_size,
 	const char *opt_mname,
 	void *buf_ptr, size_t size,
-	ssize_t (*prim_body_decode)(void *struct_key,
-		void *chunk_buf, size_t chunk_size)
+	ssize_t (*prim_body_decode)(asn_TYPE_descriptor_t *td,
+		void *struct_key, void *chunk_buf, size_t chunk_size)
 ) {
 	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
 	asn_struct_ctx_t s_ctx;
@@ -235,6 +238,7 @@
 	}
 
 	memset(&s_ctx, 0, sizeof(s_ctx));
+	s_arg.type_descriptor = td;
 	s_arg.struct_key = *sptr;
 	s_arg.prim_body_decode = prim_body_decode;
 	s_arg.decoded_something = 0;
@@ -248,7 +252,8 @@
 		if(!s_arg.decoded_something) {
 			char ch;
 			/* Opportunity has come and gone. Where's the result? */
-			if(prim_body_decode(s_arg.struct_key, &ch, 0) != 0) {
+			if(prim_body_decode(s_arg.type_descriptor,
+				s_arg.struct_key, &ch, 0) != 0) {
 				/*
 				 * This decoder does not like empty stuff.
 				 */