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