1//
2// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef COMPILER_TRANSLATOR_DIAGNOSTICS_H_
8#define COMPILER_TRANSLATOR_DIAGNOSTICS_H_
9
10#include "common/angleutils.h"
11#include "compiler/preprocessor/DiagnosticsBase.h"
12#include "compiler/translator/Severity.h"
13
14namespace sh
15{
16
17class TInfoSinkBase;
18struct TSourceLoc;
19
20class TDiagnostics : public angle::pp::Diagnostics, angle::NonCopyable
21{
22 public:
23 TDiagnostics(TInfoSinkBase &infoSink);
24 ~TDiagnostics() override;
25
26 int numErrors() const { return mNumErrors; }
27 int numWarnings() const { return mNumWarnings; }
28
29 void error(const angle::pp::SourceLocation &loc, const char *reason, const char *token);
30 void warning(const angle::pp::SourceLocation &loc, const char *reason, const char *token);
31
32 void error(const TSourceLoc &loc, const char *reason, const char *token);
33 void warning(const TSourceLoc &loc, const char *reason, const char *token);
34
35 void globalError(const char *message);
36
37 void resetErrorCount();
38
39 protected:
40 void writeInfo(Severity severity,
41 const angle::pp::SourceLocation &loc,
42 const char *reason,
43 const char *token);
44
45 void print(ID id, const angle::pp::SourceLocation &loc, const std::string &text) override;
46
47 private:
48 TInfoSinkBase &mInfoSink;
49 int mNumErrors;
50 int mNumWarnings;
51};
52
53// Diagnostics wrapper to use when the code is only allowed to generate warnings.
54class PerformanceDiagnostics : public angle::NonCopyable
55{
56 public:
57 PerformanceDiagnostics(TDiagnostics *diagnostics);
58
59 void warning(const TSourceLoc &loc, const char *reason, const char *token);
60
61 private:
62 TDiagnostics *mDiagnostics;
63};
64
65} // namespace sh
66
67#endif // COMPILER_TRANSLATOR_DIAGNOSTICS_H_
68