opt_bacc.c revision 1.11
11.11Srillig/* $NetBSD: opt_bacc.c,v 1.11 2023/05/11 18:13:55 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.2Srillig * The option '-nbacc' TODO.
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.1Srillig/*
251.6Srillig * XXX: As of 2021-11-19, the option -bacc has no effect on declarations since
261.8Srillig * process_type resets out.blank_line_before unconditionally.
271.1Srillig */
281.10Srillig//indent run -bacc
291.2Srilligint		a;
301.2Srillig/* $ FIXME: expecting a blank line here */
311.2Srillig#if 0
321.2Srilligint		b;
331.2Srillig#endif
341.2Srillig/* $ FIXME: expecting a blank line here */
351.2Srilligint		c;
361.10Srillig//indent end
371.1Srillig
381.2Srillig/*
391.2Srillig * With '-nbacc' the code is unchanged since there are no blank lines to
401.2Srillig * remove.
411.2Srillig */
421.10Srillig//indent run-equals-input -nbacc
431.1Srillig
441.1Srillig
451.2Srillig/* Example code containing blank lines. */
461.10Srillig//indent input
471.1Srilligint		space_a;
481.1Srillig
491.2Srillig#if 0
501.2Srillig
511.2Srilligint		space_b;
521.2Srillig
531.1Srillig#endif
541.1Srillig
551.1Srilligint		space_c;
561.10Srillig//indent end
571.1Srillig
581.11Srillig//indent run-equals-input -bacc
591.1Srillig
601.2Srillig/* The option '-nbacc' does not remove anything. */
611.10Srillig//indent run-equals-input -nbacc
621.1Srillig
631.6Srillig
641.2Srillig/*
651.2Srillig * Preprocessing directives can also occur in function bodies.
661.2Srillig */
671.10Srillig//indent input
681.1Srilligconst char *
691.1Srilligos_name(void)
701.1Srillig{
711.1Srillig#if defined(__NetBSD__) || defined(__FreeBSD__)
721.1Srillig	return "BSD";
731.1Srillig#else
741.1Srillig	return "unknown";
751.1Srillig#endif
761.1Srillig}
771.10Srillig//indent end
781.1Srillig
791.10Srillig//indent run -bacc
801.5Srilligconst char *
811.2Srilligos_name(void)
821.2Srillig{
831.2Srillig/* $ FIXME: expecting a blank line here. */
841.2Srillig#if defined(__NetBSD__) || defined(__FreeBSD__)
851.2Srillig	return "BSD";
861.2Srillig#else
871.2Srillig	return "unknown";
881.1Srillig#endif
891.2Srillig/* $ FIXME: expecting a blank line here. */
901.2Srillig}
911.10Srillig//indent end
921.1Srillig
931.10Srillig//indent run-equals-input -nbacc
941.6Srillig
951.6Srillig
961.6Srillig/*
971.6Srillig * Test nested preprocessor directives.
981.6Srillig */
991.10Srillig//indent input
1001.6Srillig#if outer
1011.6Srillig#if inner
1021.6Srilligint decl;
1031.6Srillig#endif
1041.6Srillig#endif
1051.10Srillig//indent end
1061.6Srillig
1071.11Srillig//indent run-equals-input -di0 -bacc
1081.6Srillig
1091.10Srillig//indent run-equals-input -di0 -nbacc
1101.6Srillig
1111.6Srillig
1121.6Srillig/*
1131.6Srillig * Test nested preprocessor directives that are interleaved with declarations.
1141.6Srillig */
1151.10Srillig//indent input
1161.6Srillig#ifdef outer
1171.6Srilligint outer_above;
1181.6Srillig#ifdef inner
1191.6Srilligint inner;
1201.6Srillig#endif
1211.6Srilligint outer_below;
1221.6Srillig#endif
1231.10Srillig//indent end
1241.6Srillig
1251.10Srillig//indent run-equals-input -di0 -bacc
1261.9Srillig
1271.10Srillig//indent run-equals-input -di0 -nbacc
128