lsym_rbrace.c revision 1.6
11.6Srillig/* $NetBSD: lsym_rbrace.c,v 1.6 2023/06/04 13:49:00 rillig Exp $ */
21.1Srillig
31.1Srillig/*
41.3Srillig * Tests for the token lsym_rbrace, which represents a '}' in these contexts:
51.3Srillig *
61.3Srillig * In an initializer, '}' ends an inner group of initializers, usually to
71.3Srillig * initialize a nested struct, union or array.
81.3Srillig *
91.3Srillig * In a function body, '}' ends a block.
101.3Srillig *
111.3Srillig * In an expression like '(type){...}', '}' ends a compound literal, which is
121.3Srillig * typically used in an assignment to a struct or array.
131.3Srillig *
141.3Srillig * In macro arguments, a '}' is an ordinary character, it does not need to be
151.3Srillig * balanced.  This is in contrast to '(' and ')', which must be balanced.
161.3Srillig *
171.3Srillig * TODO: try to split this token into lsym_rbrace_block and lsym_rbrace_init.
181.1Srillig *
191.1Srillig * See also:
201.1Srillig *	lsym_lbrace.c
211.1Srillig */
221.1Srillig
231.3Srillig/* Brace level in an initializer */
241.4Srillig//indent input
251.3Srilligvoid
261.3Srilligfunction(void)
271.3Srillig{
281.3Srillig	struct person	p = {
291.3Srillig		.name = "Name",
301.3Srillig		.age = {{{35}}},	/* C11 6.7.9 allows this. */
311.3Srillig	};
321.3Srillig}
331.4Srillig//indent end
341.1Srillig
351.4Srillig//indent run-equals-input
361.3Srillig
371.3Srillig
381.3Srillig/* Begin of a block of statements */
391.4Srillig//indent input
401.3Srilligvoid function(void) {{{ body(); }}}
411.4Srillig//indent end
421.3Srillig
431.4Srillig//indent run
441.3Srilligvoid
451.3Srilligfunction(void)
461.5Srillig{
471.5Srillig	{
481.5Srillig		{
491.3Srillig			body();
501.5Srillig		}
511.5Srillig	}
521.3Srillig}
531.4Srillig//indent end
541.3Srillig
551.3Srillig
561.3Srillig/* Compound literal */
571.4Srillig//indent input
581.3Srilligstruct point
591.3Srilligorigin(void)
601.3Srillig{
611.3Srillig	return (struct point){
621.3Srillig		.x = 0,
631.3Srillig		.y = 0,
641.3Srillig	};
651.3Srillig}
661.4Srillig//indent end
671.3Srillig
681.6Srillig//indent run-equals-input
69