support for a class of circular references

diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index e91110d..660048b 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -13,11 +13,9 @@
 typedef enum T1_PR {
 	T1_PR_i,	/* Member i is present */
 } T1_PR;
-extern asn_TYPE_descriptor_t asn_DEF_T1;
 
 /*** <<< TYPE-DECLS [T1] >>> ***/
 
-
 typedef struct T1 {
 	INTEGER_t	 i;
 	/*
@@ -33,6 +31,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } T1_t;
 
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+
 /*** <<< STAT-DEFS [T1] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_T1_1[] = {
@@ -101,11 +103,9 @@
 typedef enum T2_PR {
 	T2_PR_i,	/* Member i is present */
 } T2_PR;
-extern asn_TYPE_descriptor_t asn_DEF_T2;
 
 /*** <<< TYPE-DECLS [T2] >>> ***/
 
-
 typedef struct T2 {
 	INTEGER_t	 i;
 	/*
@@ -121,6 +121,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } T2_t;
 
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+
 /*** <<< STAT-DEFS [T2] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_T2_1[] = {
@@ -187,11 +191,9 @@
 	T3_PR_i,
 	/* Extensions may appear below */
 } T3_PR;
-extern asn_TYPE_descriptor_t asn_DEF_T3;
 
 /*** <<< TYPE-DECLS [T3] >>> ***/
 
-
 typedef struct T3 {
 	T3_PR present;
 	union {
@@ -206,6 +208,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } T3_t;
 
+/*** <<< FUNC-DECLS [T3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T3;
+
 /*** <<< STAT-DEFS [T3] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_T3_1[] = {
@@ -262,11 +268,9 @@
 	T4_PR_i,
 	/* Extensions may appear below */
 } T4_PR;
-extern asn_TYPE_descriptor_t asn_DEF_T4;
 
 /*** <<< TYPE-DECLS [T4] >>> ***/
 
-
 typedef struct T4 {
 	T4_PR present;
 	union {
@@ -281,6 +285,10 @@
 	asn_struct_ctx_t _asn_ctx;
 } T4_t;
 
+/*** <<< FUNC-DECLS [T4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T4;
+
 /*** <<< STAT-DEFS [T4] >>> ***/
 
 static asn_TYPE_member_t asn_MBR_T4_1[] = {