opt_bacc.c revision 1.10
1/* $NetBSD: opt_bacc.c,v 1.10 2022/04/24 09:04:12 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 out.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
149//indent run-equals-input -di0 -nbacc
150