blob: 41fe81106d823ad61101f92a89cc31043595a46c [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
7#include "compiler/Diagnostics.h"
8
alokp@chromium.org6b495712012-06-29 00:06:58 +00009#include "compiler/debug.h"
alokp@chromium.org8b851c62012-06-15 16:25:11 +000010#include "compiler/InfoSink.h"
daniel@transgaming.comb401a922012-10-26 18:58:24 +000011#include "compiler/preprocessor/SourceLocation.h"
alokp@chromium.org8b851c62012-06-15 16:25:11 +000012
alokp@chromium.org6b495712012-06-29 00:06:58 +000013TDiagnostics::TDiagnostics(TInfoSink& infoSink) :
shannon.woods%transgaming.com@gtempaccount.com0bbed382013-04-13 03:38:07 +000014 mShaderVersion(100),
alokp@chromium.org6b495712012-06-29 00:06:58 +000015 mInfoSink(infoSink),
16 mNumErrors(0),
17 mNumWarnings(0)
alokp@chromium.org8b851c62012-06-15 16:25:11 +000018{
19}
20
21TDiagnostics::~TDiagnostics()
22{
23}
24
shannon.woods%transgaming.com@gtempaccount.com0bbed382013-04-13 03:38:07 +000025void TDiagnostics::setShaderVersion(int version)
26{
27 mShaderVersion = version;
28}
29
alokp@chromium.org8b851c62012-06-15 16:25:11 +000030void TDiagnostics::writeInfo(Severity severity,
31 const pp::SourceLocation& loc,
32 const std::string& reason,
33 const std::string& token,
34 const std::string& extra)
35{
alokp@chromium.org6b495712012-06-29 00:06:58 +000036 TPrefixType prefix = EPrefixNone;
37 switch (severity)
38 {
39 case ERROR:
40 ++mNumErrors;
41 prefix = EPrefixError;
42 break;
43 case WARNING:
44 ++mNumWarnings;
45 prefix = EPrefixWarning;
46 break;
47 default:
48 UNREACHABLE();
49 break;
50 }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000051
alokp@chromium.org6b495712012-06-29 00:06:58 +000052 TInfoSinkBase& sink = mInfoSink.info;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000053 /* VC++ format: file(linenum) : error #: 'token' : extrainfo */
54 sink.prefix(prefix);
55 sink.location(EncodeSourceLoc(loc.file, loc.line));
56 sink << "'" << token << "' : " << reason << " " << extra << "\n";
57}
58
59void TDiagnostics::writeDebug(const std::string& str)
60{
61 mInfoSink.debug << str;
62}
63
64void TDiagnostics::print(ID id,
65 const pp::SourceLocation& loc,
66 const std::string& text)
67{
alokp@chromium.org6b495712012-06-29 00:06:58 +000068 writeInfo(severity(id), loc, message(id), text, "");
alokp@chromium.org8b851c62012-06-15 16:25:11 +000069}