/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library http://www.boost.org/ Copyright (c) 2001-2010 Hartmut Kaiser. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #if !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED) #define BOOST_WAVE_CPP_THROW_HPP_INCLUDED #include #include /////////////////////////////////////////////////////////////////////////////// // helper macro for throwing exceptions #if !defined(BOOST_WAVE_THROW) #ifdef BOOST_NO_STRINGSTREAM #include #define BOOST_WAVE_THROW(cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::strstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ std::string throwmsg = stream.str(); stream.freeze(false); \ boost::throw_exception(cls(throwmsg.c_str(), cls::code, \ (act_pos).get_line(), (act_pos).get_column(), \ (act_pos).get_file().c_str())); \ } \ /**/ #define BOOST_WAVE_THROW_CTX(ctx, cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::strstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ std::string throwmsg = stream.str(); stream.freeze(false); \ ctx.get_hooks().throw_exception(ctx.derived(), cls(throwmsg.c_str(), \ cls::code, (act_pos).get_line(), (act_pos).get_column(), \ (act_pos).get_file().c_str())); \ } \ /**/ #else #include #define BOOST_WAVE_THROW(cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::stringstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ boost::throw_exception(cls(stream.str().c_str(), cls::code, \ (act_pos).get_line(), (act_pos).get_column(), \ (act_pos).get_file().c_str())); \ } \ /**/ #define BOOST_WAVE_THROW_CTX(ctx, cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::stringstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ ctx.get_hooks().throw_exception(ctx.derived(), \ cls(stream.str().c_str(), cls::code, (act_pos).get_line(), \ (act_pos).get_column(), (act_pos).get_file().c_str())); \ } \ /**/ #endif // BOOST_NO_STRINGSTREAM #endif // BOOST_WAVE_THROW /////////////////////////////////////////////////////////////////////////////// // helper macro for throwing exceptions with additional parameter #if !defined(BOOST_WAVE_THROW_NAME) #ifdef BOOST_NO_STRINGSTREAM #include #define BOOST_WAVE_THROW_NAME_CTX(ctx, cls, code, msg, act_pos, name) \ { \ using namespace boost::wave; \ std::strstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ std::string throwmsg = stream.str(); stream.freeze(false); \ ctx.get_hooks().throw_exception(ctx.derived(), cls(throwmsg.c_str(), \ cls::code, (act_pos).get_line(), (act_pos).get_column(), \ (act_pos).get_file().c_str(), (name))); \ } \ /**/ #else #include #define BOOST_WAVE_THROW_NAME_CTX(ctx, cls, code, msg, act_pos, name) \ { \ using namespace boost::wave; \ std::stringstream stream; \ stream << cls::severity_text(cls::code) << ": " \ << cls::error_text(cls::code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ ctx.get_hooks().throw_exception(ctx.derived(), \ cls(stream.str().c_str(), cls::code, (act_pos).get_line(), \ (act_pos).get_column(), (act_pos).get_file().c_str(), (name))); \ } \ /**/ #endif // BOOST_NO_STRINGSTREAM #endif // BOOST_WAVE_THROW_NAME /////////////////////////////////////////////////////////////////////////////// // helper macro for throwing exceptions with additional parameter #if !defined(BOOST_WAVE_THROW_VAR) #ifdef BOOST_NO_STRINGSTREAM #include #define BOOST_WAVE_THROW_VAR_CTX(ctx, cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::strstream stream; \ stream << cls::severity_text(code) << ": " \ << cls::error_text(code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ std::string throwmsg = stream.str(); stream.freeze(false); \ ctx.get_hooks().throw_exception(ctx.derived(), cls(throwmsg.c_str(), \ code, (act_pos).get_line(), (act_pos).get_column(), \ (act_pos).get_file().c_str())); \ } \ /**/ #else #include #define BOOST_WAVE_THROW_VAR_CTX(ctx, cls, code, msg, act_pos) \ { \ using namespace boost::wave; \ std::stringstream stream; \ stream << cls::severity_text(code) << ": " \ << cls::error_text(code); \ if ((msg)[0] != 0) stream << ": " << (msg); \ stream << std::ends; \ ctx.get_hooks().throw_exception(ctx.derived(), \ cls(stream.str().c_str(), code, (act_pos).get_line(), \ (act_pos).get_column(), (act_pos).get_file().c_str())); \ } \ /**/ #endif // BOOST_NO_STRINGSTREAM #endif // BOOST_WAVE_THROW_VAR #endif // !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)