From 044e2e1c1460fb060f677a366144b98905522754 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 31 Jan 2017 22:08:38 +0300 Subject: Add sed builtin --- build2/regex.cxx | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 build2/regex.cxx (limited to 'build2/regex.cxx') diff --git a/build2/regex.cxx b/build2/regex.cxx new file mode 100644 index 0000000..40347b5 --- /dev/null +++ b/build2/regex.cxx @@ -0,0 +1,42 @@ +// file : build2/regex.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include + +#if defined(_MSC_VER) && _MSC_VER <= 1910 +# include // strstr() +#endif + +#include +#include + +namespace std +{ + // Currently libstdc++ just returns the name of the exception (bug #67361). + // So we check that the description contains at least one space character. + // + // While VC's description is meaningful, it has an undesired prefix that + // resembles the following: 'regex_error(error_badrepeat): '. So we skip it. + // + ostream& + operator<< (ostream& o, const regex_error& e) + { + const char* d (e.what ()); + +#if defined(_MSC_VER) && _MSC_VER <= 1910 + const char* rd (strstr (d, "): ")); + if (rd != nullptr) + d = rd + 3; +#endif + + ostringstream os; + os << runtime_error (d); // Sanitize the description. + + string s (os.str ()); + if (s.find (' ') != string::npos) + o << ": " << s; + + return o; + } +} -- cgit v1.1