| /*============================================================================= |
| Boost.Wave: A Standard compliant C++ preprocessor library |
| |
| http://www.boost.org/ |
| |
| Copyright (c) 2001-2009 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 <string> |
| #include <boost/throw_exception.hpp> |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // helper macro for throwing exceptions |
| #if !defined(BOOST_WAVE_THROW) |
| #ifdef BOOST_NO_STRINGSTREAM |
| #include <strstream> |
| #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 <sstream> |
| #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 <strstream> |
| #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 <sstream> |
| #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 <strstream> |
| #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 <sstream> |
| #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) |