1 /* 2 * Test header file for h2ph 3 * 4 * Try to test as many constructs as possible 5 * For example, the multi-line comment :) 6 */ 7 8 /* And here's a single line comment :) */ 9 10 /* Test #define with no indenting, over multiple lines */ 11 #define SQUARE(x) \ 12 ((x)*(x)) 13 14 /* Test #ifndef and parameter interpretation*/ 15 #ifndef ERROR 16 #define ERROR(x) fprintf(stderr, "%s\n", x[2][3][0]) 17 #endif /* ERROR */ 18 19 #ifndef _H2PH_H_ 20 #define _H2PH_H_ 21 22 /* #ident - doesn't really do anything, but I think it always gets included anyway */ 23 #ident "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $" 24 25 /* Test #undef */ 26 #undef MAX 27 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 28 29 /* Test #ifdef */ 30 #ifdef __SOME_UNIMPORTANT_PROPERTY 31 #define MIN(a,b) ((a) < (b) ? (a) : (b)) 32 #endif /* __SOME_UNIMPORTANT_PROPERTY */ 33 34 /* 35 * Test #if, #elif, #else, #endif, #warn and #error, and `!' 36 * Also test whitespace between the `#' and the command 37 */ 38 #if !(defined __SOMETHING_MORE_IMPORTANT) 39 # warn Be careful... 40 #elif !(defined __SOMETHING_REALLY_REALLY_IMPORTANT) 41 # error "Nup, can't go on" /* ' /* stupid font-lock-mode */ 42 #else /* defined __SOMETHING_MORE_IMPORTANT && defined __SOMETHING_REALLY_REALLY_IMPORTANT */ 43 # define EVERYTHING_IS_OK 44 #endif 45 46 /* Test && and || */ 47 #undef WHATEVER 48 #if (!((defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO)) \ 49 || defined __SOMETHING_OVERPOWERING) 50 # define WHATEVER 6 51 #elif !(defined __SOMETHING_TRIVIAL) /* defined __SOMETHING_LESS_SO */ 52 # define WHATEVER 7 53 #elif !(defined __SOMETHING_LESS_SO) /* defined __SOMETHING_TRIVIAL */ 54 # define WHATEVER 8 55 #else /* defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO */ 56 # define WHATEVER 1000 57 #endif 58 59 /* Test passing through the alien constructs (perlbug #34493) */ 60 #ifdef __LANGUAGE_PASCAL__ 61 function Tru64_Pascal(n: Integer): Integer; 62 #endif 63 64 /* 65 * Test #include, #import and #include_next 66 * #include_next is difficult to test, it really depends on the actual 67 * circumstances - for example, `#include_next <limits.h>' on a Linux system 68 * with `use lib qw(/opt/perl5/lib/site_perl/i586-linux/linux);' or whatever 69 * your equivalent is... 70 */ 71 #include <sys/socket.h> 72 #import "sys/ioctl.h" 73 #include_next <sys/fcntl.h> 74 75 /* typedefs should be ignored */ 76 typedef struct a_struct { 77 int typedefs_should; 78 char be_ignored; 79 long as_well; 80 } a_typedef; 81 82 /* 83 * however, typedefs of enums and just plain enums should end up being treated 84 * like a bunch of #defines... 85 */ 86 87 typedef enum _days_of_week { sun, mon, tue, wed, thu, fri, sat, Sun=0, Mon, 88 Tue, Wed, Thu, Fri, Sat } days_of_week; 89 90 /* 91 * Some moderate flexing of tri-graph pre substitution. 92 */ 93 ??=ifndef _SOMETHING_TRIGRAPHIC 94 ??=define _SOMETHING_TRIGRAPHIC 95 ??= define SOMETHING_ELSE_TRIGRAPHIC_0 "??!" /* | ??!| || */ 96 ??=define SOMETHING_ELSE_TRIGRAPHIC_1 "??'" /* | ??'| ^| */ 97 ??= define SOMETHING_ELSE_TRIGRAPHIC_2 "??(" /* | ??(| [| */ 98 ??= define SOMETHING_ELSE_TRIGRAPHIC_3 "??)" /* | ??)| ]| */ 99 ??=define SOMETHING_ELSE_TRIGRAPHIC_4 "??-0" /* | ??-| ~| */ 100 ??= define SOMETHING_ELSE_TRIGRAPHIC_5 "??/ " /* | ??/| \| */ 101 ??= define SOMETHING_ELSE_TRIGRAPHIC_6 "??<" /* | ??<| {| */ 102 ??=define SOMETHING_ELSE_TRIGRAPHIC_7 "??=" /* | ??=| #| */ 103 ??= define SOMETHING_ELSE_TRIGRAPHIC_8 "??>" /* | ??>| }| */ 104 ??=endif 105 106 // test C++-style comment 107 108 #if 1 109 typdef struct empty_struct { 110 } // trailing C++-style comment should not force continuation 111 #endif 112 113 /* comments (that look like string) inside enums... */ 114 115 enum { 116 /* foo; 117 can't 118 */ 119 }; 120 121 enum flimflam { 122 flim, 123 /* foo; 124 can't 125 */ 126 flam 127 } flamflim; 128 129 /* Handle multi-line quoted strings: */ 130 __asm__ __volatile__(" 131 this 132 produces 133 no 134 output 135 "); 136 137 #define multiline "multiline 138 string" 139 140 #endif /* _H2PH_H_ */ 141