opt_bacc.c revision 1.7
1/* $NetBSD: opt_bacc.c,v 1.7 2022/04/22 21:21:20 rillig Exp $ */
2
3/*
4 * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional
5 * compilation").
6 *
7 * The option '-bacc' forces a blank line around every conditional compilation
8 * block.  For example, in front of every #ifdef and after every #endif.
9 * Other blank lines surrounding such blocks are swallowed.
10 *
11 * The option '-nbacc' TODO.
12 */
13
14
15/* Example code without surrounding blank lines. */
16#indent input
17int		a;
18#if 0
19int		b;
20#endif
21int		c;
22#indent end
23
24/*
25 * XXX: As of 2021-11-19, the option -bacc has no effect on declarations since
26 * process_type resets blank_line_before unconditionally.
27 */
28#indent run -bacc
29int		a;
30/* $ FIXME: expecting a blank line here */
31#if 0
32int		b;
33#endif
34/* $ FIXME: expecting a blank line here */
35int		c;
36#indent end
37
38/*
39 * With '-nbacc' the code is unchanged since there are no blank lines to
40 * remove.
41 */
42#indent run-equals-input -nbacc
43
44
45/* Example code containing blank lines. */
46#indent input
47int		space_a;
48
49#if 0
50
51int		space_b;
52
53#endif
54
55int		space_c;
56#indent end
57
58#indent run -bacc
59int		space_a;
60/* $ FIXME: expecting a blank line here */
61#if 0
62
63/* $ FIXME: expecting NO blank line here */
64int		space_b;
65#endif
66
67int		space_c;
68#indent end
69
70/* The option '-nbacc' does not remove anything. */
71#indent run-equals-input -nbacc
72
73
74/*
75 * Preprocessing directives can also occur in function bodies.
76 */
77#indent input
78const char *
79os_name(void)
80{
81#if defined(__NetBSD__) || defined(__FreeBSD__)
82	return "BSD";
83#else
84	return "unknown";
85#endif
86}
87#indent end
88
89#indent run -bacc
90const char *
91os_name(void)
92{
93/* $ FIXME: expecting a blank line here. */
94#if defined(__NetBSD__) || defined(__FreeBSD__)
95/* $ FIXME: expecting NO blank line here. */
96
97	return "BSD";
98#else
99/* $ FIXME: expecting NO blank line here. */
100
101	return "unknown";
102#endif
103/* $ FIXME: expecting a blank line here. */
104}
105#indent end
106
107#indent run-equals-input -nbacc
108
109
110/*
111 * Test nested preprocessor directives.
112 */
113#indent input
114#if outer
115#if inner
116int decl;
117#endif
118#endif
119#indent end
120
121#indent run -di0 -bacc
122#if outer
123
124#if inner
125int decl;
126#endif
127
128#endif
129#indent end
130
131#indent run-equals-input -di0 -nbacc
132
133
134/*
135 * Test nested preprocessor directives that are interleaved with declarations.
136 */
137#indent input
138#ifdef outer
139int outer_above;
140#ifdef inner
141int inner;
142#endif
143int outer_below;
144#endif
145#indent end
146
147#indent run-equals-input -di0 -bacc
148#indent run-equals-input -di0 -nbacc
149