]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/glsl_error.h
Record information of the provoking location of a diagnostic
[libs/gl.git] / source / glsl / glsl_error.h
1 #ifndef MSP_GL_SL_ERROR_H_
2 #define MSP_GL_SL_ERROR_H_
3
4 #include <stdexcept>
5 #include <msp/strings/format.h>
6
7 namespace Msp {
8 namespace GL {
9 namespace SL {
10
11 struct Location;
12
13 class invalid_shader_source: public std::runtime_error
14 {
15 public:
16         invalid_shader_source(const std::string &w): runtime_error(w) { }
17         invalid_shader_source(const Location &, const std::string &);
18 #if __cplusplus>=201103L
19         template<typename... Args>
20         invalid_shader_source(const Location &loc, const std::string & fmt, Args... args):
21                 invalid_shader_source(loc, format(fmt, args...))
22         { }
23 #endif
24         virtual ~invalid_shader_source() throw() { }
25 };
26
27 class syntax_error: public invalid_shader_source
28 {
29 public:
30         syntax_error(const Location &, const std::string &, const std::string &);
31         virtual ~syntax_error() throw() { }
32 };
33
34 class parse_error: public invalid_shader_source
35 {
36 public:
37         parse_error(const Location &, const std::string &, const std::string &);
38         virtual ~parse_error() throw() { }
39 };
40
41 struct Diagnostic
42 {
43         enum Severity
44         {
45                 INFO,
46                 WARN,
47                 ERR
48         };
49
50         Severity severity;
51         int source;
52         unsigned line;
53         int provoking_source;
54         unsigned provoking_line;
55         std::string message;
56
57         Diagnostic(): severity(INFO), source(-2), line(0) { }
58 };
59
60 } // namespace SL
61 } // namespace GL
62 } // namespace Msp
63
64 #endif