]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/dataerror.cpp
Exception rework for parser components
[libs/datafile.git] / source / dataerror.cpp
diff --git a/source/dataerror.cpp b/source/dataerror.cpp
new file mode 100644 (file)
index 0000000..b21b84f
--- /dev/null
@@ -0,0 +1,32 @@
+#include <typeinfo>
+#include <msp/debug/demangle.h>
+#include <msp/strings/format.h>
+#include "dataerror.h"
+
+using namespace std;
+
+namespace Msp {
+namespace DataFile {
+
+data_error::data_error(const string &s, unsigned l, const string &w):
+       runtime_error(make_what(s, l, w)),
+       source(s),
+       line(l)
+{ }
+
+data_error::data_error(const string &s, unsigned l, const exception &e):
+       runtime_error(make_what(s, l, format("%s (%s)", Debug::demangle(typeid(e).name()), e.what()))),
+       source(s),
+       line(l)
+{ }
+
+string data_error::make_what(const string &s, unsigned l, const string &w)
+{
+       if(l)
+               return format("%s:%d: %s", s, l, w);
+       else
+               return format("%s: %s", s, w);
+}
+
+} // namespace DataFile
+} // namespace Msp