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 #undef'ining an existing constant function */ 30#define NOTTRUE 0 31#undef NOTTRUE 32 33/* Test #ifdef */ 34#ifdef __SOME_UNIMPORTANT_PROPERTY 35#define MIN(a,b) ((a) < (b) ? (a) : (b)) 36#endif /* __SOME_UNIMPORTANT_PROPERTY */ 37 38/* 39 * Test #if, #elif, #else, #endif, #warn and #error, and '!' 40 * Also test whitespace between the '#' and the command 41 */ 42#if !(defined __SOMETHING_MORE_IMPORTANT) 43# warn Be careful... 44#elif !(defined __SOMETHING_REALLY_REALLY_IMPORTANT) 45# error "Nup, can't go on" /* ' /* stupid font-lock-mode */ 46#else /* defined __SOMETHING_MORE_IMPORTANT && defined __SOMETHING_REALLY_REALLY_IMPORTANT */ 47# define EVERYTHING_IS_OK 48#endif 49 50/* Test && and || */ 51#undef WHATEVER 52#if (!((defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO)) \ 53 || defined __SOMETHING_OVERPOWERING) 54# define WHATEVER 6 55#elif !(defined __SOMETHING_TRIVIAL) /* defined __SOMETHING_LESS_SO */ 56# define WHATEVER 7 57#elif !(defined __SOMETHING_LESS_SO) /* defined __SOMETHING_TRIVIAL */ 58# define WHATEVER 8 59#else /* defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO */ 60# define WHATEVER 1000 61#endif 62 63/* Test passing through the alien constructs (perlbug #34493) */ 64#ifdef __LANGUAGE_PASCAL__ 65function Tru64_Pascal(n: Integer): Integer; 66#endif 67 68/* 69 * Test #include, #import and #include_next 70 * #include_next is difficult to test, it really depends on the actual 71 * circumstances - for example, '#include_next <limits.h>' on a Linux system 72 * with 'use lib qw(/opt/perl5/lib/site_perl/i586-linux/linux);' or whatever 73 * your equivalent is... 74 */ 75#if 0 76#include <sys/socket.h> 77#import "sys/ioctl.h" 78#include_next <sys/fcntl.h> 79#endif 80 81/* typedefs should be ignored */ 82typedef struct a_struct { 83 int typedefs_should; 84 char be_ignored; 85 long as_well; 86} a_typedef; 87 88/* 89 * however, typedefs of enums and just plain enums should end up being treated 90 * like a bunch of #defines... 91 */ 92 93typedef enum _days_of_week { sun, mon, tue, wed, thu, fri, sat, Sun=0, Mon, 94 Tue, Wed, Thu, Fri, Sat } days_of_week; 95 96/* 97 * Some moderate flexing of tri-graph pre substitution. 98 */ 99??=ifndef _SOMETHING_TRIGRAPHIC 100??=define _SOMETHING_TRIGRAPHIC 101??= define SOMETHING_ELSE_TRIGRAPHIC_0 "??!" /* | ??!| || */ 102 ??=define SOMETHING_ELSE_TRIGRAPHIC_1 "??'" /* | ??'| ^| */ 103??= define SOMETHING_ELSE_TRIGRAPHIC_2 "??(" /* | ??(| [| */ 104 ??= define SOMETHING_ELSE_TRIGRAPHIC_3 "??)" /* | ??)| ]| */ 105??=define SOMETHING_ELSE_TRIGRAPHIC_4 "??-0" /* | ??-| ~| */ 106 ??= define SOMETHING_ELSE_TRIGRAPHIC_5 "??/ " /* | ??/| \| */ 107??= define SOMETHING_ELSE_TRIGRAPHIC_6 "??<" /* | ??<| {| */ 108??=define SOMETHING_ELSE_TRIGRAPHIC_7 "??=" /* | ??=| #| */ 109??= define SOMETHING_ELSE_TRIGRAPHIC_8 "??>" /* | ??>| }| */ 110 ??=endif 111 112// test C++-style comment 113 114#if 1 115typdef struct empty_struct { 116} // trailing C++-style comment should not force continuation 117#endif 118 119/* comments (that look like string) inside enums... */ 120 121enum { 122 /* foo; 123 can't 124 */ 125 }; 126 127enum flimflam { 128 flim, 129 /* foo; 130 can't 131 */ 132 flam 133 } flamflim; 134 135static __inline__ int blli_in_use(struct atm_blli blli) 136{ 137 return blli.l2_proto || blli.l3_proto; 138} 139 140/* Handle multi-line quoted strings: */ 141__asm__ __volatile__(" 142 this 143 produces 144 no 145 output 146"); 147 148#define multiline "multiline 149string" 150 151#endif /* _H2PH_H_ */ 152