CHOICE XER decoder

diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index 5b9eae6..2cbe258 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -1508,11 +1508,15 @@
 		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);