11.13Srillig/* $NetBSD: opt_bacc.c,v 1.13 2023/06/15 09:19:07 rillig Exp $ */
21.1Srillig
31.1Srillig/*
41.6Srillig * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional
51.6Srillig * compilation").
61.2Srillig *
71.2Srillig * The option '-bacc' forces a blank line around every conditional compilation
81.2Srillig * block.  For example, in front of every #ifdef and after every #endif.
91.2Srillig * Other blank lines surrounding such blocks are swallowed.
101.1Srillig *
111.12Srillig * The option '-nbacc' leaves the vertical spacing as-is.
121.1Srillig */
131.1Srillig
141.2Srillig
151.2Srillig/* Example code without surrounding blank lines. */
161.10Srillig//indent input
171.1Srilligint		a;
181.2Srillig#if 0
191.1Srilligint		b;
201.2Srillig#endif
211.1Srilligint		c;
221.10Srillig//indent end
231.1Srillig
241.10Srillig//indent run -bacc
251.2Srilligint		a;
261.12Srillig
271.2Srillig#if 0
281.2Srilligint		b;
291.2Srillig#endif
301.12Srillig
311.2Srilligint		c;
321.10Srillig//indent end
331.1Srillig
341.12Srillig/* The option '-nbacc' does not remove anything. */
351.10Srillig//indent run-equals-input -nbacc
361.1Srillig
371.1Srillig
381.2Srillig/* Example code containing blank lines. */
391.10Srillig//indent input
401.1Srilligint		space_a;
411.1Srillig
421.2Srillig#if 0
431.2Srillig
441.2Srilligint		space_b;
451.2Srillig
461.1Srillig#endif
471.1Srillig
481.1Srilligint		space_c;
491.10Srillig//indent end
501.1Srillig
511.11Srillig//indent run-equals-input -bacc
521.1Srillig
531.2Srillig/* The option '-nbacc' does not remove anything. */
541.10Srillig//indent run-equals-input -nbacc
551.1Srillig
561.6Srillig
571.2Srillig/*
581.2Srillig * Preprocessing directives can also occur in function bodies.
591.2Srillig */
601.10Srillig//indent input
611.1Srilligconst char *
621.1Srilligos_name(void)
631.1Srillig{
641.1Srillig#if defined(__NetBSD__) || defined(__FreeBSD__)
651.1Srillig	return "BSD";
661.1Srillig#else
671.1Srillig	return "unknown";
681.1Srillig#endif
691.1Srillig}
701.10Srillig//indent end
711.1Srillig
721.10Srillig//indent run -bacc
731.5Srilligconst char *
741.2Srilligos_name(void)
751.2Srillig{
761.12Srillig
771.2Srillig#if defined(__NetBSD__) || defined(__FreeBSD__)
781.2Srillig	return "BSD";
791.2Srillig#else
801.2Srillig	return "unknown";
811.1Srillig#endif
821.12Srillig
831.2Srillig}
841.10Srillig//indent end
851.1Srillig
861.10Srillig//indent run-equals-input -nbacc
871.6Srillig
881.6Srillig
891.6Srillig/*
901.6Srillig * Test nested preprocessor directives.
911.6Srillig */
921.10Srillig//indent input
931.6Srillig#if outer
941.6Srillig#if inner
951.6Srilligint decl;
961.6Srillig#endif
971.6Srillig#endif
981.10Srillig//indent end
991.6Srillig
1001.11Srillig//indent run-equals-input -di0 -bacc
1011.6Srillig
1021.10Srillig//indent run-equals-input -di0 -nbacc
1031.6Srillig
1041.6Srillig
1051.6Srillig/*
1061.6Srillig * Test nested preprocessor directives that are interleaved with declarations.
1071.6Srillig */
1081.10Srillig//indent input
1091.6Srillig#ifdef outer
1101.6Srilligint outer_above;
1111.6Srillig#ifdef inner
1121.6Srilligint inner;
1131.6Srillig#endif
1141.6Srilligint outer_below;
1151.6Srillig#endif
1161.10Srillig//indent end
1171.6Srillig
1181.12Srillig//indent run -di0 -bacc
1191.12Srillig#ifdef outer
1201.12Srilligint outer_above;
1211.12Srillig
1221.12Srillig#ifdef inner
1231.12Srilligint inner;
1241.12Srillig#endif
1251.12Srillig
1261.12Srilligint outer_below;
1271.12Srillig#endif
1281.12Srillig//indent end
1291.9Srillig
1301.10Srillig//indent run-equals-input -di0 -nbacc
1311.13Srillig
1321.13Srillig
1331.13Srillig//indent input
1341.13Srillig/* before */
1351.13Srillig#if 0
1361.13Srillig/* between if and else */
1371.13Srillig#else
1381.13Srillig#if 1
1391.13Srillig#endif
1401.13Srillig#endif
1411.13Srillig/* after */
1421.13Srillig//indent end
1431.13Srillig
1441.13Srillig//indent run -bacc
1451.13Srillig/* before */
1461.13Srillig// $ XXX: The 'before' comment may refer to the '#if', so it is not obvious
1471.13Srillig// $ XXX: that this blank line is useful.
1481.13Srillig
1491.13Srillig#if 0
1501.13Srillig/* between if and else */
1511.13Srillig#else
1521.13Srillig// $ XXX: This blank line looks unintended, as both lines are preprocessing
1531.13Srillig// $ XXX: directives.
1541.13Srillig
1551.13Srillig#if 1
1561.13Srillig#endif
1571.13Srillig#endif
1581.13Srillig
1591.13Srillig/* after */
1601.13Srillig//indent end
161