Home | History | Annotate | Line # | Download | only in indent
lsym_lbrace.c revision 1.9
      1  1.9  rillig /* $NetBSD: lsym_lbrace.c,v 1.9 2023/06/15 09:19:07 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.9  rillig 	}, actual_return_value;
     62  1.9  rillig }
     63  1.9  rillig //indent end
     64  1.9  rillig 
     65  1.9  rillig //indent run-equals-input
     66  1.9  rillig 
     67  1.9  rillig /* Ensure that the comma is not interpreted as separator for declarators. */
     68  1.9  rillig //indent run-equals-input -bc
     69  1.9  rillig 
     70  1.9  rillig 
     71  1.9  rillig //indent input
     72  1.9  rillig {
     73  1.9  rillig 	const char *hello = (const char[]){
     74  1.9  rillig 		'h', 'e', 'l', 'l', 'o',
     75  1.9  rillig 	}, *world = (const char[]){
     76  1.9  rillig 		'w', 'o', 'r', 'l', 'd',
     77  1.5  rillig 	};
     78  1.5  rillig }
     79  1.6  rillig //indent end
     80  1.5  rillig 
     81  1.9  rillig //indent run-equals-input -ldi0
     82  1.9  rillig 
     83  1.9  rillig //indent run-equals-input -ldi0 -bc
     84  1.9  rillig 
     85  1.9  rillig 
     86  1.9  rillig //indent input
     87  1.9  rillig {
     88  1.9  rillig 	if (cond rparen {
     89  1.9  rillig 	}
     90  1.9  rillig 	switch (expr rparen {
     91  1.9  rillig 	}
     92  1.9  rillig }
     93  1.9  rillig //indent end
     94  1.9  rillig 
     95  1.9  rillig //indent run
     96  1.9  rillig {
     97  1.9  rillig 		if (cond rparen {
     98  1.9  rillig 		}
     99  1.9  rillig 		switch (expr rparen {
    100  1.9  rillig 		}
    101  1.9  rillig }
    102  1.9  rillig exit 1
    103  1.9  rillig error: Standard Input:2: Unbalanced parentheses
    104  1.9  rillig error: Standard Input:4: Unbalanced parentheses
    105  1.9  rillig //indent end
    106  1.9  rillig 
    107  1.9  rillig 
    108  1.9  rillig /*
    109  1.9  rillig  * The -bl option does not force initializer braces on separate lines.
    110  1.9  rillig  */
    111  1.9  rillig //indent input
    112  1.9  rillig struct {int member;} var = {1};
    113  1.9  rillig //indent end
    114  1.9  rillig 
    115  1.9  rillig //indent run -bl
    116  1.9  rillig struct
    117  1.9  rillig {
    118  1.9  rillig 	int		member;
    119  1.9  rillig }		var = {1};
    120  1.9  rillig //indent end
    121  1.9  rillig 
    122  1.9  rillig 
    123  1.9  rillig /*
    124  1.9  rillig  * A comment in a single-line function definition is not a declaration comment
    125  1.9  rillig  * and thus not in column 25.
    126  1.9  rillig  */
    127  1.9  rillig //indent input
    128  1.9  rillig void function(void); /* comment */
    129  1.9  rillig void function(void) { /* comment */ }
    130  1.9  rillig //indent end
    131  1.9  rillig 
    132  1.9  rillig //indent run -di0
    133  1.9  rillig void function(void);		/* comment */
    134  1.9  rillig void
    135  1.9  rillig function(void)
    136  1.9  rillig {				/* comment */
    137  1.9  rillig }
    138  1.9  rillig //indent end
    139  1.9  rillig 
    140  1.9  rillig //indent run -di0 -nfbs
    141  1.9  rillig void function(void);		/* comment */
    142  1.9  rillig void
    143  1.9  rillig function(void) {		/* comment */
    144  1.9  rillig }
    145  1.9  rillig //indent end
    146