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 | ||
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) | |
79c1b905 | 41 | # error "Nup, can't go on" /* ' /* stupid font-lock-mode */ |
1d2dff63 GS |
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 | |
bf076876 AT |
58 | |
59 | /* Test passing through the alien constructs (perlbug #34493) */ | |
60 | #ifdef __LANGUAGE_PASCAL__ | |
61 | function Tru64_Pascal(n: Integer): Integer; | |
62 | #endif | |
1d2dff63 GS |
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 | ||
b7bcf494 PP |
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 | ||
edf6e4ec HS |
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 | ||
d4386644 JH |
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 | ||
ab5fe4d6 KS |
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 | ||
1d2dff63 | 140 | #endif /* _H2PH_H_ */ |