diff --git a/include/boost/property_tree/detail/info_parser_read.hpp b/include/boost/property_tree/detail/info_parser_read.hpp index 87ef2cd489..b46643ab2b 100644 --- a/include/boost/property_tree/detail/info_parser_read.hpp +++ b/include/boost/property_tree/detail/info_parser_read.hpp @@ -13,6 +13,7 @@ #include "boost/property_tree/ptree.hpp" #include "boost/property_tree/detail/info_parser_error.hpp" #include "boost/property_tree/detail/info_parser_utils.hpp" +#include "boost/core/no_exceptions_support.hpp" #include #include #include @@ -210,7 +211,7 @@ namespace boost { namespace property_tree { namespace info_parser std::stack stack; stack.push(&pt); // Push root ptree on stack initially - try { + BOOST_TRY { // While there are characters in the stream while (stream.good()) { // Read one line from stream @@ -372,8 +373,9 @@ namespace boost { namespace property_tree { namespace info_parser BOOST_PROPERTY_TREE_THROW(info_parser_error("unmatched {", "", 0)); } - catch (info_parser_error &e) + BOOST_CATCH (info_parser_error &e) { + #ifndef BOOST_NO_EXCEPTIONS // If line undefined rethrow error with correct filename and line if (e.line() == 0) { @@ -381,8 +383,9 @@ namespace boost { namespace property_tree { namespace info_parser } else BOOST_PROPERTY_TREE_THROW(e); - + #endif } + BOOST_CATCH_END } diff --git a/include/boost/property_tree/detail/rapidxml.hpp b/include/boost/property_tree/detail/rapidxml.hpp index 9e3d76af9d..e890feb18a 100644 --- a/include/boost/property_tree/detail/rapidxml.hpp +++ b/include/boost/property_tree/detail/rapidxml.hpp @@ -28,7 +28,7 @@ #include // For std::exception -#define BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where) +#define BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR(what, where) boost::throw_exception(parse_error(what, where)) namespace boost { namespace property_tree { namespace detail {namespace rapidxml { diff --git a/include/boost/property_tree/detail/xml_parser_read_rapidxml.hpp b/include/boost/property_tree/detail/xml_parser_read_rapidxml.hpp index 9c04219189..b6f5820402 100644 --- a/include/boost/property_tree/detail/xml_parser_read_rapidxml.hpp +++ b/include/boost/property_tree/detail/xml_parser_read_rapidxml.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include namespace boost { namespace property_tree { namespace xml_parser @@ -101,7 +102,7 @@ namespace boost { namespace property_tree { namespace xml_parser xml_parser_error("read error", filename, 0)); v.push_back(0); // zero-terminate - try { + BOOST_TRY { // Parse using appropriate flags const int f_tws = parse_normalize_whitespace | parse_trim_whitespace; @@ -131,12 +132,15 @@ namespace boost { namespace property_tree { namespace xml_parser // Swap local and result ptrees pt.swap(local); - } catch (parse_error &e) { + } BOOST_CATCH (parse_error &e) { + #ifndef BOOST_NO_EXCEPTIONS long line = static_cast( std::count(&v.front(), e.where(), Ch('\n')) + 1); BOOST_PROPERTY_TREE_THROW( xml_parser_error(e.what(), filename, line)); + #endif } + BOOST_CATCH_END } } } } diff --git a/include/boost/property_tree/info_parser.hpp b/include/boost/property_tree/info_parser.hpp index 683ddad46d..abdc8a3afb 100644 --- a/include/boost/property_tree/info_parser.hpp +++ b/include/boost/property_tree/info_parser.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include namespace boost { namespace property_tree { namespace info_parser @@ -43,11 +44,12 @@ namespace boost { namespace property_tree { namespace info_parser void read_info(std::basic_istream &stream, Ptree &pt, const Ptree &default_ptree) { - try { + BOOST_TRY { read_info(stream, pt); - } catch(file_parser_error &) { + } BOOST_CATCH(file_parser_error &) { pt = default_ptree; } + BOOST_CATCH_END } /** @@ -87,11 +89,12 @@ namespace boost { namespace property_tree { namespace info_parser const Ptree &default_ptree, const std::locale &loc = std::locale()) { - try { + BOOST_TRY { read_info(filename, pt, loc); - } catch(file_parser_error &) { + } BOOST_CATCH(file_parser_error &) { pt = default_ptree; } + BOOST_CATCH_END } /** diff --git a/include/boost/property_tree/ini_parser.hpp b/include/boost/property_tree/ini_parser.hpp index 50d3c97f6a..cb63fcc5f0 100644 --- a/include/boost/property_tree/ini_parser.hpp +++ b/include/boost/property_tree/ini_parser.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -165,13 +166,17 @@ namespace boost { namespace property_tree { namespace ini_parser BOOST_PROPERTY_TREE_THROW(ini_parser_error( "cannot open file", filename, 0)); stream.imbue(loc); - try { + + BOOST_TRY { read_ini(stream, pt); } - catch (ini_parser_error &e) { + BOOST_CATCH (ini_parser_error &e) { + #ifndef BOOST_NO_EXCEPTIONS BOOST_PROPERTY_TREE_THROW(ini_parser_error( e.message(), filename, e.line())); + #endif } + BOOST_CATCH_END } namespace detail @@ -313,13 +318,17 @@ namespace boost { namespace property_tree { namespace ini_parser BOOST_PROPERTY_TREE_THROW(ini_parser_error( "cannot open file", filename, 0)); stream.imbue(loc); - try { + + BOOST_TRY { write_ini(stream, pt, flags); } - catch (ini_parser_error &e) { + BOOST_CATCH (ini_parser_error &e) { + #ifndef BOOST_NO_EXCEPTIONS BOOST_PROPERTY_TREE_THROW(ini_parser_error( e.message(), filename, e.line())); + #endif } + BOOST_CATCH_END } } } }