Commit | Line | Data |
---|---|---|
1d2dff63 GS |
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 | ||
c0cc52e9 NT |
29 | /* Test #undef'ining an existing constant function */ |
30 | #define NOTTRUE 0 | |
31 | #undef NOTTRUE | |
32 | ||
1d2dff63 GS |
33 | /* Test #ifdef */ |
34 | #ifdef __SOME_UNIMPORTANT_PROPERTY | |
35 | #define MIN(a,b) ((a) < (b) ? (a) : (b)) | |
36 | #endif /* __SOME_UNIMPORTANT_PROPERTY */ | |
37 | ||
38 | /* | |
15a8c21e JK |
39 | * Test #if, #elif, #else, #endif, #warn and #error, and '!' |
40 | * Also test whitespace between the '#' and the command | |
1d2dff63 GS |
41 | */ |
42 | #if !(defined __SOMETHING_MORE_IMPORTANT) | |
43 | # warn Be careful... | |
44 | #elif !(defined __SOMETHING_REALLY_REALLY_IMPORTANT) | |
79c1b905 | 45 | # error "Nup, can't go on" /* ' /* stupid font-lock-mode */ |
1d2dff63 GS |
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 | |
bf076876 AT |
62 | |
63 | /* Test passing through the alien constructs (perlbug #34493) */ | |
64 | #ifdef __LANGUAGE_PASCAL__ | |
65 | function Tru64_Pascal(n: Integer): Integer; | |
66 | #endif | |
1d2dff63 GS |
67 | |
68 | /* | |
69 | * Test #include, #import and #include_next | |
70 | * #include_next is difficult to test, it really depends on the actual | |
15a8c21e JK |
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 | |
1d2dff63 GS |
73 | * your equivalent is... |
74 | */ | |
c1a2df76 | 75 | #if 0 |
1d2dff63 GS |
76 | #include <sys/socket.h> |
77 | #import "sys/ioctl.h" | |
78 | #include_next <sys/fcntl.h> | |
c1a2df76 | 79 | #endif |
1d2dff63 GS |
80 | |
81 | /* typedefs should be ignored */ | |
82 | typedef 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 | ||
93 | typedef enum _days_of_week { sun, mon, tue, wed, thu, fri, sat, Sun=0, Mon, | |
94 | Tue, Wed, Thu, Fri, Sat } days_of_week; | |
95 | ||
b7bcf494 PP |
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 | ||
edf6e4ec HS |
112 | // test C++-style comment |
113 | ||
114 | #if 1 | |
115 | typdef struct empty_struct { | |
116 | } // trailing C++-style comment should not force continuation | |
117 | #endif | |
118 | ||
d4386644 JH |
119 | /* comments (that look like string) inside enums... */ |
120 | ||
121 | enum { | |
122 | /* foo; | |
123 | can't | |
124 | */ | |
125 | }; | |
126 | ||
127 | enum flimflam { | |
128 | flim, | |
129 | /* foo; | |
130 | can't | |
131 | */ | |
132 | flam | |
133 | } flamflim; | |
134 | ||
112a1457 FR |
135 | static __inline__ int blli_in_use(struct atm_blli blli) |
136 | { | |
137 | return blli.l2_proto || blli.l3_proto; | |
138 | } | |
139 | ||
ab5fe4d6 KS |
140 | /* Handle multi-line quoted strings: */ |
141 | __asm__ __volatile__(" | |
142 | this | |
143 | produces | |
144 | no | |
145 | output | |
146 | "); | |
147 | ||
148 | #define multiline "multiline | |
149 | string" | |
150 | ||
1d2dff63 | 151 | #endif /* _H2PH_H_ */ |