xref: /netbsd-src/tests/usr.bin/indent/lsym_rbrace.c (revision 98ca6839b8f4162102369f36715e69ce1fdcfe88)
1*98ca6839Srillig /* $NetBSD: lsym_rbrace.c,v 1.8 2025/01/04 21:54:26 rillig Exp $ */
29ae26de1Srillig 
39ae26de1Srillig /*
415606711Srillig  * Tests for the token lsym_rbrace, which represents a '}' in these contexts:
515606711Srillig  *
615606711Srillig  * In an initializer, '}' ends an inner group of initializers, usually to
715606711Srillig  * initialize a nested struct, union or array.
815606711Srillig  *
915606711Srillig  * In a function body, '}' ends a block.
1015606711Srillig  *
1115606711Srillig  * In an expression like '(type){...}', '}' ends a compound literal, which is
1215606711Srillig  * typically used in an assignment to a struct or array.
1315606711Srillig  *
1415606711Srillig  * In macro arguments, a '}' is an ordinary character, it does not need to be
1515606711Srillig  * balanced.  This is in contrast to '(' and ')', which must be balanced.
1615606711Srillig  *
1715606711Srillig  * TODO: try to split this token into lsym_rbrace_block and lsym_rbrace_init.
189ae26de1Srillig  *
199ae26de1Srillig  * See also:
209ae26de1Srillig  *	lsym_lbrace.c
219ae26de1Srillig  */
229ae26de1Srillig 
2315606711Srillig /* Brace level in an initializer */
2447306038Srillig //indent input
2515606711Srillig void
2615606711Srillig function(void)
2715606711Srillig {
2815606711Srillig 	struct person	p = {
2915606711Srillig 		.name = "Name",
3015606711Srillig 		.age = {{{35}}},	/* C11 6.7.9 allows this. */
3115606711Srillig 	};
3215606711Srillig }
3347306038Srillig //indent end
349ae26de1Srillig 
3547306038Srillig //indent run-equals-input
3615606711Srillig 
3715606711Srillig 
3815606711Srillig /* Begin of a block of statements */
3947306038Srillig //indent input
4015606711Srillig void function(void) {{{ body(); }}}
4147306038Srillig //indent end
4215606711Srillig 
4347306038Srillig //indent run
4415606711Srillig void
4515606711Srillig function(void)
460bee435aSrillig {
470bee435aSrillig 	{
480bee435aSrillig 		{
4915606711Srillig 			body();
5015606711Srillig 		}
5115606711Srillig 	}
5215606711Srillig }
5347306038Srillig //indent end
5415606711Srillig 
5515606711Srillig 
5615606711Srillig /* Compound literal */
5747306038Srillig //indent input
5815606711Srillig struct point
5915606711Srillig origin(void)
6015606711Srillig {
6115606711Srillig 	return (struct point){
6215606711Srillig 		.x = 0,
6315606711Srillig 		.y = 0,
6415606711Srillig 	};
6515606711Srillig }
6647306038Srillig //indent end
6715606711Srillig 
682c177151Srillig //indent run-equals-input
6941e7f68dSrillig 
7041e7f68dSrillig 
7141e7f68dSrillig //indent input
7241e7f68dSrillig {
7341e7f68dSrillig int numbers[][] = {
7441e7f68dSrillig {11},
7541e7f68dSrillig {21},
7641e7f68dSrillig {31},
7741e7f68dSrillig };
7841e7f68dSrillig int numbers[][] = {{11},
7941e7f68dSrillig {21},
8041e7f68dSrillig {31},
8141e7f68dSrillig };
8241e7f68dSrillig }
8341e7f68dSrillig //indent end
8441e7f68dSrillig 
8541e7f68dSrillig //indent run -di0
8641e7f68dSrillig {
8741e7f68dSrillig 	int numbers[][] = {
8841e7f68dSrillig 		{11},
8941e7f68dSrillig 		{21},
9041e7f68dSrillig 		{31},
9141e7f68dSrillig 	};
9241e7f68dSrillig 	int numbers[][] = {{11},
9341e7f68dSrillig 		{21},
9441e7f68dSrillig 		{31},
9541e7f68dSrillig 	};
9641e7f68dSrillig }
9741e7f68dSrillig //indent end
98