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_ */
|
---|