Home | History | Annotate | Line # | Download | only in indent
lsym_lbrace.c revision 1.7
      1  1.7  rillig /* $NetBSD: lsym_lbrace.c,v 1.7 2023/06/03 21:44:08 rillig Exp $ */
      2  1.1  rillig 
      3  1.1  rillig /*
      4  1.1  rillig  * Tests for the token lsym_lbrace, which represents a '{' in these contexts:
      5  1.1  rillig  *
      6  1.1  rillig  * In an initializer, '{' starts an inner group of initializers, usually to
      7  1.1  rillig  * initialize a nested struct, union or array.
      8  1.1  rillig  *
      9  1.1  rillig  * In a function body, '{' starts a block.
     10  1.1  rillig  *
     11  1.3  rillig  * In an expression, '(type){' starts a compound literal that is typically
     12  1.1  rillig  * used in an assignment to a struct or array.
     13  1.2  rillig  *
     14  1.5  rillig  * In macro arguments, a '{' is an ordinary character, it does not need to be
     15  1.5  rillig  * balanced.  This is in contrast to '(', which must be balanced with ')'.
     16  1.5  rillig  *
     17  1.2  rillig  * TODO: try to split this token into lsym_lbrace_block and lsym_lbrace_init.
     18  1.1  rillig  */
     19  1.1  rillig 
     20  1.5  rillig /* Brace level in an initializer */
     21  1.6  rillig //indent input
     22  1.5  rillig void
     23  1.5  rillig function(void)
     24  1.5  rillig {
     25  1.5  rillig 	struct person	p = {
     26  1.5  rillig 		.name = "Name",
     27  1.5  rillig 		.age = {{{35}}},	/* C11 6.7.9 allows this. */
     28  1.5  rillig 	};
     29  1.5  rillig }
     30  1.6  rillig //indent end
     31  1.1  rillig 
     32  1.6  rillig //indent run-equals-input
     33  1.5  rillig 
     34  1.5  rillig 
     35  1.5  rillig /* Begin of a block of statements */
     36  1.6  rillig //indent input
     37  1.5  rillig void function(void) {{{ body(); }}}
     38  1.6  rillig //indent end
     39  1.5  rillig 
     40  1.6  rillig //indent run
     41  1.5  rillig void
     42  1.5  rillig function(void)
     43  1.7  rillig {
     44  1.7  rillig 	{
     45  1.7  rillig 		{
     46  1.5  rillig 			body();
     47  1.7  rillig 		}
     48  1.7  rillig 	}
     49  1.5  rillig }
     50  1.6  rillig //indent end
     51  1.5  rillig 
     52  1.5  rillig 
     53  1.5  rillig /* Compound literal */
     54  1.6  rillig //indent input
     55  1.5  rillig struct point
     56  1.5  rillig origin(void)
     57  1.5  rillig {
     58  1.5  rillig 	return (struct point){
     59  1.5  rillig 		.x = 0,
     60  1.5  rillig 		.y = 0,
     61  1.5  rillig 	};
     62  1.5  rillig }
     63  1.6  rillig //indent end
     64  1.5  rillig 
     65  1.6  rillig //indent run
     66  1.5  rillig struct point
     67  1.5  rillig origin(void)
     68  1.5  rillig {
     69  1.5  rillig 	return (struct point){
     70  1.5  rillig 		.x = 0,
     71  1.5  rillig /* $ FIXME: All initializers must be indented to the same level. */
     72  1.5  rillig 			.y = 0,
     73  1.5  rillig 	};
     74  1.5  rillig }
     75  1.6  rillig //indent end
     76