[857] | 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-2005 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 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 17 | namespace boost {
|
---|
| 18 | namespace wave {
|
---|
| 19 |
|
---|
| 20 | enum language_support {
|
---|
| 21 | // support flags for C++98
|
---|
| 22 | support_normal = 0x01,
|
---|
| 23 | support_cpp = support_normal,
|
---|
| 24 |
|
---|
| 25 | support_long_long = 0x02,
|
---|
| 26 |
|
---|
| 27 | #if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
|
---|
| 28 | // support flags for C99
|
---|
| 29 | support_variadics = 0x04,
|
---|
| 30 | support_c99 = support_variadics | support_long_long | 0x08,
|
---|
| 31 | #endif
|
---|
| 32 |
|
---|
| 33 | support_option_mask = 0xFF00,
|
---|
| 34 | support_option_preserve_comments = 0x0100,
|
---|
| 35 | support_option_no_character_validation = 0x0200,
|
---|
| 36 | support_option_convert_trigraphs = 0x0400,
|
---|
| 37 | support_option_single_line = 0x0800
|
---|
| 38 | };
|
---|
| 39 |
|
---|
| 40 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 41 | //
|
---|
| 42 | // need_cpp
|
---|
| 43 | //
|
---|
| 44 | // Extract, if the language to support is C++98
|
---|
| 45 | //
|
---|
| 46 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 47 | inline bool
|
---|
| 48 | need_cpp(language_support language)
|
---|
| 49 | {
|
---|
| 50 | return (language & ~support_option_mask) == support_cpp;
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 54 | //
|
---|
| 55 | // need_long_long
|
---|
| 56 | //
|
---|
| 57 | // Extract, if the language to support needs long long support
|
---|
| 58 | //
|
---|
| 59 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 60 | inline bool
|
---|
| 61 | need_long_long(language_support language)
|
---|
| 62 | {
|
---|
| 63 | return (language & support_long_long) ? true : false;
|
---|
| 64 | }
|
---|
| 65 |
|
---|
| 66 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 67 | //
|
---|
| 68 | // enable_long_long
|
---|
| 69 | //
|
---|
| 70 | // Set long long support in the language to support
|
---|
| 71 | //
|
---|
| 72 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 73 | inline language_support
|
---|
| 74 | enable_long_long(language_support language, bool enable = true)
|
---|
| 75 | {
|
---|
| 76 | if (enable)
|
---|
| 77 | return static_cast<language_support>(language | support_long_long);
|
---|
| 78 | return static_cast<language_support>(language & ~support_long_long);
|
---|
| 79 | }
|
---|
| 80 |
|
---|
| 81 | #if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
|
---|
| 82 |
|
---|
| 83 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 84 | //
|
---|
| 85 | // need_variadics
|
---|
| 86 | //
|
---|
| 87 | // Extract, if the language to support needs variadics support
|
---|
| 88 | //
|
---|
| 89 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 90 | inline bool
|
---|
| 91 | need_variadics(language_support language)
|
---|
| 92 | {
|
---|
| 93 | return (language & support_variadics) ? true : false;
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 97 | //
|
---|
| 98 | // enable_variadics
|
---|
| 99 | //
|
---|
| 100 | // Set variadics support in the language to support
|
---|
| 101 | //
|
---|
| 102 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 103 | inline language_support
|
---|
| 104 | enable_variadics(language_support language, bool enable = true)
|
---|
| 105 | {
|
---|
| 106 | if (enable)
|
---|
| 107 | return static_cast<language_support>(language | support_variadics);
|
---|
| 108 | return static_cast<language_support>(language & ~support_variadics);
|
---|
| 109 | }
|
---|
| 110 |
|
---|
| 111 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 112 | //
|
---|
| 113 | // need_c99
|
---|
| 114 | //
|
---|
| 115 | // Extract, if the language to support is C99
|
---|
| 116 | //
|
---|
| 117 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 118 | inline bool
|
---|
| 119 | need_c99(language_support language)
|
---|
| 120 | {
|
---|
| 121 | return (language & ~support_option_mask) == support_c99;
|
---|
| 122 | }
|
---|
| 123 |
|
---|
| 124 | #else // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
|
---|
| 125 |
|
---|
| 126 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 127 | inline bool
|
---|
| 128 | need_variadics(language_support language)
|
---|
| 129 | {
|
---|
| 130 | return false;
|
---|
| 131 | }
|
---|
| 132 |
|
---|
| 133 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 134 | inline language_support
|
---|
| 135 | enable_variadics(language_support language, bool enable = true)
|
---|
| 136 | {
|
---|
| 137 | return language;
|
---|
| 138 | }
|
---|
| 139 |
|
---|
| 140 | //////////////////////////////////////////////////////////////////////////////
|
---|
| 141 | inline bool
|
---|
| 142 | need_c99(language_support language)
|
---|
| 143 | {
|
---|
| 144 | return false;
|
---|
| 145 | }
|
---|
| 146 |
|
---|
| 147 | #endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
|
---|
| 148 |
|
---|
| 149 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 150 | //
|
---|
| 151 | // need_preserve_comments
|
---|
| 152 | //
|
---|
| 153 | // Extract, if the comments have to be preserved
|
---|
| 154 | //
|
---|
| 155 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 156 | inline bool
|
---|
| 157 | need_preserve_comments(language_support language)
|
---|
| 158 | {
|
---|
| 159 | return (language & support_option_preserve_comments) ? true : false;
|
---|
| 160 | }
|
---|
| 161 |
|
---|
| 162 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 163 | //
|
---|
| 164 | // enable_preserve_comments
|
---|
| 165 | //
|
---|
| 166 | // Set preserve comments support in the language to support
|
---|
| 167 | //
|
---|
| 168 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 169 | inline language_support
|
---|
| 170 | enable_preserve_comments(language_support language, bool enable = true)
|
---|
| 171 | {
|
---|
| 172 | if (enable)
|
---|
| 173 | return static_cast<language_support>(language | support_option_preserve_comments);
|
---|
| 174 | return static_cast<language_support>(language & ~support_option_preserve_comments);
|
---|
| 175 | }
|
---|
| 176 |
|
---|
| 177 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 178 | //
|
---|
| 179 | // get_support_options
|
---|
| 180 | //
|
---|
| 181 | // Set preserve comments support in the language to support
|
---|
| 182 | //
|
---|
| 183 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 184 | inline language_support
|
---|
| 185 | get_support_options(language_support language)
|
---|
| 186 | {
|
---|
| 187 | return static_cast<language_support>(language & support_option_mask);
|
---|
| 188 | }
|
---|
| 189 |
|
---|
| 190 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 191 | //
|
---|
| 192 | // set_support_options
|
---|
| 193 | //
|
---|
| 194 | // Set language option (for fine tuning of lexer bahaviour)
|
---|
| 195 | //
|
---|
| 196 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 197 | inline language_support
|
---|
| 198 | set_support_options(language_support language, language_support option)
|
---|
| 199 | {
|
---|
| 200 | return static_cast<language_support>(
|
---|
| 201 | (language & ~support_option_mask) | (option & support_option_mask));
|
---|
| 202 | }
|
---|
| 203 |
|
---|
| 204 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 205 | } // namespace wave
|
---|
| 206 | } // namespace boost
|
---|
| 207 |
|
---|
| 208 | #endif // !defined(LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED)
|
---|