blob: b365dd06b1e2d4e73fdc7221820868ead7fd0d6b [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,
29 const std::string &token,
30 const std::string &extra)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000031{
alokp@chromium.org6b495712012-06-29 00:06:58 +000032 TPrefixType prefix = EPrefixNone;
33 switch (severity)
34 {
Jamie Madilld7b1ab52016-12-12 14:42:19 -050035 case PP_ERROR:
36 ++mNumErrors;
37 prefix = EPrefixError;
38 break;
39 case PP_WARNING:
40 ++mNumWarnings;
41 prefix = EPrefixWarning;
42 break;
43 default:
44 UNREACHABLE();
45 break;
alokp@chromium.org6b495712012-06-29 00:06:58 +000046 }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000047
Jamie Madilld7b1ab52016-12-12 14:42:19 -050048 TInfoSinkBase &sink = mInfoSink.info;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000049 /* VC++ format: file(linenum) : error #: 'token' : extrainfo */
50 sink.prefix(prefix);
Jamie Madill075edd82013-07-08 13:30:19 -040051 sink.location(loc.file, loc.line);
Jamie Madilld7b1ab52016-12-12 14:42:19 -050052 sink << "'" << token << "' : " << reason << " " << extra << "\n";
alokp@chromium.org8b851c62012-06-15 16:25:11 +000053}
54
Olli Etuaho1cc598f2016-08-18 13:50:30 +030055void TDiagnostics::error(const TSourceLoc &loc,
56 const char *reason,
57 const char *token,
58 const char *extraInfo)
59{
60 pp::SourceLocation srcLoc;
61 srcLoc.file = loc.first_file;
62 srcLoc.line = loc.first_line;
63 writeInfo(pp::Diagnostics::PP_ERROR, srcLoc, reason, token, extraInfo);
64}
65
Olli Etuaho7351c2a52016-12-15 18:06:41 +000066void TDiagnostics::error(const TSourceLoc &loc, const char *reason, const char *token)
67{
68 error(loc, reason, token, "");
69}
70
Olli Etuaho1cc598f2016-08-18 13:50:30 +030071void TDiagnostics::warning(const TSourceLoc &loc,
72 const char *reason,
73 const char *token,
74 const char *extraInfo)
75{
76 pp::SourceLocation srcLoc;
77 srcLoc.file = loc.first_file;
78 srcLoc.line = loc.first_line;
79 writeInfo(pp::Diagnostics::PP_WARNING, srcLoc, reason, token, extraInfo);
80}
81
Jamie Madilld7b1ab52016-12-12 14:42:19 -050082void TDiagnostics::print(ID id, const pp::SourceLocation &loc, const std::string &text)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000083{
alokp@chromium.org6b495712012-06-29 00:06:58 +000084 writeInfo(severity(id), loc, message(id), text, "");
alokp@chromium.org8b851c62012-06-15 16:25:11 +000085}
Jamie Madill45bcc782016-11-07 13:58:48 -050086
87} // namespace sh