support for a class of circular references

diff --git a/tests/70-xer-test-OK.asn1.-P b/tests/70-xer-test-OK.asn1.-P
index 2c356b9..e84e9f7 100644
--- a/tests/70-xer-test-OK.asn1.-P
+++ b/tests/70-xer-test-OK.asn1.-P
@@ -27,11 +27,9 @@
 	PDU_PR_seqOfZuka,
 	/* Extensions may appear below */
 } PDU_PR;
-extern asn_TYPE_descriptor_t asn_DEF_PDU;
 
 /*** <<< TYPE-DECLS [PDU] >>> ***/
 
-
 typedef struct PDU {
 	PDU_PR present;
 	union {
@@ -54,6 +52,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } PDU_t;
 
+/*** <<< FUNC-DECLS [PDU] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PDU;
+
 /*** <<< STAT-DEFS [PDU] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_PDU_1[] = {
@@ -165,20 +167,16 @@
 /*** <<< INCLUDES [Sequence] >>> ***/
 
 #include <INTEGER.h>
-#include <Sequence.h>
 #include <BIT_STRING.h>
 #include <UTF8String.h>
 #include <constr_SEQUENCE.h>
 
-/*** <<< DEPS [Sequence] >>> ***/
-
+/*** <<< FWD-DECLS [Sequence] >>> ***/
 
 struct Sequence;	/* Forward declaration */
-extern asn_TYPE_descriptor_t asn_DEF_Sequence;
 
 /*** <<< TYPE-DECLS [Sequence] >>> ***/
 
-
 typedef struct Sequence {
 	INTEGER_t	 integer;
 	struct Sequence	*sequence	/* OPTIONAL */;
@@ -189,6 +187,14 @@
 	asn_struct_ctx_t _asn_ctx;
 } Sequence_t;
 
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+
+/*** <<< POST-INCLUDE [Sequence] >>> ***/
+
+#include <Sequence.h>
+
 /*** <<< STAT-DEFS [Sequence] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_Sequence_1[] = {
@@ -277,11 +283,9 @@
 	Set_PR_roid,	/* Member roid is present */
 	Set_PR_opaque,	/* Member opaque is present */
 } Set_PR;
-extern asn_TYPE_descriptor_t asn_DEF_Set;
 
 /*** <<< TYPE-DECLS [Set] >>> ***/
 
-
 typedef struct Set {
 	RELATIVE_OID_t	 roid;
 	OCTET_STRING_t	*opaque	/* OPTIONAL */;
@@ -294,6 +298,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } Set_t;
 
+/*** <<< FUNC-DECLS [Set] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Set;
+
 /*** <<< STAT-DEFS [Set] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_Set_1[] = {
@@ -370,11 +378,9 @@
 typedef enum ExtensibleSet_PR {
 	ExtensibleSet_PR_string,	/* Member string is present */
 } ExtensibleSet_PR;
-extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSet;
 
 /*** <<< TYPE-DECLS [ExtensibleSet] >>> ***/
 
-
 typedef struct ExtensibleSet {
 	UTF8String_t	*string	/* OPTIONAL */;
 	/*
@@ -390,6 +396,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } ExtensibleSet_t;
 
+/*** <<< FUNC-DECLS [ExtensibleSet] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSet;
+
 /*** <<< STAT-DEFS [ExtensibleSet] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_ExtensibleSet_1[] = {
@@ -450,13 +460,8 @@
 #include <INTEGER.h>
 #include <constr_SEQUENCE.h>
 
-/*** <<< DEPS [ExtensibleSequence] >>> ***/
-
-extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence;
-
 /*** <<< TYPE-DECLS [ExtensibleSequence] >>> ***/
 
-
 typedef struct ExtensibleSequence {
 	UTF8String_t	*string	/* OPTIONAL */;
 	/*
@@ -469,6 +474,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } ExtensibleSequence_t;
 
+/*** <<< FUNC-DECLS [ExtensibleSequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence;
+
 /*** <<< STAT-DEFS [ExtensibleSequence] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_ExtensibleSequence_1[] = {
@@ -531,13 +540,8 @@
 #include <asn_SET_OF.h>
 #include <constr_SET_OF.h>
 
-/*** <<< DEPS [SetOf] >>> ***/
-
-extern asn_TYPE_descriptor_t asn_DEF_SetOf;
-
 /*** <<< TYPE-DECLS [SetOf] >>> ***/
 
-
 typedef struct SetOf {
 	A_SET_OF(REAL_t) list;
 	
@@ -545,6 +549,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } SetOf_t;
 
+/*** <<< FUNC-DECLS [SetOf] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SetOf;
+
 /*** <<< STAT-DEFS [SetOf] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_SetOf_1[] = {
@@ -593,13 +601,8 @@
 #include <asn_SET_OF.h>
 #include <constr_SET_OF.h>
 
-/*** <<< DEPS [SetOfNULL] >>> ***/
-
-extern asn_TYPE_descriptor_t asn_DEF_SetOfNULL;
-
 /*** <<< TYPE-DECLS [SetOfNULL] >>> ***/
 
-
 typedef struct SetOfNULL {
 	A_SET_OF(NULL_t) list;
 	
@@ -607,6 +610,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } SetOfNULL_t;
 
+/*** <<< FUNC-DECLS [SetOfNULL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SetOfNULL;
+
 /*** <<< STAT-DEFS [SetOfNULL] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_SetOfNULL_1[] = {
@@ -661,11 +668,9 @@
 	Member_one	= 0,
 	Member_oneMore	= 1
 } Member_e;
-extern asn_TYPE_descriptor_t asn_DEF_SetOfEnums;
 
 /*** <<< TYPE-DECLS [SetOfEnums] >>> ***/
 
-
 typedef struct SetOfEnums {
 	A_SET_OF(ENUMERATED_t) list;
 	
@@ -676,6 +681,7 @@
 /*** <<< FUNC-DECLS [SetOfEnums] >>> ***/
 
 /* extern asn_TYPE_descriptor_t asn_DEF_Member_2;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_SetOfEnums;
 
 /*** <<< CODE [SetOfEnums] >>> ***/
 
@@ -837,13 +843,8 @@
 #include <asn_SEQUENCE_OF.h>
 #include <constr_SEQUENCE_OF.h>
 
-/*** <<< DEPS [SequenceOf] >>> ***/
-
-extern asn_TYPE_descriptor_t asn_DEF_SequenceOf;
-
 /*** <<< TYPE-DECLS [SequenceOf] >>> ***/
 
-
 typedef struct SequenceOf {
 	A_SEQUENCE_OF(INTEGER_t) list;
 	
@@ -851,6 +852,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } SequenceOf_t;
 
+/*** <<< FUNC-DECLS [SequenceOf] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SequenceOf;
+
 /*** <<< STAT-DEFS [SequenceOf] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_SequenceOf_1[] = {
@@ -899,13 +904,8 @@
 #include <asn_SEQUENCE_OF.h>
 #include <constr_SEQUENCE_OF.h>
 
-/*** <<< DEPS [SeqOfZuka] >>> ***/
-
-extern asn_TYPE_descriptor_t asn_DEF_SeqOfZuka;
-
 /*** <<< TYPE-DECLS [SeqOfZuka] >>> ***/
 
-
 typedef struct SeqOfZuka {
 	A_SEQUENCE_OF(NULL_t) list;
 	
@@ -913,6 +913,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } SeqOfZuka_t;
 
+/*** <<< FUNC-DECLS [SeqOfZuka] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SeqOfZuka;
+
 /*** <<< STAT-DEFS [SeqOfZuka] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_SeqOfZuka_1[] = {