summaryrefslogtreecommitdiff
path: root/boost/wave/util/insert_whitespace_detection.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/wave/util/insert_whitespace_detection.hpp')
-rw-r--r--boost/wave/util/insert_whitespace_detection.hpp182
1 files changed, 106 insertions, 76 deletions
diff --git a/boost/wave/util/insert_whitespace_detection.hpp b/boost/wave/util/insert_whitespace_detection.hpp
index e5726965f7..0bc7b2412c 100644
--- a/boost/wave/util/insert_whitespace_detection.hpp
+++ b/boost/wave/util/insert_whitespace_detection.hpp
@@ -2,7 +2,7 @@
Boost.Wave: A Standard compliant C++ preprocessor library
Detect the need to insert a whitespace token into the output stream
-
+
http://www.boost.org/
Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
@@ -12,8 +12,8 @@
#if !defined(INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED)
#define INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED
-#include <boost/wave/wave_config.hpp>
-#include <boost/wave/token_ids.hpp>
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
// this must occur after all of the includes and before any code appears
#ifdef BOOST_HAS_ABI_HEADERS
@@ -38,11 +38,11 @@ namespace impl {
return false;
if ('U' == value[0] && value.size() < 9)
return false;
-
- typename StringT::size_type pos =
+
+ typename StringT::size_type pos =
value.find_first_not_of("0123456789abcdefABCDEF", 1);
-
- if (StringT::npos == pos ||
+
+ if (StringT::npos == pos ||
('u' == value[0] && pos > 5) ||
('U' == value[0] && pos > 9))
{
@@ -51,12 +51,12 @@ namespace impl {
return false;
}
template <typename StringT>
- inline bool
- handle_identifier(boost::wave::token_id prev,
+ inline bool
+ handle_identifier(boost::wave::token_id prev,
boost::wave::token_id before, StringT const &value)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_IDENTIFIER:
case T_NONREPLACABLE_IDENTIFIER:
case T_COMPL_ALT:
@@ -75,19 +75,22 @@ namespace impl {
case T_INTLIT:
case T_PP_NUMBER:
return (value.size() > 1 || (value[0] != 'e' && value[0] != 'E'));
-
+
// avoid constructing universal characters (\u1234)
- case TOKEN_FROM_ID('\\', UnknownTokenType):
+ case T_UNKNOWN_UNIVERSALCHAR:
return would_form_universal_char(value);
+
+ default:
+ break;
}
return false;
}
// T_INTLIT
- inline bool
+ inline bool
handle_intlit(boost::wave::token_id prev, boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_IDENTIFIER:
case T_NONREPLACABLE_IDENTIFIER:
case T_INTLIT:
@@ -95,16 +98,19 @@ namespace impl {
case T_FIXEDPOINTLIT:
case T_PP_NUMBER:
return true;
+
+ default:
+ break;
}
return false;
}
// T_FLOATLIT
- inline bool
- handle_floatlit(boost::wave::token_id prev,
+ inline bool
+ handle_floatlit(boost::wave::token_id prev,
boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_IDENTIFIER:
case T_NONREPLACABLE_IDENTIFIER:
case T_INTLIT:
@@ -112,42 +118,51 @@ namespace impl {
case T_FIXEDPOINTLIT:
case T_PP_NUMBER:
return true;
+
+ default:
+ break;
}
return false;
}
// <% T_LEFTBRACE
- inline bool
- handle_alt_leftbrace(boost::wave::token_id prev,
+ inline bool
+ handle_alt_leftbrace(boost::wave::token_id prev,
boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LESS: // <<%
case T_SHIFTLEFT: // <<<%
return true;
+
+ default:
+ break;
}
return false;
}
// <: T_LEFTBRACKET
- inline bool
- handle_alt_leftbracket(boost::wave::token_id prev,
+ inline bool
+ handle_alt_leftbracket(boost::wave::token_id prev,
boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LESS: // <<:
case T_SHIFTLEFT: // <<<:
return true;
+
+ default:
+ break;
}
return false;
}
// T_FIXEDPOINTLIT
- inline bool
- handle_fixedpointlit(boost::wave::token_id prev,
+ inline bool
+ handle_fixedpointlit(boost::wave::token_id prev,
boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_IDENTIFIER:
case T_NONREPLACABLE_IDENTIFIER:
case T_INTLIT:
@@ -155,55 +170,67 @@ namespace impl {
case T_FIXEDPOINTLIT:
case T_PP_NUMBER:
return true;
+
+ default:
+ break;
}
return false;
}
// T_DOT
- inline bool
+ inline bool
handle_dot(boost::wave::token_id prev, boost::wave::token_id before)
{
using namespace boost::wave;
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_DOT:
if (T_DOT == before)
return true; // ...
break;
+
+ default:
+ break;
}
return false;
}
// T_QUESTION_MARK
- inline bool
- handle_questionmark(boost::wave::token_id prev,
+ inline bool
+ handle_questionmark(boost::wave::token_id prev,
boost::wave::token_id /*before*/)
{
using namespace boost::wave;
- switch(static_cast<unsigned int>(prev)) {
- case TOKEN_FROM_ID('\\', UnknownTokenType): // \?
+ switch(prev) {
+ case T_UNKNOWN_UNIVERSALCHAR: // \?
case T_QUESTION_MARK: // ??
return true;
+
+ default:
+ break;
}
return false;
}
// T_NEWLINE
inline bool
- handle_newline(boost::wave::token_id prev,
+ handle_newline(boost::wave::token_id prev,
boost::wave::token_id before)
{
using namespace boost::wave;
- switch(static_cast<unsigned int>(prev)) {
+ switch(prev) {
case TOKEN_FROM_ID('\\', UnknownTokenType): // \ \n
case T_DIVIDE:
if (T_QUESTION_MARK == before)
return true; // ?/\n // may be \\n
break;
+
+ default:
+ break;
}
return false;
}
- inline bool
+ inline bool
handle_parens(boost::wave::token_id prev)
{
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LEFTPAREN:
case T_RIGHTPAREN:
case T_LEFTBRACKET:
@@ -214,56 +241,56 @@ namespace impl {
case T_COMMA:
case T_COLON:
// no insertion between parens/brackets/braces and operators
- return false;
+ return false;
default:
break;
}
return true;
}
-
+
} // namespace impl
-class insert_whitespace_detection
+class insert_whitespace_detection
{
public:
- insert_whitespace_detection(bool insert_whitespace_ = true)
+ insert_whitespace_detection(bool insert_whitespace_ = true)
: insert_whitespace(insert_whitespace_),
- prev(boost::wave::T_EOF), beforeprev(boost::wave::T_EOF)
+ prev(boost::wave::T_EOF), beforeprev(boost::wave::T_EOF)
{}
-
+
template <typename StringT>
bool must_insert(boost::wave::token_id current, StringT const &value)
{
if (!insert_whitespace)
return false; // skip whitespace insertion alltogether
-
+
using namespace boost::wave;
- switch (static_cast<unsigned int>(current)) {
+ switch (current) {
case T_NONREPLACABLE_IDENTIFIER:
- case T_IDENTIFIER:
- return impl::handle_identifier(prev, beforeprev, value);
+ case T_IDENTIFIER:
+ return impl::handle_identifier(prev, beforeprev, value);
case T_PP_NUMBER:
case T_INTLIT:
- return impl::handle_intlit(prev, beforeprev);
+ return impl::handle_intlit(prev, beforeprev);
case T_FLOATLIT:
- return impl::handle_floatlit(prev, beforeprev);
+ return impl::handle_floatlit(prev, beforeprev);
case T_STRINGLIT:
if (TOKEN_FROM_ID('L', IdentifierTokenType) == prev) // 'L'
return true;
break;
case T_LEFTBRACE_ALT:
- return impl::handle_alt_leftbrace(prev, beforeprev);
+ return impl::handle_alt_leftbrace(prev, beforeprev);
case T_LEFTBRACKET_ALT:
- return impl::handle_alt_leftbracket(prev, beforeprev);
+ return impl::handle_alt_leftbracket(prev, beforeprev);
case T_FIXEDPOINTLIT:
- return impl::handle_fixedpointlit(prev, beforeprev);
+ return impl::handle_fixedpointlit(prev, beforeprev);
case T_DOT:
- return impl::handle_dot(prev, beforeprev);
+ return impl::handle_dot(prev, beforeprev);
case T_QUESTION_MARK:
- return impl::handle_questionmark(prev, beforeprev);
+ return impl::handle_questionmark(prev, beforeprev);
case T_NEWLINE:
- return impl::handle_newline(prev, beforeprev);
+ return impl::handle_newline(prev, beforeprev);
case T_LEFTPAREN:
case T_RIGHTPAREN:
@@ -272,7 +299,7 @@ public:
case T_SEMICOLON:
case T_COMMA:
case T_COLON:
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LEFTPAREN:
case T_RIGHTPAREN:
case T_LEFTBRACKET:
@@ -285,12 +312,12 @@ public:
if (IS_CATEGORY(prev, OperatorTokenType))
return false;
break;
- }
+ }
break;
-
+
case T_LEFTBRACE:
case T_RIGHTBRACE:
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LEFTPAREN:
case T_RIGHTPAREN:
case T_LEFTBRACKET:
@@ -308,12 +335,12 @@ public:
if (IS_CATEGORY(prev, OperatorTokenType))
return false;
break;
-
+
default:
break;
}
break;
-
+
case T_MINUS:
case T_MINUSMINUS:
case T_MINUSASSIGN:
@@ -324,7 +351,7 @@ public:
if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)
return true;
break;
-
+
case T_PLUS:
case T_PLUSPLUS:
case T_PLUSASSIGN:
@@ -335,7 +362,7 @@ public:
if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)
return true;
break;
-
+
case T_DIVIDE:
case T_DIVIDEASSIGN:
if (T_DIVIDE == prev)
@@ -345,10 +372,10 @@ public:
if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)
return true;
break;
-
+
case T_EQUAL:
case T_ASSIGN:
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_PLUSASSIGN:
case T_MINUSASSIGN:
case T_DIVIDEASSIGN:
@@ -379,7 +406,7 @@ public:
if (T_QUESTION_MARK == beforeprev)
return true;
break;
-
+
default:
if (!impl::handle_parens(prev))
return false;
@@ -416,21 +443,21 @@ public:
if (T_AND == prev || T_ANDAND == prev)
return true;
break;
-
+
case T_OR:
if (!impl::handle_parens(prev))
return false;
if (T_OR == prev)
return true;
break;
-
+
case T_XOR:
if (!impl::handle_parens(prev))
return false;
if (T_XOR == prev)
return true;
break;
-
+
case T_COMPL_ALT:
case T_OR_ALT:
case T_AND_ALT:
@@ -440,7 +467,7 @@ public:
case T_ORASSIGN_ALT:
case T_XORASSIGN_ALT:
case T_NOTEQUAL_ALT:
- switch (static_cast<unsigned int>(prev)) {
+ switch (prev) {
case T_LEFTPAREN:
case T_RIGHTPAREN:
case T_LEFTBRACKET:
@@ -451,7 +478,7 @@ public:
case T_COMMA:
case T_COLON:
// no insertion between parens/brackets/braces and operators
- return false;
+ return false;
case T_IDENTIFIER:
if (T_NONREPLACABLE_IDENTIFIER == prev ||
@@ -460,16 +487,16 @@ public:
return true;
}
break;
-
+
default:
break;
}
break;
-
+
case T_STAR:
if (T_STAR == prev)
return false; // '*****' do not need to be separated
- if (T_GREATER== prev &&
+ if (T_GREATER== prev &&
(T_MINUS == beforeprev || T_MINUSMINUS == beforeprev)
)
{
@@ -481,10 +508,13 @@ public:
if (T_POUND == prev)
return true;
break;
+
+ default:
+ break;
}
// FIXME: else, handle operators separately (will catch to many cases)
-// if (IS_CATEGORY(current, OperatorTokenType) &&
+// if (IS_CATEGORY(current, OperatorTokenType) &&
// IS_CATEGORY(prev, OperatorTokenType))
// {
// return true; // operators must be delimited always
@@ -498,7 +528,7 @@ public:
prev = next_id;
}
}
-
+
private:
bool insert_whitespace; // enable this component
boost::wave::token_id prev; // the previous analyzed token
@@ -507,7 +537,7 @@ private:
///////////////////////////////////////////////////////////////////////////////
} // namespace util
-} // namespace wave
+} // namespace wave
} // namespace boost
// the suffix header occurs after all of the code