From c74ea225465b3397fea6775ebad9bf07daafd7e5 Mon Sep 17 00:00:00 2001
From: Lev Walkin <vlm@lionet.info>
Date: Wed, 25 Aug 2004 02:27:47 +0000
Subject: [PATCH] better ValueSet printing

---
 ChangeLog                |  1 +
 libasn1print/asn1print.c | 20 +++++++++++++++++---
 tests/07-int-OK.asn1.-EF |  2 +-
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d0df5743..2d0efdba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
 	  PER visibility rules for actual constraints checking code generator.
 	* Indirect references in constraints resolver code fixed.
 	* Avoided compilation warning on gcc 3.3.3 systems.
+	* Better ValueSet printing.
 
 0.9.1:	2004-Aug-23
 
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index c90e9665..a07a894c 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -442,6 +442,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
 	}
 
 	if(tc->meta_type != AMT_VALUE
+	&& tc->meta_type != AMT_VALUESET
 	&& tc->expr_type != A1TC_EXTENSIBLE) {
 		if(level) {
 			if(tc->Identifier)
@@ -503,14 +504,27 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
 		asn1print_ref(tc->reference, flags);
 	}
 
+	if(tc->meta_type == AMT_VALUESET)
+		printf(" ::=");
+
 	/*
 	 * Display the descendants (children) of the current type.
 	 */
-	if(TQ_FIRST(&(tc->members))) {
+	if(TQ_FIRST(&(tc->members))
+	|| (tc->expr_type & ASN_CONSTR_MASK)
+	|| tc->meta_type == AMT_VALUESET
+	|| tc->meta_type == AMT_OBJECT
+	|| tc->meta_type == AMT_OBJECTSET
+	) {
 		asn1p_expr_t *se;	/* SubExpression */
 		int put_braces = !SEQ_OF; /* Don't need 'em, if SET OF... */
 
-		if(put_braces) printf(" {\n");
+		if(put_braces) {
+			printf(" {");
+			if(TQ_FIRST(&tc->members))
+				printf("\n");
+			else	printf(" }");
+		}
 
 		TQ_FOR(se, &(tc->members), next) {
 			/*
@@ -528,7 +542,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
 			}
 		}
 
-		if(put_braces) {
+		if(put_braces && TQ_FIRST(&tc->members)) {
 			printf("\n");
 			INDENT("}");
 		}
diff --git a/tests/07-int-OK.asn1.-EF b/tests/07-int-OK.asn1.-EF
index b3d6a0c3..90b23499 100644
--- a/tests/07-int-OK.asn1.-EF
+++ b/tests/07-int-OK.asn1.-EF
@@ -9,7 +9,7 @@ int123456 INTEGER ::= 123456
 
 Interval ::= INTEGER (1..123456)
 
-SameInterval ::= INTEGER
+SameInterval INTEGER ::= { }
 
 Reason ::= INTEGER {
     no-reason(0),
-- 
GitLab