xref: /netbsd-src/tests/usr.bin/indent/psym_decl.c (revision ed7b435925aab5a8621ff876f96219f1e7266ce3)
1 /* $NetBSD: psym_decl.c,v 1.5 2023/06/14 09:31:05 rillig Exp $ */
2 
3 /*
4  * Tests for the parser symbol psym_decl, which represents a declaration.
5  *
6  * Since C99, declarations and statements can be mixed in blocks.
7  *
8  * In C, a label can be followed by a statement but not by a declaration.
9  *
10  * Indent distinguishes global and local declarations.
11  *
12  * Declarations can be for functions or for variables.
13  */
14 
15 //indent input
16 int global_var;
17 int global_array = [1,2,3,4];
18 int global_array = [
19 1
20 ,2,
21 3,
22 4,
23 ];
24 //indent end
25 
26 //indent run -di0
27 int global_var;
28 int global_array = [1, 2, 3, 4];
29 int global_array = [
30 		    1
31 		    ,2,
32 		    3,
33 		    4,
34 ];
35 //indent end
36 
37 
38 // Declarations can be nested.
39 //indent input
40 struct level_1 {
41 	union level_2 {
42 		enum level_3 {
43 			level_3_c_1,
44 			level_3_c_2,
45 		}		level_3;
46 	}		level_2;
47 } level_1;
48 //indent end
49 
50 // The outermost declarator 'level_1' is indented as a global variable.
51 // The inner declarators 'level_2' and 'level_3' are indented as local
52 // variables.
53 // XXX: This is inconsistent, as in practice, struct members are usually
54 // aligned, while local variables aren't.
55 //indent run-equals-input -ldi0
56