From 61b40d81b7cd8c5133a9bd16a7026c8f333f772b Mon Sep 17 00:00:00 2001
From: Lev Walkin <vlm@lionet.info>
Date: Sat, 23 Oct 2004 15:07:45 +0000
Subject: [PATCH] CHOICE XER decoder

---
 libasn1compiler/asn1c_C.c                  | 14 +++++++++-----
 tests/19-param-OK.asn1.-P                  |  4 ++--
 tests/31-set-of-OK.asn1.-P                 |  6 +++---
 tests/32-sequence-of-OK.asn1.-P            |  2 +-
 tests/39-sequence-of-OK.asn1.-P            |  4 ++--
 tests/42-real-life-OK.asn1.-PR             | 12 ++++++------
 tests/43-recursion-OK.asn1.-P              |  4 ++--
 tests/44-choice-in-sequence-OK.asn1.-P     |  8 ++++----
 tests/46-redefine-OK.asn1.-PR              |  2 +-
 tests/47-set-ext-OK.asn1.-P                |  4 ++--
 tests/60-any-OK.asn1.-P                    |  4 ++--
 tests/65-multi-tag-OK.asn1.-P              |  2 +-
 tests/65-multi-tag-OK.asn1.-Pfnative-types |  2 +-
 13 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index 5b9eae69..2cbe258c 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -1508,11 +1508,15 @@ emit_type_DEF(arg_t *arg, asn1p_expr_t *expr, enum tvm_compat tv_mode, int tags_
 		OUT("%s_constraint,\n", p);
 		OUT("%s_decode_ber,\n", p);
 		OUT("%s_encode_der,\n", p);
-		if(!(expr->expr_type & ASN_CONSTR_MASK)
-			&& (expr->expr_type != ASN_CONSTR_SEQUENCE))
-		OUT("%s_decode_xer,\n", p);
-		else
-		OUT("0,\t\t\t\t/* Not implemented yet */\n");
+		switch(expr->expr_type) {
+		case ASN_CONSTR_SET:
+		case ASN_CONSTR_SET_OF:
+		case ASN_CONSTR_SEQUENCE_OF:
+			OUT("0,\t\t\t\t/* Not implemented yet */\n");
+			break;
+		default:
+			OUT("%s_decode_xer,\n", p);
+		}
 		OUT("%s_encode_xer,\n", p);
 
 		p = MKID(expr->Identifier);
diff --git a/tests/19-param-OK.asn1.-P b/tests/19-param-OK.asn1.-P
index 0d07f8b2..fe64c771 100644
--- a/tests/19-param-OK.asn1.-P
+++ b/tests/19-param-OK.asn1.-P
@@ -114,7 +114,7 @@ asn_TYPE_descriptor_t asn_DEF_toBeSigned = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_toBeSigned_tags,
@@ -175,7 +175,7 @@ asn_TYPE_descriptor_t asn_DEF_Certificate = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Certificate_tags,
diff --git a/tests/31-set-of-OK.asn1.-P b/tests/31-set-of-OK.asn1.-P
index c245bf88..e9ccac14 100644
--- a/tests/31-set-of-OK.asn1.-P
+++ b/tests/31-set-of-OK.asn1.-P
@@ -122,7 +122,7 @@ asn_TYPE_descriptor_t asn_DEF_Tree = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Tree_tags,
@@ -289,7 +289,7 @@ asn_TYPE_descriptor_t asn_DEF_anything_member = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_anything_member_tags,
@@ -382,7 +382,7 @@ asn_TYPE_descriptor_t asn_DEF_other = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
diff --git a/tests/32-sequence-of-OK.asn1.-P b/tests/32-sequence-of-OK.asn1.-P
index 5c2c9b29..46c7ea82 100644
--- a/tests/32-sequence-of-OK.asn1.-P
+++ b/tests/32-sequence-of-OK.asn1.-P
@@ -167,7 +167,7 @@ asn_TYPE_descriptor_t asn_DEF_Error = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Error_tags,
diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P
index 1fecb6f5..76aded23 100644
--- a/tests/39-sequence-of-OK.asn1.-P
+++ b/tests/39-sequence-of-OK.asn1.-P
@@ -108,7 +108,7 @@ asn_TYPE_descriptor_t asn_DEF_T = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags,
@@ -185,7 +185,7 @@ asn_TYPE_descriptor_t asn_DEF_T2 = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T2_tags,
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index 951e6693..974c0160 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -144,7 +144,7 @@ asn_TYPE_descriptor_t asn_DEF_LogLine = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_LogLine_tags,
@@ -294,7 +294,7 @@ asn_TYPE_descriptor_t asn_DEF_VariablePartSet = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_VariablePartSet_tags,
@@ -474,7 +474,7 @@ asn_TYPE_descriptor_t asn_DEF_vrange = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_vrange_tags,
@@ -525,7 +525,7 @@ asn_TYPE_descriptor_t asn_DEF_VariablePart = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
@@ -671,7 +671,7 @@ asn_TYPE_descriptor_t asn_DEF_notify = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_notify_tags,
@@ -724,7 +724,7 @@ asn_TYPE_descriptor_t asn_DEF_ActionItem = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_ActionItem_tags,
diff --git a/tests/43-recursion-OK.asn1.-P b/tests/43-recursion-OK.asn1.-P
index 004e0f05..9e8d4074 100644
--- a/tests/43-recursion-OK.asn1.-P
+++ b/tests/43-recursion-OK.asn1.-P
@@ -175,7 +175,7 @@ asn_TYPE_descriptor_t asn_DEF_Test_structure_1 = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Test_structure_1_tags,
@@ -330,7 +330,7 @@ asn_TYPE_descriptor_t asn_DEF_Choice_1 = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
diff --git a/tests/44-choice-in-sequence-OK.asn1.-P b/tests/44-choice-in-sequence-OK.asn1.-P
index bb51a570..77886f10 100644
--- a/tests/44-choice-in-sequence-OK.asn1.-P
+++ b/tests/44-choice-in-sequence-OK.asn1.-P
@@ -106,7 +106,7 @@ asn_TYPE_descriptor_t asn_DEF_e = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
@@ -156,7 +156,7 @@ asn_TYPE_descriptor_t asn_DEF_h = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
@@ -223,7 +223,7 @@ asn_TYPE_descriptor_t asn_DEF_b = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
@@ -279,7 +279,7 @@ asn_TYPE_descriptor_t asn_DEF_T = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags,
diff --git a/tests/46-redefine-OK.asn1.-PR b/tests/46-redefine-OK.asn1.-PR
index 5ba6bccf..2dc369cd 100644
--- a/tests/46-redefine-OK.asn1.-PR
+++ b/tests/46-redefine-OK.asn1.-PR
@@ -70,7 +70,7 @@ asn_TYPE_descriptor_t asn_DEF_ConstructedType = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_ConstructedType_tags,
diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index 8c2bc270..cdd6f530 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -237,7 +237,7 @@ asn_TYPE_descriptor_t asn_DEF_T3 = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
@@ -312,7 +312,7 @@ asn_TYPE_descriptor_t asn_DEF_T4 = {
 	CHOICE_constraint,
 	CHOICE_decode_ber,
 	CHOICE_encode_der,
-	0,				/* Not implemented yet */
+	CHOICE_decode_xer,
 	CHOICE_encode_xer,
 	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
diff --git a/tests/60-any-OK.asn1.-P b/tests/60-any-OK.asn1.-P
index f740e8a8..4f55417c 100644
--- a/tests/60-any-OK.asn1.-P
+++ b/tests/60-any-OK.asn1.-P
@@ -60,7 +60,7 @@ asn_TYPE_descriptor_t asn_DEF_T1 = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T1_tags,
@@ -137,7 +137,7 @@ asn_TYPE_descriptor_t asn_DEF_T2 = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T2_tags,
diff --git a/tests/65-multi-tag-OK.asn1.-P b/tests/65-multi-tag-OK.asn1.-P
index 5319d50e..4c398343 100644
--- a/tests/65-multi-tag-OK.asn1.-P
+++ b/tests/65-multi-tag-OK.asn1.-P
@@ -836,7 +836,7 @@ asn_TYPE_descriptor_t asn_DEF_Ts = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Ts_tags,
diff --git a/tests/65-multi-tag-OK.asn1.-Pfnative-types b/tests/65-multi-tag-OK.asn1.-Pfnative-types
index eb2f1c41..55742035 100644
--- a/tests/65-multi-tag-OK.asn1.-Pfnative-types
+++ b/tests/65-multi-tag-OK.asn1.-Pfnative-types
@@ -836,7 +836,7 @@ asn_TYPE_descriptor_t asn_DEF_Ts = {
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
-	0,				/* Not implemented yet */
+	SEQUENCE_decode_xer,
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Ts_tags,
-- 
GitLab