3 static const opt_extension_t opt_extension_matrix[] = {
5 * same as GNUC but no dollar identifiers, they don't make much sense
6 * and in C11 mode, opposed to GNUC which is C99
8 [STANDARD_LICEC] = EXTENSION_TYPEOF | EXTENSION_OMITOPCOND |
9 EXTENSION_STATEMENTEXPRS | EXTENSION_NOMEMBERSTRUCT |
10 EXTENSION_CASERANGES | EXTENSION_ESCCHAR |
11 EXTENSION_INCOMPLETEENUM | EXTENSION_BINARYCONSTANTS |
12 EXTENSION_ARITHMETICVOID | EXTENSION_LABELASVALUES |
13 EXTENSION_ZEROARRAYS | EXTENSION_ZEROARRAYS |
14 EXTENSION_NONCONSTINIT | EXTENSION_NONSTANDARD,
17 * standard GNUC format, TODO: -std=gnuc90, which is the same as this
18 * but C90, instead of C90
20 [STANDARD_GNUC] = EXTENSION_TYPEOF | EXTENSION_OMITOPCOND |
21 EXTENSION_STATEMENTEXPRS | EXTENSION_NOMEMBERSTRUCT |
22 EXTENSION_CASERANGES | EXTENSION_ESCCHAR |
23 EXTENSION_INCOMPLETEENUM | EXTENSION_BINARYCONSTANTS |
24 EXTENSION_ARITHMETICVOID | EXTENSION_LABELASVALUES |
25 EXTENSION_ZEROARRAYS | EXTENSION_ZEROARRAYS |
26 EXTENSION_NONCONSTINIT | EXTENSION_DOLLAR |
27 EXTENSION_NONSTANDARD,
34 static opt_std_t standard = STANDARD_LICEC;
35 static opt_extension_t extensions = ~0;
37 bool opt_std_test(opt_std_t std) {
38 return (standard == std);
41 bool opt_extension_test(opt_extension_t ext) {
42 return (extensions & ext);
45 void opt_std_set(opt_std_t std) {
47 extensions = opt_extension_matrix[std];
50 void opt_extension_set(opt_extension_t ext) {
51 if (opt_extension_matrix[standard] & ext)