blob: 256c938fcb0123d795c83fba395a0e59b8f1b9ee [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
Jamie Madilld7b1ab52016-12-12 14:42:19 -050017TDiagnostics::TDiagnostics(TInfoSink &infoSink)
18 : 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,
28 const std::string &reason,
Olli Etuaho4de340a2016-12-16 09:32:03 +000029 const std::string &token)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000030{
alokp@chromium.org6b495712012-06-29 00:06:58 +000031 TPrefixType prefix = EPrefixNone;
32 switch (severity)
33 {
Jamie Madilld7b1ab52016-12-12 14:42:19 -050034 case PP_ERROR:
35 ++mNumErrors;
36 prefix = EPrefixError;
37 break;
38 case PP_WARNING:
39 ++mNumWarnings;
40 prefix = EPrefixWarning;
41 break;
42 default:
43 UNREACHABLE();
44 break;
alokp@chromium.org6b495712012-06-29 00:06:58 +000045 }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000046
Jamie Madilld7b1ab52016-12-12 14:42:19 -050047 TInfoSinkBase &sink = mInfoSink.info;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000048 /* VC++ format: file(linenum) : error #: 'token' : extrainfo */
49 sink.prefix(prefix);
Jamie Madill075edd82013-07-08 13:30:19 -040050 sink.location(loc.file, loc.line);
Olli Etuaho4de340a2016-12-16 09:32:03 +000051 sink << "'" << token << "' : " << reason << "\n";
Olli Etuaho1cc598f2016-08-18 13:50:30 +030052}
53
Olli Etuaho7351c2a52016-12-15 18:06:41 +000054void TDiagnostics::error(const TSourceLoc &loc, const char *reason, const char *token)
55{
Olli Etuaho4de340a2016-12-16 09:32:03 +000056 pp::SourceLocation srcLoc;
57 srcLoc.file = loc.first_file;
58 srcLoc.line = loc.first_line;
59 writeInfo(pp::Diagnostics::PP_ERROR, srcLoc, reason, token);
Olli Etuaho7351c2a52016-12-15 18:06:41 +000060}
61
Olli Etuaho4de340a2016-12-16 09:32:03 +000062void TDiagnostics::warning(const TSourceLoc &loc, const char *reason, const char *token)
Olli Etuaho1cc598f2016-08-18 13:50:30 +030063{
64 pp::SourceLocation srcLoc;
65 srcLoc.file = loc.first_file;
66 srcLoc.line = loc.first_line;
Olli Etuaho4de340a2016-12-16 09:32:03 +000067 writeInfo(pp::Diagnostics::PP_WARNING, srcLoc, reason, token);
Olli Etuaho1cc598f2016-08-18 13:50:30 +030068}
69
Jamie Madilld7b1ab52016-12-12 14:42:19 -050070void TDiagnostics::print(ID id, const pp::SourceLocation &loc, const std::string &text)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000071{
Olli Etuaho4de340a2016-12-16 09:32:03 +000072 writeInfo(severity(id), loc, message(id), text);
alokp@chromium.org8b851c62012-06-15 16:25:11 +000073}
Jamie Madill45bcc782016-11-07 13:58:48 -050074
75} // namespace sh