blob: d2fe429286078a4f66574dc525832c5040531900 [file] [log] [blame]
alokp@chromium.org8b851c62012-06-15 16:25:11 +00001//
shannon.woods%transgaming.com@gtempaccount.com0bbed382013-04-13 03:38:07 +00002// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org8b851c62012-06-15 16:25:11 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
Geoff Lang17732822013-08-29 13:46:49 -04007#include "compiler/translator/Diagnostics.h"
alokp@chromium.org8b851c62012-06-15 16:25:11 +00008
Olli Etuahod57e0db2015-04-24 15:05:08 +03009#include "common/debug.h"
daniel@transgaming.comb401a922012-10-26 18:58:24 +000010#include "compiler/preprocessor/SourceLocation.h"
Olli Etuaho1cc598f2016-08-18 13:50:30 +030011#include "compiler/translator/Common.h"
12#include "compiler/translator/InfoSink.h"
alokp@chromium.org8b851c62012-06-15 16:25:11 +000013
Jamie Madill45bcc782016-11-07 13:58:48 -050014namespace sh
15{
16
Olli Etuaho77ba4082016-12-16 12:01:18 +000017TDiagnostics::TDiagnostics(TInfoSinkBase &infoSink)
Jamie Madilld7b1ab52016-12-12 14:42:19 -050018 : mInfoSink(infoSink), mNumErrors(0), mNumWarnings(0)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000019{
20}
21
22TDiagnostics::~TDiagnostics()
23{
24}
25
26void TDiagnostics::writeInfo(Severity severity,
Jamie Madilld7b1ab52016-12-12 14:42:19 -050027 const pp::SourceLocation &loc,
Olli Etuaho77ba4082016-12-16 12:01:18 +000028 const char *reason,
29 const char *token)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000030{
alokp@chromium.org6b495712012-06-29 00:06:58 +000031 switch (severity)
32 {
Olli Etuaho77ba4082016-12-16 12:01:18 +000033 case SH_ERROR:
Jamie Madilld7b1ab52016-12-12 14:42:19 -050034 ++mNumErrors;
Jamie Madilld7b1ab52016-12-12 14:42:19 -050035 break;
Olli Etuaho77ba4082016-12-16 12:01:18 +000036 case SH_WARNING:
Jamie Madilld7b1ab52016-12-12 14:42:19 -050037 ++mNumWarnings;
Jamie Madilld7b1ab52016-12-12 14:42:19 -050038 break;
39 default:
40 UNREACHABLE();
41 break;
alokp@chromium.org6b495712012-06-29 00:06:58 +000042 }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000043
44 /* VC++ format: file(linenum) : error #: 'token' : extrainfo */
Olli Etuaho77ba4082016-12-16 12:01:18 +000045 mInfoSink.prefix(severity);
46 mInfoSink.location(loc.file, loc.line);
47 mInfoSink << "'" << token << "' : " << reason << "\n";
48}
49
50void TDiagnostics::globalError(const char *message)
51{
52 ++mNumErrors;
53 mInfoSink.prefix(SH_ERROR);
54 mInfoSink << message << "\n";
55}
56
57void TDiagnostics::error(const pp::SourceLocation &loc, const char *reason, const char *token)
58{
59 writeInfo(SH_ERROR, loc, reason, token);
60}
61
62void TDiagnostics::warning(const pp::SourceLocation &loc, const char *reason, const char *token)
63{
64 writeInfo(SH_WARNING, loc, reason, token);
Olli Etuaho1cc598f2016-08-18 13:50:30 +030065}
66
Olli Etuaho7351c2a52016-12-15 18:06:41 +000067void TDiagnostics::error(const TSourceLoc &loc, const char *reason, const char *token)
68{
Olli Etuaho4de340a2016-12-16 09:32:03 +000069 pp::SourceLocation srcLoc;
70 srcLoc.file = loc.first_file;
71 srcLoc.line = loc.first_line;
Olli Etuaho77ba4082016-12-16 12:01:18 +000072 error(srcLoc, reason, token);
Olli Etuaho7351c2a52016-12-15 18:06:41 +000073}
74
Olli Etuaho4de340a2016-12-16 09:32:03 +000075void TDiagnostics::warning(const TSourceLoc &loc, const char *reason, const char *token)
Olli Etuaho1cc598f2016-08-18 13:50:30 +030076{
77 pp::SourceLocation srcLoc;
78 srcLoc.file = loc.first_file;
79 srcLoc.line = loc.first_line;
Olli Etuaho77ba4082016-12-16 12:01:18 +000080 warning(srcLoc, reason, token);
Olli Etuaho1cc598f2016-08-18 13:50:30 +030081}
82
Jamie Madilld7b1ab52016-12-12 14:42:19 -050083void TDiagnostics::print(ID id, const pp::SourceLocation &loc, const std::string &text)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000084{
Olli Etuaho77ba4082016-12-16 12:01:18 +000085 writeInfo(isError(id) ? SH_ERROR : SH_WARNING, loc, message(id), text.c_str());
86}
87
88void TDiagnostics::resetErrorCount()
89{
90 mNumErrors = 0;
91 mNumWarnings = 0;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000092}
Jamie Madill45bcc782016-11-07 13:58:48 -050093
94} // namespace sh