Line data Source code
1 : /*============================================================================= 2 : Boost.Wave: A Standard compliant C++ preprocessor library 3 : Definition of the various language support constants 4 : 5 : http://www.boost.org/ 6 : 7 : Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost 8 : Software License, Version 1.0. (See accompanying file 9 : LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 10 : =============================================================================*/ 11 : #if !defined(LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED) 12 : #define LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED 13 : 14 : #include <boost/wave/wave_config.hpp> 15 : 16 : // this must occur after all of the includes and before any code appears 17 : #ifdef BOOST_HAS_ABI_HEADERS 18 : #include BOOST_ABI_PREFIX 19 : #endif 20 : 21 : /////////////////////////////////////////////////////////////////////////////// 22 : namespace boost { 23 : namespace wave { 24 : 25 : enum language_support { 26 : // support flags for C++98 27 : support_normal = 0x01, 28 : support_cpp = support_normal, 29 : 30 : support_option_long_long = 0x02, 31 : 32 : #if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0 33 : // support flags for C99 34 : support_option_variadics = 0x04, 35 : support_c99 = support_option_variadics | support_option_long_long | 0x08, 36 : #endif 37 : #if BOOST_WAVE_SUPPORT_CPP0X != 0 38 : support_option_no_newline_at_end_of_file = 0x20, 39 : 40 : support_cpp0x = support_option_variadics | support_option_long_long | 41 : support_option_no_newline_at_end_of_file | 0x10, 42 : support_cpp11 = support_cpp0x, 43 : #endif 44 : 45 : support_option_mask = 0xFFC0, 46 : support_option_emit_contnewlines = 0x0040, 47 : support_option_insert_whitespace = 0x0080, 48 : support_option_preserve_comments = 0x0100, 49 : support_option_no_character_validation = 0x0200, 50 : support_option_convert_trigraphs = 0x0400, 51 : support_option_single_line = 0x0800, 52 : support_option_prefer_pp_numbers = 0x1000, 53 : support_option_emit_line_directives = 0x2000, 54 : support_option_include_guard_detection = 0x4000, 55 : support_option_emit_pragma_directives = 0x8000 56 : }; 57 : 58 : /////////////////////////////////////////////////////////////////////////////// 59 : // 60 : // need_cpp 61 : // 62 : // Extract, if the language to support is C++98 63 : // 64 : /////////////////////////////////////////////////////////////////////////////// 65 : inline bool 66 : need_cpp(language_support language) 67 : { 68 : return (language & ~support_option_mask) == support_cpp; 69 : } 70 : 71 : /////////////////////////////////////////////////////////////////////////////// 72 : // 73 : // need_cpp0x 74 : // 75 : // Extract, if the language to support is C++11 76 : // 77 : /////////////////////////////////////////////////////////////////////////////// 78 : #if BOOST_WAVE_SUPPORT_CPP0X != 0 79 : 80 : inline bool 81 0 : need_cpp0x(language_support language) 82 : { 83 0 : return (language & ~support_option_mask) == support_cpp0x; 84 : } 85 : 86 : #else 87 : 88 : inline bool 89 : need_cpp0x(language_support language) 90 : { 91 : return false; 92 : } 93 : 94 : #endif 95 : 96 : #if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0 97 : /////////////////////////////////////////////////////////////////////////////// 98 : // 99 : // need_c99 100 : // 101 : // Extract, if the language to support is C99 102 : // 103 : /////////////////////////////////////////////////////////////////////////////// 104 : inline bool 105 0 : need_c99(language_support language) 106 : { 107 0 : return (language & ~support_option_mask) == support_c99; 108 : } 109 : 110 : #else // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0 111 : 112 : /////////////////////////////////////////////////////////////////////////////// 113 : inline bool 114 : need_variadics(language_support language) 115 : { 116 : return false; 117 : } 118 : 119 : /////////////////////////////////////////////////////////////////////////////// 120 : inline language_support 121 : enable_variadics(language_support language, bool enable = true) 122 : { 123 : return language; 124 : } 125 : 126 : ////////////////////////////////////////////////////////////////////////////// 127 : inline bool 128 : need_c99(language_support language) 129 : { 130 : return false; 131 : } 132 : 133 : #endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0 134 : 135 : /////////////////////////////////////////////////////////////////////////////// 136 : // 137 : // get_support_options 138 : // 139 : // Set preserve comments support in the language to support 140 : // 141 : /////////////////////////////////////////////////////////////////////////////// 142 : inline language_support 143 : get_support_options(language_support language) 144 : { 145 : return static_cast<language_support>(language & support_option_mask); 146 : } 147 : 148 : /////////////////////////////////////////////////////////////////////////////// 149 : // 150 : // set_support_options 151 : // 152 : // Set language option (for fine tuning of lexer behavior) 153 : // 154 : /////////////////////////////////////////////////////////////////////////////// 155 : inline language_support 156 : set_support_options(language_support language, language_support option) 157 : { 158 : return static_cast<language_support>( 159 : (language & ~support_option_mask) | (option & support_option_mask)); 160 : } 161 : 162 : /////////////////////////////////////////////////////////////////////////////// 163 : // Get and set different language options 164 : #define BOOST_WAVE_NEED_OPTION(option) \ 165 : inline bool need_ ## option(language_support language) \ 166 : { \ 167 : return (language & support_option_ ## option) ? true : false; \ 168 : } \ 169 : /**/ 170 : 171 : #define BOOST_WAVE_ENABLE_OPTION(option) \ 172 : inline language_support \ 173 : enable_ ## option(language_support language, bool enable = true) \ 174 : { \ 175 : if (enable) \ 176 : return static_cast<language_support>(language | support_option_ ## option); \ 177 : return static_cast<language_support>(language & ~support_option_ ## option); \ 178 : } \ 179 : /**/ 180 : 181 : #define BOOST_WAVE_OPTION(option) \ 182 : BOOST_WAVE_NEED_OPTION(option) \ 183 : BOOST_WAVE_ENABLE_OPTION(option) \ 184 : /**/ 185 : 186 : /////////////////////////////////////////////////////////////////////////////// 187 0 : BOOST_WAVE_OPTION(long_long) // support_option_long_long 188 : BOOST_WAVE_OPTION(no_character_validation) // support_option_no_character_validation 189 0 : BOOST_WAVE_OPTION(preserve_comments) // support_option_preserve_comments 190 0 : BOOST_WAVE_OPTION(prefer_pp_numbers) // support_option_prefer_pp_numbers 191 0 : BOOST_WAVE_OPTION(emit_line_directives) // support_option_emit_line_directives 192 0 : BOOST_WAVE_OPTION(single_line) // support_option_single_line 193 : BOOST_WAVE_OPTION(convert_trigraphs) // support_option_convert_trigraphs 194 : #if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0 195 0 : BOOST_WAVE_OPTION(include_guard_detection) // support_option_include_guard_detection 196 : #endif 197 : #if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0 198 0 : BOOST_WAVE_OPTION(variadics) // support_option_variadics 199 : #endif 200 : #if BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES != 0 201 0 : BOOST_WAVE_OPTION(emit_pragma_directives) // support_option_emit_pragma_directives 202 : #endif 203 0 : BOOST_WAVE_OPTION(insert_whitespace) // support_option_insert_whitespace 204 : BOOST_WAVE_OPTION(emit_contnewlines) // support_option_emit_contnewlines 205 : #if BOOST_WAVE_SUPPORT_CPP0X != 0 206 0 : BOOST_WAVE_OPTION(no_newline_at_end_of_file) // support_no_newline_at_end_of_file 207 : #endif 208 : 209 : #undef BOOST_WAVE_NEED_OPTION 210 : #undef BOOST_WAVE_ENABLE_OPTION 211 : #undef BOOST_WAVE_OPTION 212 : 213 : /////////////////////////////////////////////////////////////////////////////// 214 : } // namespace wave 215 : } // namespace boost 216 : 217 : // the suffix header occurs after all of the code 218 : #ifdef BOOST_HAS_ABI_HEADERS 219 : #include BOOST_ABI_SUFFIX 220 : #endif 221 : 222 : #endif // !defined(LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED)